汇编语言知识点1Word文档下载推荐.docx
- 文档编号:20643256
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:24
- 大小:77.85KB
汇编语言知识点1Word文档下载推荐.docx
《汇编语言知识点1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编语言知识点1Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
CS、DS、SS、ES
七、标志寄存器(FLAGS/PSW)
条件标志位:
OF溢出标志SF符号标志ZF零标志
CF进位标志AF辅助进位标志PF奇偶标志
控制标志位:
DF方向标志IF中断标志TF陷阱标志
八、寄存器与存储器的比较:
寄存器:
在CPU内部;
访问速度快;
容量小,成本高;
用名字表示;
没用地址
存储器:
在CPU外部;
访问速度慢;
容量大,成本低;
用地址表示;
地址可用各种方式形成
第三章
寻址方式
操作数
所在位置
物理地址
(PA)
格式
注意
1.立即寻址
存储器的代码段
无
MOVAL,5
只能用源操作数
操作数和源操作数的长度一致
2.寄存器寻址
寄存器
(唯一)
无
MOVAX,BX
字节寄存器只有
AHALBHBLCHCLDHDL
CS不能用MOV指令改变,
源操作数和目的操作数的字长一致
3.直接寻址
存储器
段地址
+位移量
MOVAX,ES:
[2000H]
MOVAX,VALUE
MOVAX,[2000H]
默认的段地址存储在DS中
遇到BP的段地址存储在SS
可以使用段跨越前缀
4.寄存器
间接寻址
+基址
/变址
MOVAX,[BX]
[BX]
可用的寄存器:
BXBPSIDI
不允许使用AX、CX、DX
存放偏移地址(EA)
SRC和DST的字长一致
使用BP时,默认的数据段是SS,
其余都是DS
5.寄存器
相对寻址
MOVAX,COU[SI]
[COU+SI]
MOVAX,[COU+SI]
6.基址变址寻址
+变址
MOVAX,[BX+SI]
MOVAX,[BX][SI]
7.相对
基址变址
MOVAX,MASK[BX][SI]
MOVAX.MASK[BX+SI]
可以使用段跨越前缀
九、数据传送指令
传送指令MOVCPU内部寄存器之间的数据传送
指令格式:
MOVDST,SRC执行操作:
(DST)(SRC)
注意:
*DST、SRC不能同时为段寄存器MOVDS,ES
*DST、SRC不能同时为存储单元
*立即数不能直接送段寄存器MOVDS,2000H
*DST不能是立即数和CS
*不影响标志位
交换指令XCHG
XCHGOPR1,OPR2执行操作:
(OPR1)(OPR2)
例:
XCHGBX,[BP+SI]XCHGAL,BH
*两个操作数字长一致
*两个操作数都不能是段寄存器
*两个操作数都不能是立即数
*两个操作数不能同时是存储单元
*可以采用除立即寻址方式外的任何一种寻址方式。
*不影响标志位
地址传送指令LEA、LDS、LES
1.有效地址送寄存器指令:
LEAREG,SRC执行操作:
(REG)SRC
2.指针送寄存器和DS指令:
LDSREG,SRC执行操作:
(REG)(SRC)
(DS)(SRC+2)相继二字寄存器、DS
3.指针送寄存器和ES指令:
LESREG,SRC执行操作:
(ES)(SRC+2)相继二字寄存器、ES
注意:
*源操作数必须为存储器操作数
*目的操作数必须是一个16位通用寄存器,不能是段寄存器
*源操作数可以是除立即寻址和寄存器寻址以外的任意一种寻址方式
堆栈操作指令PUSH、POP
1.进栈指令:
PUSHSRC
执行操作:
(SP)(SP)–2((SP)+1,(SP))(SRC)
出栈指令:
POPDST
(DST)((SP)+1,(SP))(SP)(SP)+2
堆栈:
‘先进后出’的存储区,段地址存放在SS中,SP在任何时候都指向栈顶,进出栈后自动修改SP。
*堆栈操作必须以字为单位。
*不能用立即寻址方式PUSH1234H
*DST不能是CSPOPCS
堆栈的用途:
临时保存寄存器的内容。
PUSHAX
PUSHBX
PUSHCX
……;
其间用到AX、BX、CX
POPCX;
后进先出
POPBX
POPAX
标志操作指令
LAHF、SAHF、PUSHF、POPF、CLC、STC、CMC、CLD、STD、LI、STI
标志传送指令:
1.标志送AH指令:
LAHF执行操作:
(AH)(FLAGS的低字节)
2.AH送标志寄存器指令:
SAHF执行操作:
(FLAGS的低字节)(AH)
*LAHF不影响标志位*SAHF影响CF、PF、AF、ZF、SF
标志进栈指令:
PUSHF
(SP)(SP)-2((SP)+1,(SP))(FLAGS)
标志出栈指令:
POPF
(FLAGS)((SP)+1,(SP))(SP)(SP)+2
PUSHF和POPF经常一起联用,完成保护、维护标志寄存器的内容或改变标志位的值。
标志位操作指令:
清进位标志指令CLCCF←0
置进位标志指令STCCF←1
进位标志取反指令CMCCF←CF
清方向标志指令CLDDF←0
置方向标志指令STDDF←1
清中断允许标志指令CLIIF←0
置中断允许标志指令STIIF←1
*只影响本指令指定的标志
一十、加减法指令:
加法指令:
ADDDST,SRC执行操作:
(DST)(SRC)+(DST)
带进位加法指令:
ADCDST,SRC执行操作:
(DST)(SRC)+(DST)+CF
加1指令:
INCOPR执行操作:
(OPR)(OPR)+1
*除INC指令不影响CF标志外,均对状态标志位有影响。
各加法指令对条件标志位的影响:
SF=1,结果为负ZF=1,结果为0CF=1,和的最高有效位有向高位的进位
OF=1,两个操作数符号相同,而结果符号与之相反
CF位表示无符号数相加的溢出。
OF位表示带符号数相加的溢出。
减法指令:
SUBDST,SRC执行操作:
(DST)(DST)-(SRC)
带借位减法指令:
SBBDST,SRC执行操作:
(DST)(DST)-(SRC)-CF
减1指令:
DECOPR执行操作:
(OPR)(OPR)-1
求补指令:
NEGOPR执行操作:
(OPR)-(OPR)
比较指令:
CMPOPR1,OPR2执行操作:
(OPR1)-(OPR2)
各减法指令对条件标志位(CF/OF/ZF/SF)的影响:
CF=1,被减数的最高有效位有向高位的借位或CF=1减数转换为加法运算时无进位
OF=1两个操作数符号相反,而结果的符号与减数相同
CF位表示无符号数减法的溢出。
OF位表示带符号数减法的溢出。
NEG指令对CF/OF的影响
CF=0,操作数为0OF=1,操作数为-128(字节运算)或-32727(字运算
一十一、乘除运算指令
无符号数乘法指令:
MULSRC带符号数乘法指令:
IMULSRC
字节操作数(AX)(AL)*(SRC)
字操作数(DX,AX)(AX)*(SRC)
*目的操作数必须是累加器
*AL(AX)为隐含的乘数寄存器。
*AX(DX,AX)为隐含的乘积寄存器。
*SRC不能为立即数。
*除CF和OF外,对条件标志位无
乘法指令对CF/OF的影响:
MUL指令:
CF,OF=00乘积的高一半为零
11否则
IMUL指令:
CF,OF=00乘积的高一半是低一半的符号扩展
(AX)=16A5H,(BX)=0611H
(1)MULBX;
(DX,AX)(AX)*(BX)
;
16A5*0611=00895EF5
(DX)=0089H(AX)=5EF5HCF=OF=1
(2)IMULBL;
(AX)(AL)*(BL)
A5*115B*11=060BF9F5
(AX)=0F9F5HCF=OF=1
无符号数除法指令:
DIVSRC
带符号数除法指令:
IDIVSRC
字节操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余数
字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数
*AX(DX,AX)为隐含的被除数寄存器。
*AL(AX)为隐含的商寄存器。
*AH(DX)为隐含的余数寄存器。
*对所有条件标志位均无定义。
一十二、类型转换指令
CBWALAX
若(AL)的最高有效位为0,则(AH)=00H,若(AL)的最高有效位为1,则(AH)=FFH
CWDAX(DX,AX)
若(AX)的最高有效位为0,则(DX)=0000H,若(AX)的最高有效位为1,则(DX)=FFFFH
(AX)=0BA45H
CBW;
(AX)=0045HCWD;
(DX)=0FFFFH(AX)=0BA45H
*无操作数指令*隐含对AL或AX进行符号扩展*不影响条件标志位
一十三、逻辑运算指令
逻辑非指令:
NOTOPR*OPR不能为立即数
(OPR)(OPR)*不影响标志位
CF
OF
SF
ZF
PF
AF
*
无定义
逻辑与指令:
ANDDST,SRC执行操作:
(DST)(DST)(SRC)
逻辑或指令:
ORDST,SRC执行操作:
异或指令:
XORDST,SRC执行操作:
测试指令:
TESTOPR1,OPR2执行操作:
(OPR1)(OPR2)
一十四、移位指令
逻辑左移SHLOPR,CNT
逻辑右移SHROPR,CNT
算术左移SALOPR,CNT(同逻辑左移)
算术右移SAROPR,CNT
循环左移ROLOPR,CNT
循环右移ROROPR,CNT
带进位循环左移RCLOPR,CNT
带进位循环右移RCROPR,CNT
*OPR可用除立即数以外的任何寻址方式
*CNT=1,SHLOPR,1
CNT>
1,MOVCL,CNTSHLOPR,CL;
以SHL为例
*条件标志位:
CF=移入的数值1CNT=1时,最高有效位的值发生变化
0CNT=1时,最高有效位的值不变
移位指令:
SF、ZF、PF根据移位结果设置,AF无定义
循环移位指令:
不影响SF、ZF、PF、AF
一十五、控制转移指令:
无条件转移指令JMP
条件转移指令
JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、
JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、
JLE/JNLE、JCXZ
循环指令LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE
子程序调用和返回指令CALL、RET
中断与中断返回指令INT、INTO、IRET
一十六、与转移地址有关的寻址方式:
用来确定转移指令及转子指令的转向地址
段内寻址段内直接寻址JMPNEARPTRNEXT
段内间接寻址JMPTABLE[BX]
段间寻址段间直接寻址JMPFARPTRNEXT
段间间接寻址JMPDWORDPTR[BX]
无条件转移指令:
段内直接短转移:
JMPSHORTOPR
执行操作:
(IP)←(IP)+8位位移量
段内直接近转移:
JMPNEARPTROPR
(IP)←(IP)+16位位移量
段内间接转移:
JMPWORDPTROPR
(IP)←(EA)
段间直接远转移:
JMPFARPTROPR
(IP)←OPR的段内偏移地址(CS)←OPR所在段的段地址
段间间接转移:
JMPDWORDPTROPR
(IP)←(EA)(CS)←(EA+2)
一十七、条件转移指令
*只能使用段内直接寻址的8位位移量*不影响标志位
(1)根据单个条件标志的设置情况转移
格式测试条件
JZ(JE)OPRZF=1
JNZ(JNE)OPRZF=0
JSOPRSF=1
JNSOPRSF=0
JOOPROF=1
JNOOPROF=0
JPOPRPF=1
JNPOPRPF=0
JCOPRCF=1
JNCOPRCF=0
(2)比较两个无符号数,并根据比较结果转移
<JB(JNAE,JC)OPRCF=1
≥JNB(JAE,JNC)OPRCF=0
≤JBE(JNA)OPRCF∨ZF=1
>JNBE(JA)OPRCF∨ZF=0
*适用于地址或双精度数低位字的比较
(3)比较两个带符号数,并根据比较结果转移*适用于带符号数的比较
<JL(JNGE)OPRSFOF=1
≥JNL(JGE)OPRSFOF=0
≤JLE(JNG)OPR(SFOF)∨ZF=1
>JNLE(JG)OPR(SFOF)∨ZF=0
(4)测试CX的值为0则转移
格式测试条件
JCXZOPR(CX)=0
一十八、循环指令
*CX中存放循环次数
*只能使用段内直接寻址的8位位移量*不影响标志位
LOOP
LOOPZ/LOOPE
LOOPNZ/LOOPNE
执行步骤:
(1)(CX)←(CX)–1
(2)检查是否满足测试条件,如满足则(IP)←(IP)+8位位移量,实行循环;
不满足则IP不变,退出循环
循环指令:
LOOPOPR
测试条件:
(CX)0
为零或相等时循环指令:
LOOPZ(LOOPE)OPR
ZF=1且(CX)0
不为零或不相等时循环指令:
LOOPNZ(LOOPNE)OPR
ZF=0且(CX)0
一十九、例:
求首地址为ARRAY的M个字之和,结果存入TOTAL
MOVCX,M
MOVAX,0
MOVSI,AX
AGAIN:
ADDAX,ARRAY[SI]
ADDSI,2
LOOPAGAIN
MOVTOTAL,AX
二十、串处理指令
串处理指令串重复前缀
LODSB/LODSWREP
STOSB/STOSWREPE/REPZ
MOVSB/MOVSWREPNE/REPNZ
SCASB/SCASW
CMPSB/CMPSW
LODS从串取指令:
LODSSRC
LODSB(字节)
LODSW(字)
字节操作:
(AL)←((SI)),(SI)←(SI)±
1
字操作:
(AX)←((SI)),(SI)←(SI)±
2
*LODS指令一般不与REP联用
*源串一般在数据段中(允许使用段跨越前缀来修改),
目的串必须在附加段中
*不影响条件标志位
STOS存入串指令:
STOSDST
STOSB(字节)
STOSW(字)
((DI))←(AL),(DI)←(DI)±
((DI))←(AX),(DI)←(DI)±
MOVS串传送指令:
MOVSDST,SRC
MOVSB(字节)
MOVSW(字)
MOVSES:
BYTEPTR[DI],DS:
[SI]
(1)((DI))←((SI))
(2)字节操作:
(SI)←(SI)±
1,(DI)←(DI)±
(SI)←(SI)±
2,(DI)←(DI)±
方向标志DF=0时用+,DF=1时用-。
SCAS串扫描指令:
SCASDST
SCASB(字节)
SCASW(字)
(AL)-((DI)),(DI)←(DI)±
(AX)-((DI)),(DI)←(DI)±
CMPS串比较指令:
CMPSSRC,DST
CMPSB(字节)
CMPSW(字)
(1)((SI))-((DI))根据比较结果置条件标志位:
相等ZF=1;
不等ZF=0
REP(与MOVS/STOS配合工作)
(1)如(CX)=0则退出REP,否则转
(2)
(2)(CX)(CX)-1
(3)执行MOVS/STOS/LODS
(4)重复
(1)~(3)
REPMOVS:
将数据段中的整串数据传送到附加段中。
源串(数据段)→目的串(附加段)
执行REPMOVS之前,应先做好:
(1)源串首地址(末地址)→SI
(2)目的串首地址(末地址)→DI
(3)串长度→CX
(4)建立方向标志(CLD使DF=0,STD使DF=1)
REPE/REPZ
REPNE/REPNZ(与CMPS和SCAS配合工作)
(1)如(CX)=0或ZF=0(ZF=1)则退出串操作,否则转
(2)
(2)(CX)←(CX)-1
(3)执行CMPS/SCAS
从一个字符串中查找一个指定的字符
messdb‘COMPUTER’
leadi,mess
moval,‘T’
movcx,8
cld
repnescasb
比较两个字符串,找出它们不相匹配的位置
leasi,mess1
leadi,mess2
movcx,8
cld
repecmpsb
反向传送
leasi,mess1+7
leadi,mess2+7
STd
repmovsb
第四章
二十一、标号和变量
(1)标号和变量都是标识符。
标识符组成:
字母a~z,数字0~9,专用字符?
.@_$
标识符的组成规则:
最大长度为31,第一个字符不能是数字,不区分字母的大小写,不能是汇编语言的保留字
(2)标号和变量的异同:
不同:
标号:
用于汇编指令语句中,以冒号结束,在代码段中定义,经常在转移指令或call指令
变量:
用于伪指令语句中,不允许有冒号,在数据段或附加段中定义,经常在操作数字段出现
相同:
都有三种属性:
段属性、偏移属性、类型属性
二十二、伪操作
是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、
存储器分配、指示程序开始结束等功能。
处理器选择伪操作段定义伪操作
程序开始和结束伪操作数据定义及存储器分配伪操作
表达式赋值伪操作地址计数器与对准伪操作
基数控制伪操作
二十三、段定义伪操作
datasegment;
定义数据段
…
dataends
;
----------------------------------------
extrasegment;
定义附加段
extraends
codesegment;
定义代码段
assumecs:
code,ds:
data,es:
extra
start:
movax,data
movds,ax;
段地址段寄存器
co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 知识点