ABCDEFGHIJKLMNOPQRSTUVWXYZ
1
类别查找指令英文全称中文全称代码目的操作数格式(dist)源操作数格式(src)注意事项指令作用补充
2
数据传送MOVMove通用数据传送指令MOV dist, src寄存器、段寄存器(除CS)、内存寄存器、段寄存器、内存、立即数1.立即数不能为目的操作数;
2.立即数不能送到段寄存器;
3.两内存单元、两段寄存器间(16位)都不能互相传送,但能与通用寄存器互相传送(内存单元和段寄存器之间也不能直接传送);
4.源、目的操作数间类型(位宽)需相同;
5.IP不可通过MOV指令访问;
6.CS段寄存器不能为目的操作数。
7.立即数传内存时需要定义内存的位宽(...PTR)
8.立即数不能以字母开头(可能会被识别成变量)
寻址相关:
1.仅BX,BP(基址寄存器):SI,DI(变址寄存器)可用于寄存器寻址
(其他寄存器不行·)
2.(
相对)基址变址寻址仅能用一个基址寄存器和一个变址寄存器(不能用两个基址或变址)
3.段超越仅可超越到ES段,并且ES段只能用DI作为变址寄存器
将数据从源操作数复制到目的操作数白名单:
立即数 => 寄存器,内存(需定义位宽)
寄存器 <=> 段寄存器,内存。
寄存器 <=> 寄存器
注: 仍需要注意4-8
段寄存器为16位,
=>表示src=>dist
本表格寄存器都仅指通用寄存器
3
数据传送XCHGExchange交换指令XCHG dist, src寄存器寄存器、内存1.目的操作数必须是寄存器;
2.目的操作数和源操作数类型必须相同。
实现字节或字的交换寄存器<=>寄存器
内存=>寄存器
4
堆栈PUSHPush入栈指令PUSH src寄存器、段寄存器、内存1.操作数不能为立即数;
2.入栈时“先减后压”;
3.栈内数据存取以字(16位)为单位进行。
将源操作数压入堆栈先进后出,后进先出
5
堆栈POPPop出栈指令POP dist寄存器、段寄存器、内存1.目的操作数不能是CS、SS段寄存器;
2.出栈时“先弹后加”;
3.栈内数据存取以字(16位)为单位进行。
从堆栈弹出值到目的操作数
6
堆栈PUSHFPush Flags标志入栈指令PUSHF堆栈标志寄存器标志寄存器本身的内容不变堆栈指针SP减2后,将标志寄存器的值压入堆栈
7
堆栈POPFPop Flags标志出栈指令POPF标志寄存器堆栈标志寄存器本身的内容改变从栈顶弹出一个送到标志寄存器,然后堆栈指针SP加2
8
标志LAHFLoad AH From Flages读取标志指令LAHFAH标志寄存器低8位标志寄存器本身的内容不变将标志寄存器低8位送到AH中标志位: SF,ZF,AF,PF,CF
位: 7, 6, 4, 2, 0
9
标志SAHFStore AH into Flags设置标志指令SAHF标志寄存器低8位AH标志寄存器本身的内容改变将AH送到标志寄存器低8位中
10
偏移地址LEALoad Effective Address取有效地址指令LEA reg,mem寄存器存储器常用于指针运算,不对内存实际进行读取或写入将储存器的有效地址传送到16位寄存器
11
指针LDSLoad pointer with DS地址指针装定到指定寄存器和DS的指令LDS reg,mem寄存器和DS存储器LDS指令会改变DS值,因此当前所对应数据段也发生了改变从存储器中取2个字(4个存储单元),并将第一个字送入目的寄存器中,将第二个字作为段基址送入DS中
12
指针LESLoad pointer with ES地址指针装定到指定寄存器和ES的指令LES reg,mem寄存器和ES存储器功能与LDS类似,不同只是把DS变成ES从存储器中取2个字(4个存储单元),并将第一个字送入目的寄存器中,将第二个字作为段基址送入ES中
13
其他XLATtranslate换码指令XLATALDS:[BX+AL]表首地址(偏移地址)预置于BX中,待查数据在表内的位置序号预置于AL中该指令完成查表转换功能(把存储器物理地址里的内容送入AL,标号=>数据)
14
ioINInput输入指令IN AL/AX, port8/DXAL/AX端口号:
立即数(8位)
DX(8或16位)
端口号可以是立即数(8位)或DX寄存器存储的值(8位或16位); 地址均不用加[ ]。从指定端口读取数据到AL/AX16位端口地址(AX)只能用DX间接寻址方式
15
ioOUTOutput输出指令OUT port/DX, AL/AX端口号:
立即数(8位)
DX(8或16位)
AL/AX端口号可以是立即数(8位)或DX寄存器存储的值(8位或16位); 地址均不用加[ ]。将AL/AX中的数据输出到指定端口
16
计算ADDAdd不带进位加法指令ADD dist, src寄存器、内存寄存器、内存、立即数两者必须是相同类型(字+字或字节+字节)将源操作数加到目的操作数上,结果影响全部状态标志位
17
计算ADCAdd with Carry进位加法指令ADC dist, src寄存器、内存寄存器、内存、立即数ADD再加上进位标志位(CF)的值将源操作数和CF一起加到目的操作数上,结果影响全部状态标志位
18
计算INCIncrement增量指令INC dist寄存器、内存常用于指针,不影响CF但影响其他标志目的操作数自增1(加一送回,但不会进位[不影响CF])
19
计算SUBSubtract不带借位的减法指令SUB dist, src寄存器、内存寄存器、内存、立即数两者必须是相同类型(字-字或字节-字节)从目的操作数减去源操作数,结果影响全部状态标志位
20
计算SBBSubtract with Borrow借位的减法指令SBB dist, src寄存器、内存寄存器、内存、立即数SUB再减去进位标志位(CF)的值从目的操作数中减去源操作数和CF,结果影响全部状态标志位
21
计算DECDecrement减量指令DEC dist寄存器、内存常用于指针,不影响CF但影响其他标志目的操作数自减1(减一送回,但不会借位[不影响CF])
22
计算NEGNegate求补指令
(求负数的指令)
NEG dist寄存器、内存和正常求补码不一样,需要连同符号位取反+1(包括正数)取目的操作数的相反数(连同符号位取反加一)
23
计算CMPCompare比较指令CMP dist, src寄存器、内存寄存器、内存、立即数结果不存储,影响标志位
;相当于执行减法但不存储结果。
比较目的操作数与源操作数,设置标志位(与SUB影响一致)
24
计算MULMultiplication无符号乘法指令MUL srcAL(8位)或AX(16位)寄存器、内存字乘结果在DX(高16位) AX(低16位),
字节乘结果在AX
计算无符号乘法若乘积高半部分不为零,则CF=OF=1,否则都为0
25
计算IMULInteger Multiplication带符号数的乘法指令IMUL srcAL(8位)或AX(16位)寄存器、内存1.字乘结果在DX(高16位)AX(低16位),字节乘结果在AX
2.乘数和结果都是补码,高位拓展根据低位符号位(补1或0)
计算有符号乘法若乘积高半部分为低半部分的符号位拓展,则CF=OF=0,否则都为1
26
计算DIVDivision无符号除法指令DIV src被除数(隐含):
字节除:AX
字除:DX(高16位)AX(低16位)
除数:
寄存器、内存
1.除数不能太小,否则报错“被零除”;
2.字节除:商在AL中,余数在AH中,
字除:商在AX中,余数在DX中,
(即
商在低位,余数在高位);
3.被除数和除数位数相同时,需要拓展被除数位数(使用CBW或者CWD)
计算无符号除法,结果存入商和余数
27
计算IDIVInteger Division带符号的除法指令IDIV src被除数(隐含):
字节除:AX
字除:DX(高16位)AX(低16位)
除数:
寄存器、内存
1.2.3.同上
4.除数结果都是补码,商可正可负,
余数和被除数符号一致
计算有符号除法,结果存入商和余数
28
拓展CBWConvert Byte to Word字节扩展为字指令CBWAXAL向AH全填充AL的符号位把AL中的符号位扩展到AH中
29
拓展CWDConvert Word to Double Word字扩展为双字指令CWDDXAX向DX全填充AX的符号位把AX中的符号位扩展到DX中
30
BCD调整AAAASCII Adjust after Addition加法的非压缩型BCD码调整指令AAA1.调整后的结果低位在 AL中,高位在AH中。
2.该指令一般用于加法指令之后,需要将结果调整为BCD码的场合。
3.本指令不影响 PF、ZF、SF、OF。
把AL中的加法结果调整为非压缩型BCD码数。若AL低4位大于9 或 AF = 1
则执行三步操作::
1.AL+6=>AL,且将AL高4位清0;
2.AH+1=>AH; 3.CF与AF置1。
否则,不做调整,CF和AF清0。
31
BCD调整DAADecimal Adjust after Addition加法的压缩型BCD码调整指令DAA1.调整后的结果在AL中
2.指令一般紧跟在加法指令之后且只能对AL中的内容进行调整。
3.它影响CF、 PF、AF、ZF、SF,其中 CF = 1 说明结果大于99。
把AL的加法结果调整为压缩型BCD码数若AL中的低4位 > 9 或 AF = 1 则AL+06H=>AL, 1=>AF;
若AL中的高4位 > 9 或 CF = 1 ,则AL+60H=>AL, 1=>CF
32
BCD调整AASASCII Adjust after Subtraction非压缩型BCD码减法的调整指令AAS1.调整后的结果低位在AL中,高位在AH中。
2.本指令必须紧跟在减法指令后 且只对AL中的内容进行调整。
把AL的减法结果调整为非压缩型BCD码数。若AF=1,则执行操作:
AL-6=>AL,且将AL的高4位清0; AH-1=>AH: 1=>CF.
否则,不做调整。
33
BCD调整DASDecimal Adjust after Subtraction压缩型BCD码减法的调整指令DAS1. 调整后的结果在AL中。
2. 同AAS的2
把AL中的减法结果调整为压缩型BCD码数,1.若AL中低4位大于9或AF=1,则AL-06H=>AL,并使AF置1;
2.若AL中高4位大于9或CF=1,则AL-60H=>AL,并使CF置1。
34
BCD调整AAMASCII Adjust after Multiply乘法的非压缩型BCD码调整指令AAM1. 调整后的结果
低位(个位)在AL中,
高位(十位)在AH中。
2. 该指令影响 PF、SF、ZF,也须紧跟在乘法指令 MUL之后。注意,BCD码数总是作为 无符号数看待,所以相乘时不能用IMUL指令。
把AX的乘法结果调整为非压缩型BCD码数。把AL的内容除以0AH,商放AH中,余数放AL中。AAM的操作实质 是将AL中不大于99的二进制数转换成非压缩型BCD码。
35
BCD调整AADASCII Adjust before Division除法的非压缩型BCD码调整指令AAD1.调整后的结果在AL中。
2.与其他5条调整指令不同的是,AAD指令须放在相应的除法指令之前
对AX中的两位非压缩型BCD码数进行调整AH * 0AH + AL=>AL,
0=>AH
36
BCD调整?A?*BCD码调整指令?A?(A,D) A (A,S,M,D)
非压缩/压缩 (加,减,乘,除)
这些调整指令都采用隐含寻址方式将AL(或AL和AH)作为隐含的操作数,用于对结果进行BCD码调整1.除AAD外均位于计算指令后
2.不包括DAM,DAD
37
逻辑操作ANDAnd逻辑与指令AND dist, src寄存器、内存寄存器、内存、立即数1.两者必须是相同类型(位宽);
2常用于希望将某些位 置0。
按位与操作,结果存入目的操作数影响ZF标志位
38
逻辑操作OROr逻辑或指令OR dist, src寄存器、内存寄存器、内存、立即数1.两者必须是相同类型(位宽);
2.常用于希望将某些位 置1。
按位或操作,结果存入目的操作数
39
逻辑操作XORXor (⊕)逻辑异或指令XOR dist, src寄存器、内存寄存器、内存、立即数1.两者必须是相同类型(位宽);
2.常用于希望将某些位取反。
按位异或操作,结果存入目的操作数可用于置零(如XOR AX,AX)
40
逻辑操作NOTNot逻辑非指令NOT dist寄存器、内存常用于对某个数作求反运算按位取反目的操作数
41
逻辑操作TESTTest测试指令TEST dist, src寄存器、内存寄存器、内存、立即数1.不修改目的操作数;
2.常用于检测操作数某些位是1还是0.(通过ZF)
将目的操作数和源操作数作按位与运算,但不送回结果,只影响标志位。
42
移位SHLShift Left逻辑左移指令SHL dist, count寄存器、内存1或CL移位位数>1一般用CL将目的操作数左移,低位填零,高位移入CF。(两指令一致)S (A,H) (R,L)
(算数,逻辑) (右,左)
43
移位SALShift Arithmetic Left算术左移指令SAL dist, count寄存器、内存1或CL
44
移位SHRShift Right逻辑右移指令SHR dist, count寄存器、内存1或CL移位位数>1一般用CL将目的操作数右移,高位填零,低位移入CF。
45
移位SARShift Arithmetic Right算术右移指令SAR dist, count寄存器、内存1或CL移位位数>1一般用CL将目的操作数右移,高位填符号位,低位移入CF。
46
移位ROLRotate Left循环左移指令ROL dist, count寄存器、内存1或CL移位位数>1一般用CL将目的操作数循环左移,最高位复制至CF。R (O,C) (R,L)
循环 不带/带进位 (右,左)

只影响CF,OF
47
移位RCLRotate Left through Carry带进位循环左移指令RCL dist, count寄存器、内存1或CL移位位数>1一般用CL将目的操作数与CF共同循环左移
48
移位RORRotate Right循环右移指令ROR dist, count寄存器、内存1或CL移位位数>1一般用CL将目的操作数循环右移,最低位复制至CF。
49
移位RCRRotate Reft through Carry带进位循环右移指令RCR dist, count寄存器、内存1或CL移位位数>1一般用CL将目的操作数与CF共同循环右移
50
串操作MOVSBMove String Byte字节串传输指令MOVSBES:DI存储单元DS:SI存储单元需预置ES、DS、DI、SI将源串一个字节或字传送到目的串中(即将SI指向的数据复制到DI指向的地址),同时根据DF的值自动修改SI和DI,不改变标志位
51
串操作MOVSWMove String Word字串传输指令MOVSW
52
串操作MOVSMove String串传输指令MOVS dist, srcES:DI存储单元DS:SI存储单元需标明源、目的操作数地址和大小(字or字节?)
53
串操作LODSBLoad String Byte读字节串指令LODSBAX/ALDS:SI存储单元需预置DS、SI、AX、AL将源串中的一个字节或字的数据送入AL或AX中,同时根据DF的值自动修改SI,不改变标志位
54
串操作LODSWLoad String Word读字串指令LODSW
55
串操作LODSLoad String读串指令LODS srcAX/ALDS:SI存储单元需标明源操作数地址和大小(字or字节?)
56
串操作STOSBStore String Byte存字节串指令STOSBES:DI存储单元AX/AL需预置ES、DI、AX、AL将AL或AX中的一个字节或字的内容送到目的串(存储单元)中,同时根据DF的值自动修改DI,不改变标志位
57
串操作STOSWStore String Word存字串指令STOSW
58
串操作STOSStore String存串指令STOS distES:DI存储单元AX/AL需标明目的操作数地址和大小(字or字节?)
59
串操作CMPSBCompare String Byte字节串比较指令CMPSBES:DI存储单元DS:SI存储单元需预置ES、DS、DI、SI将目的串中的一个字节或字与源串中的一个字节或字相减,不保存结果,只影响标志位
60
串操作CMPSWCompare String Word字串比较指令CMPSW
61
串操作CMPSCompare String串比较指令CMPS dist, srcES:DI存储单元DS:SI存储单元需标明源、目的操作数地址和大小(字or字节?)
62
串操作SCASBScan String Byte字节串扫描指令SCASBES:DI存储单元AX/AL需预置ES、DI、AX、AL将AL或AX中的一个字节或字与目的串中的一个字节或字相减,不保存结果,只影响标志位通常用于查找一个特定的值在字符串中的位置。
63
串操作SCASWScan String Word字串扫描指令SCASW
64
串操作SCASScan String串扫描指令SCAS distES:DI存储单元AX/AL需标明目的操作数地址和大小(字or字节?)
65
串操作REPRepeat重复前缀REP 串操作指令需预置重复次数CX;
RPEP/PEPZ; CX≠0且ZF=1重复,否则不重复,常用于CMPS、SCAS的前缀;
REPNE/REPNZ; CX≠0且ZF=0重复,否则不重复,也常用于CMPS、SCAS的前缀。
重复执行紧跟其后的串操作指令,直到CX=0才停止,每重复一次,CX减1
66
跳转JMPJump无条件转移指令JMP 目标标号段内:
立即数(字)
标号
WORD PTR 内存

段间:
立即数:立即数(字:字,CS:IP)
标号
DWORD PTR 内存(高位CS:低位IP)
目标地址应在有效范围内。无条件跳转到目标地址段内转移仅改变IP,段间转移还改变CS
偶性转移:JP/JPE
奇性转移:JNPN/JPO

A :Above, B:Below,
C:Carry, E:Equal
G:Greater, L:Less,
N:Not, O:Over, S:Sign,
PE:Parity Even, PO:Parity Odd
67
跳转J(N)?Jump (Not) ?条件转移指令J(N)? 目标标号?: (PE,PO), O, C, S
中文: (偶,奇), 溢出,进位,符号
标志位: PF(1,0), OF, CF, SF
满足条件跳转到目标地址
( J(N)E 等价于 J(N)Z )
68
跳转(A,B) (E)
(高于,低于) (等于)
无符号数
69
跳转(G,L) (E)
(大于,小于) (等于)
有符号数
70
子程序CALLCall子程序调用指令CALL 过程名堆栈段内调用:
1.压IP进堆栈 (SP-2)
2. 子程序名(过程名)对应偏移地址=>IP
段间调用:
1.CS,IP先后压入堆栈(SP-4)
2.子程序名对应偏移地址=>IP,段基址=>CS
调用子程序并将返回地址压入堆栈
71
子程序RETReturn返回指令RET (n)1.CALL指令的相反操作
2.一个子程序里至少有一个RET指令
3.RET指令一般放子程序最后
4.若带了参数(RET n),返回时不仅会弹出返回地址,还会弹出堆栈中的n个字节(不常见)
从子程序返回主程序,并弹出返回地址
72
循环LOOPLoop循环指令LOOP 目标标号同JUMP需预置重复次数CX;
LOOPE/LOOPZ; CX≠0
且ZF=1则转移到目标地址,否则顺序执行后续指令;
LOOPNE/LOOPNZ; CX≠0
且ZF=0则转移到目标地址,否则顺序执行后续指令。
CX-1=>CX;
若CX≠0,则转移到目的地址,反之则顺序执行后续指令。
可用于检查两个字符串是否相同
73
循环JCXZJump if CX is Zero循环结束转移指令JCXZ 目标标号同JUMP用于循环结束时跳转CX=0,则转移到目的地址;CX≠0,则顺序执行后续指令
74
中断INTInterrupt中断指令INT n中断类型号(0~255)INT仅影响IF和TF,不影响其他标志位;
中断类型号*4=中断向量表中位置(入口地址)
1.将标志寄存器内容压入堆栈;
2.将标志位IF、TF清零;
3.将代码段寄存器CS的内容压入堆栈;
4.将当前IP内容压入堆栈;
5.查中断向量表,取出对应的中断服务程序入口的基地址装入CS,偏移地址装入IP。
IP为0是为了使CPU处理当前中断指令,在此过程中不响应其他中断
75
中断INTOInterrupt if Overflow溢出中断指令INTOINTO 等价于 INT 4;
若前一条算术运算指令结果溢出,即OF=1,则自动执行该指令
进入处理溢出出错的中断服务程序
76
中断IRETReturn from Interrupt中断返回指令IRET任何中断子程序执行的最后一条指令1.依次将堆栈终端点地址弹出到IP和CS;
2.将压入堆栈的标志字内容弹出至标志寄存器,以恢复标志寄存器的内容。
77
标志**状态标志位指令操作*(CL,ST) (C,D,I) (cl:clear,st:set)
置零/置一 进位/方向/中断
CMC (
Complement Carry)
CF取反
对CF,DF,IF执行复位和置位等操作
78
处理器控制NOPNo Operation空操作指令NOP无特殊要求。无操作,消耗三个时钟周期
79
处理器控制HLTHalt暂停指令HLT处理器会停止,需外部信号才能继续。暂停CPU,但不影响标志位
80
这两列灰色字体表示隐含
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100