一、数据传送
1、MOV
描述:赋值指令
格式:MOV DST,SRC
功能: DST <= SRC
注意:①不能DST,SRC都是存储器,这也是所有双操作数指令的通用要求。
② 但其中一个是段寄存器时,另一个操作数必须是数据寄存器。
③不允许往CS传递数据
④将立即数送存储时,要指定操作数类型。BYTE PTR ,WORD PTR, DWORD PTR
⑤不影响PSW
2、PUSH
描述:入栈指令
格式:PUSH SRC
功能:将SRC入栈
注意:①只能是对“字”操作。
3、POP
描述:出栈指令
格式:POP DST
功能:将栈顶元素出栈赋值给DST
4、XCHG
描述:数据交换指令
格式:SCHG DST,SRC
功能:将DST.SRC的值进行交换
注意:①不能DST,SRC都是存储器,这也是所有双操作数指令的通用要求。
5、IN
格式:IN DST,SRC
功能:从SRC端口读取一个字节/字到DST中。
6、OUT
格式:OUT DST,SRC
功能:将SRC中的数据送到DST短空中
7、XLAT
描述:取表指令
格式:XLAT
功能:以DS:[BX+AL]为地址提取一个字节的数据送到AL中
8、LEA
格式:LEA REG,MEM
功能:取MEM的偏移地址送到REG中。
9、LDS
格式:LDS reg,mem
功能:是把mem指向的地址,高位存放在DS中,低位存放在reg中。
10、LES
格式:LES reg,mem
功能:是把mem指向的地址,高位存放在ES中,低位存放在reg中。
11、PUSHF
格式:PUSHF
功能:将PSW进栈
12、POPF
格式:POPF
功能:将栈顶元素送到PSW
13、LAHF
格式:LAHF
功能:将PSW的低八位送到AH中
14、SAHF
格式:SAHF
功能:将AH写入PSW的低八位
二、算术
1、ADD
描述:加法指令
格式:ADD DST,SRC
功能: DST <= DST+REC
2、ADC
格式:ADC DST,SRC
功能:DST <= DST + REC + CF
3、INC
格式: INC DST
功能:DST <= DST + 1
4、SUB
格式:SUB DSTSRC
功能: DST <= DST - SRC
5、SBB
格式:SBB DST,SRC
功能:DST <= DST - SRC - CF
6、DEC
格式: DEC DST
功能:DST <= DST - 1
7、NEG
格式:NEG REG
功能:求补,即REG中的各位取反,然后 + 1。
8、CMP
格式:CMP DST,SRC
功能:DST - REG 结果不保存,但是状态保存在PSW中。
9、MUL
描述:无符号数乘法
格式:MUL SRC
功能:①字节操作:(AX) <=(AL) * (SRC)
②字操作: (DX,AX) <= (AX) *(SRC)
③双字操作:(EDX,EAX) <= (EAX) *(SRC)
10、IMUL
描述:有符号数乘法
格式:IMUL SRC
功能:DST <= DST * SRC
11、DIV
描述:无符号数除法
格式:DIV SRC
功能:①字节操作:(AH) <= (AX)/(SRC)的余数;(AL) <= (AX)/(SRC)的商
②字操作:(DX) <= (DX,AX)/(SRC)的余数;(AX) <= (DX,AX)/(SRC)的商
③双字操作:(EDX) <= (EDX,EAX)/(SRC)的余数;(EAX) <= (EDX,EAX)/(SRC)的商
12、IDIV
描述:有符号数除法
格式:IDIV SRC
功能:①字节操作:(AH) <= (AX)/(SRC)的余数;(AL) <= (AX)/(SRC)的商
②字操作:(DX) <= (DX,AX)/(SRC)的余数;(AX) <= (DX,AX)/(SRC)的商
③双字操作:(EDX) <= (EDX,EAX)/(SRC)的余数;(EAX) <= (EDX,EAX)/(SRC)的商
13、CBW
格式:CBW
功能:将AL保持原值(有符号数)扩展到AX。
注意:此时是将AL的值看为有符号数,根据AL的最高位(符号位)来决定AH是00H还是FFH
14、CWD
格式:CWD
功能:将AX保持原值(有符号数)扩展到DX,AX。
注意:此时是将AX的值看为有符号数,根据AX的最高位(符号位)来决定DX是0000H还是FFFFH
三、逻辑
1、AND
描述:“与”逻辑运算
格式: AND DST,SRC
功能: DST <= DST AND SRC 将DST和REG对应各位进行“与”运算后结果保留于DST
2、OR
描述:“或”逻辑运算
格式: OR DST,SRC
功能: DST <= DST OR SRC 将DST和REG对应各位进行“或”运算后结果保留于DST
3、NOT
描述:“非”逻辑运算
格式: NOT DST
功能: DST <= NOT DST 将DST各位"取反"结果保留于DST
4、XOR
描述:“异或”逻辑运算
格式: XOR DST,SRC
功能: DST <= DST XOR SRC 将DST和SRC对应各位进行“异或”运算后结果保留于DST
5、TEST
描述:“与”逻辑运算,当只影响PSW,不保留运算结果。
格式: TEST DST,SRC
功能: DST AND SRC 将DST和SRC对应各位进行“与”运算,结果状态影响PSW,但不该表DST,SRC的值。
6、SHL
描述:逻辑左移
格式:SHL DST,1/CL
功能:将DST顺序左移1位或CL寄存器中指定的位数。左移一位时,DST的最高位移入进位标志位CF,最低位补零。
7、SAL
描述:算术左移
格式:SAL SRC,1/CL
功能:将SRC顺序左移1位或CL寄存器中指定的位数。左移一位时,SRC的最高位移入进位标志位CF,最低位补零。
8、SHR
描述:逻辑右移
格式:SHR SRC,1/CL
功能:将SRC顺序右移1位或CL寄存器指定的位数。逻辑右移1位时,SRC的最低位移到进位标志位CF,最高位补零。
9、SAR
描述:算术右移
格式:SAR SRC,1/CL
功能:将SRC顺序右移1位或CL寄存器指定的位数。逻辑右移1位时,SRC的最低位移到进位标志位CF,最高位用原先最高位的值填充。
10、ROL
描述:循环左移
格式:ROL SRC,1/CL
功能:将SRC顺序左移1位或CL寄存器指定的位数。循环左移1位时,SRC的最高位移到最低位,并且最高位同时移入标志位CF。
11、ROR
描述:循环右移
格式:ROR SRC,1/CL
功能:将SRC顺序右移1位或CL寄存器指定的位数。循环左移1位时,SRC的最低位移到最高位,并且最低位同时移入标志位CF。
12、RCL
描述:带进位循环左移
格式:RCL SRC,1/CL
功能:将SRC顺序左移1位或CL寄存器指定的位数。带进位循环左移1位时,原先状态位CF的值移入SRC的最低位,SRC的最高位移入状态位CF。
13、RCR
描述:带进位循环右移
格式:RCR SRC,1/CL
功能:将SRC顺序右移1位或CL寄存器指定的位数。带进位循环右移1位时,原先状态位CF的值移入SRC的最高位,SRC的最低位移入状态位CF。
四、串指令
当方向标志位DF = 0时,DI,SI+;当DF = 1时,DI,SI-。
ES:DI DS:SI
1、MOVS
格式:①MOVS DST,SRC ②MOVSB(字节) ③MOVSW(字) ④MOVSD(双字)
功能: ①字节操作: [ES:DI]<=[DS:SI] ,SI<=SI +/- 1
②字操作: [ES:DI]<=[DS:SI]] ,SI <= SI +/- 2
③双字操作: [ES:DI]<=[DS:SI] ,SI <= SI +/- 4
2、CMPS
格式:①CMPSB(字节) ②CMPSW(字) ③CMPSD(双字)
功能: ①字节操作: [DS:SI] - [ES:DI] ,SI<=SI +/- 1
②字操作: [DS:SI] - [ES:DI] ,SI <= SI +/- 2
③双字操作: [DS:SI] - [ES:DI] ,SI <= SI +/- 4
3、LODS
格式:①LODSW(字) ③LODSD(双字)
功能: ①字节操作:AL <= [DS:SI] ,SI<=SI +/- 1
②字操作: AX <= [DS:SI] ,SI <= SI +/- 2
③双字操作: EAX <= [DS:SI] ,SI <= SI +/- 4
4、STOS
格式:①STOSB(字节) ②STOSW(字) ③STOSD(双字)
功能: ①字节操作:[DS:SI] <= AL ,SI<=SI +/- 1
②字操作: [DS:SI] <= AX ,SI <= SI +/- 2
③双字操作: [DS:SI] <= EAX ,SI <= SI +/- 4
5、SCAS
格式:①SCASB(字节) ②SCASW(字) ③SCASD(双字)
功能: ①字节操作: AL - [DS:SI] ,SI<=SI +/- 1
②字操作: AX - [DS:SI] ,SI <= SI +/- 2
③双字操作: EAX - [DS:SI] ,SI <= SI +/- 4
6、REP
格式:REP string primitive(MOVS,LODS,STOS,INS和OUTS)
功能:①如果CX = 0退出,否则继续运行以下操作
②CX <= CX - 1
③执行以后串操作
④重复 ①~③
7、REPE/REPZ
格式:REPE/REPZ string primitive(CMPS或SCAS)
功能:①如果CX = 0 或 ZF = 0 退出,否则继续运行以下操作
②CX <= CX - 1
③执行以后串操作
④重复 ①~③
8、REPNE/REPNZ
格式:REPNE/REPNZ string primitive(CMPS或SCAS)
功能:①如果CX = 0 或 ZF = 1 退出,否则继续运行以下操作
②CX <= CX - 1
③执行以后串操作
④重复 ①~③
五、无条件转移
1、JMP
格式:JMP ADDRESS
功能: 无条件跳转到 ADDRESS
六、条件转移
1、根据PSW
1、JZ
格式:JZ EX
功能:当ZF = 1时,跳转到EX
2、JNZ
格式:JNZ EX
功能:当ZF = 0时,跳转到EX
3、JC
格式:JC EX
功能:当CF = 1时,跳转到EX
4、JNC
格式:JNC EX
功能:当CF = 0时,跳转到EX
5、JO
格式:JO EX
功能:当OF = 1时,跳转到EX
6、JNO
格式:JNO EX
功能:当OF = 0时,跳转到EX
7、JS
格式:JS EX
功能:当SF = 1时,跳转到EX
8、JNS
格式:JNS EX
功能:当SF = 0时,跳转到EX
2、比较两个无符号数后
# N :不等于 A:大于 B : 小于 E :等于
3、比较两个有符号数后
# N :不等于 G:大于 L : 小于 E :等于
4、JCXZ
格式: JCXZ EX
功能:若 CX = 0,则跳转到EX
七、循环
LOOP
LOOPE/LOOPZ
LOOPNE/LOOPNZ
八、子程序
1、CALL
格式:①CALL EX/NEAR PTR EX
②CALL FAR PTR EX
功能:①将IP进栈;将子程序的入口地址的位移量 =>IP
②将CS入栈;将IP入栈;将子程序入口地址偏移量 =>IP;将子程序的段地址 =>CS
2、RET
格式:RET (num)
功能:①将栈顶元素出栈 => IP
②将SP向高地址移动num位。
3、RETF
格式:RETF (num)
功能:①将栈顶元素出栈 => IP
②将栈顶元素出栈 =>CS
③将SP向高地址移动num位。
九、中断
INT XX
IRET
十、空操作
NOP
十一、标志
1、CLC
格式:CLC
功能:令CF=0
2、STC
格式:STC
功能:令CF=1
3、CMC
格式:CMC
功能:令CF取反。
4、CLD
格式:CLD
功能:令DF = 0
5、STD
格式:STD
功能:令DF = 1
6、CLI
格式:CLI
功能:禁止发生中断
7、STI
格式:STI
功能: 允许发生中断