汇编复习(二)—— 常用指令

一、数据传送指令

1、通用数据传送指令
(1)MOV
MOV DST,SRC
(DST)<-(SRC)

(2)PUSH
PUSH SRC

(3)POP
POP DST

(4)XCHG
XCHG OPR1.OPR2
(OPR1)<–>(OPR2)

2、累加器专用传送指令
限用于AX,AL
(1)IN
IN AL/AX,PORT
(2)OUT
OUT PORT,AL/AX
(3)XLAT
XLAT
3、地址传送指令
(1)LEA
有效地址送寄存器
LEA REG,SRC
REG<-SRC
(2)LDS
有效地址送寄存器和DS指令
LDS REG,SRC
REG<-(SRC)
ds<-(SRC+2)
(3)LES
有效地址送寄存器和ES指令
LES REG,SRC
REG<-(SRC)
ES<-(SRC+2)

4、标志寄存器传送指令
(1)LAHF
标志送ah寄存器
(2)SAHF
AH送标志寄存器
(3)PUSHF
标志入栈
(4)POPF
标志出栈

二、算术运算指令

1、类型扩展指令
(1)
CBW
字节扩展成字
CBW DST,SRC
(2)
CWD
字扩展成双字
CWD DST,SRC
正数扩展加0,负数扩展加F.

2、加法指令
(1)ADD
ADD DST,SRC
(2)ADC
带进位加法
ADC DST,SRC
(3)INC
加一
INC OPR
3、减法指令
(1)SUB
SUB DST,SRC
(2)SBB
带借位减法
SBB DST,SRC
(3)DEC
减1
DEC OPR
(4)NEG
求补
NEG OPR
(5)CMP
比较
CMP OPR1,OPR2
OPR1-OPR2
不回送结果,只产生标志位

4、乘法指令
(1)MUL
无符号数乘法
MUL SRC
(2)IMUL
有符号数乘法
IMUL SRC

5、除法指令
(1)DIV
无符号数除法
DIV SRC
(2)IDIV
有符号数除法
IDIV SRC

三、逻辑与移位指令

1、逻辑指令
(1)AND
AND DST,SRC
(2)OR
OR DST,SRC
(3)NOT
NOT OPR
(4)XOR
XOR DST,SRC
(5)TEST
TEST OPR1,OPR2
(OPR1)^(OPR2)
结果不保存,只置标志位

2、移位指令
(1)SHL 逻辑左移
(2)SHR 逻辑右移
最高/低位送CF,补0
(3)SAL 算术左移
(4)SAR 算术右移
最高/低位送CF,补符号位
(5)ROL 循环左移
(6)ROR 循环右移
最高/低位送CF,补最低/高位
(7)RCL 带进位循环左移
(8)RCR 带进位循环右移
最高/低位送CF,补原CF

四、串操作指令

(1)MOVS
(2)CMPS
(3)SCAS
(4)LODS
(5)REP
(6)REPE/REPZ
(7)REPNE/REPNZ

五、程序转移指令

1、无条件转移指令JMP
(1)段内直接转移
JMP NEAR PTR OPR
IP<-IP+16
(2)段内间接转移
JMP WORD PTR OPR
IP<-(EA)
(3)段间直接转移
JMP FAR PTR OPR
IP<-OPR
CS<-OPR
(4)段间间接转移
JMP FAR PTR OPR
IP<-(EA)
CS<-(EA+2)

段内:IP改变,CS不变
段间:IP、CS的值改变

2、条件转移指令
(1)是否为0
JZ
JNZ
(2)是否为负
JS
JNS
(3)是否溢出
JO
JNO
(4)是否进位
JC
JNC
(5)奇偶位
JP
JNP
(6)有符号数
A、小于
JL
JNL
B、小于等于
JLE
JNLE

3、循环指令
(1)LOOP 循环
测试条件:
CX!=0
(2)LOOPZ/LOOPE 当为0/相等时循环
测试条件:
ZF=1,CX!=0
(3)LOOPNZ/LOOPNE 当不为0/相等时循环
测试条件:
ZF=0,CX!=0

总之,先执行CX-1,再根据测试条件

猜你喜欢

转载自blog.csdn.net/syy0201/article/details/103099566