一、数据传送
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
12、POPF
13、LAHF
14、SAHF
二、算术
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 FAR PTR EX
- 功能:①将IP进栈;将子程序的入口地址的位移量 =>IP
②将CS入栈;将IP入栈;将子程序入口地址偏移量 =>IP;将子程序的段地址 =>CS
2、RET
- 格式:RET (num)
- 功能:①将栈顶元素出栈 => IP
②将SP向高地址移动num位。
3、RETF
- 格式:RETF (num)
- 功能:①将栈顶元素出栈 => IP
②将栈顶元素出栈 =>CS
③将SP向高地址移动num位。
九、中断
十、空操作
十一、标志
1、CLC
2、STC
3、CMC
4、CLD
5、STD
6、CLI
7、STI