操作数:立即数、寄存器操作数、内存操作数
MOV AL,80H ;源操作数为立即数80H
MOV AL,AX ;以寄存器的值作为操作数
1.3.1 直接寻址
MOV AX,[2000H] ;默认数据段DS:2000H和2001H处的内容取出
MOV AX,ES:[2000H]
MOV AX,[BUG] ;符号地址代替数值
1.3.2 寄存器间接寻址
MOV AX,[SI] ;操作数在寄存器中,操作数的有效地址由BX、BP、SI、DI中的一个指出,若未用前缀指明,默认关系为:BX、SI、DI默认在DS段中;BP默认在SS段中。
1.3.3 寄存器相对寻址
MOV AX,[COUNT+BP] ;偏移处加上一个偏移量
1.3.4 基址变址寻址
基址:BP、SP
变址:SI、DI
默认关系为:BX、SI、DI默认在DS段中;BP默认在SS段中。
MOV AX,[BP+SI]
1.3.5 相对基址变址寻址
MOV AX,[BP+SI+BUG]
MOV
功能: 把源操作数送给目的操作数
语法: MOV 目的操作数,源操作数
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data
XCHG
功能: 交换两个操作数的数据
语法: XCHG
格式: XCHG r1,r2 XCHG m,r XCHG r,m
PUSH,POP
功能: 把操作数压入或取出堆栈
语法: PUSH 操作数 POP 操作数
格式: PUSH r PUSH M PUSH data POP r POP m
PUSHF,POPF,PUSHA,POPA
功能: 堆栈指令群
格式: PUSHF POPF PUSHA POPA
LEA,LDS,LES
功能: 取地址至寄存器
语法: LEA r,m LDS r,m LES r,m
XLAT(XLATB)
功能: 查表指令
语法: XLAT XLAT m
ADD,ADC
功能: 加法指令
语法: ADD OP1,OP2 ADC OP1,OP2
格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data
影响标志: C,P,A,Z,S,O
SUB,SBB
功能:减法指令
语法: SUB OP1,OP2 SBB OP1,OP2
格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data
影响标志: C,P,A,Z,S,O
INC,DEC
功能: 把OP的值加一或减一
语法: INC OP DEC OP
格式: INC r/m DEC r/m
影响标志: P,A,Z,S,O
NEG
功能: 将OP的符号反相(取二进制补码)
语法: NEG OP
格式: NEG r/m
影响标志: C,P,A,Z,S,O
MUL,IMUL
功能: 乘法指令
语法: MUL OP IMUL OP
格式: MUL r/m IMUL r/m
影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)
DIV,IDIV
功能:除法指令
语法: DIV OP IDIV OP
格式: DIV r/m IDIV r/m
CBW,CWD
功能: 有符号数扩展指令
语法: CBW CWD
AAA,AAS,AAM,AAD
功能: 非压BCD码运算调整指令
语法: AAA AAS AAM AAD
影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)
DAA,DAS
功能: 压缩BCD码调整指令
语法: DAA DAS
影响标志: C,P,A,Z,S
逻辑运算指令
AND 与 ; OR 或 ; NOT 非 ; XOR 异或
TEST 测试
功能:将两个操作数进行逻辑与运算,Test命令的两个操作数不会被改变。
语法:TEST r/m,r/m/data
标志位:C,O,P,Z,S(其中C与O两个标志会被设为0)
移位指令
1)非循环移位指令SAL/SAR/SHL/SHR
算术移位指令SAL,SAR (A:算术)
逻辑移位指令SHL,SHR (H:逻辑)
2)循环移位指令ROL/ROR/RCL/RCR
不带进位的循环:ROL/ROR
带进位的循环:RCL/RCR
串传送指令 MOVS
功能:指令可以把SI指向的数据段中的一个字节、字或双字(DS:SI)传递到由DI指向的附加段中的一个字节、字或双字(ES:DI)中去,不影响条件标志位,并根据DF以及数据格式对SI和DI进行修改。
语法:
MOVS DST,SRC
MOVSB (字节)
MOVSW (字)
MOVSD (双字)(386及其后继机型可用)
串装入指令 LODS
功能:指令把DS:SI指向的存储单元中的数据送到AL、AX或EAX中,并根据条件标志位DF的值和数据类型来修改SI。
语法:
LODS SRC
LODSB (字节)
LODSW (字)
LODSD (双字)(386及其后继机型可用)
串存储指令 STOS
功能:指令把AL、AX和EAX中的内容存入由DS:SI指向的存储单元,并根据DF的值及数据类型修改SI。
语法:
STOS DST
STOSB (字节)
STOSW (字)
STOSD (双字)(386及其后继机型可用)
串比较指令 CMPS
功能:指令把DS:SI指向的存储单元中的数据与ES:SI指向的存储单元中的数据相减,不保存结果但影响条件标志位,并根据DF的值对SI和DI进行修改。
语法:
CMPS SRC,DST
CMPSB (字节)
CMPSW (字)
CMPSD (双字)(386及其后继机型可用)
串扫描指令 SCAS
功能:指令把AL、AX或EAX中的数据与ES:DI指向的存储单元中的数据相减,不保存结果但影响条件标志位,并根据DF的值对SI和DI进行修改。
语法:
SCAS DST
SCASB (字节)
SCASW (字)
SCASD (双字)(386及其后继机型可用)
串输入指令 INS
功能:指令把端口在DX寄存器中的I/O空间的数据送到由ES:DI指向的存储单元,并根据DF的值和数据类型修改DI。
语法:
INS DST,DX
INSB (字节)
INSW (字)
INSD (双字)(386及其后继机型可用)
串输出指令 OUTS
功能:指令把由DS:SI指向的存储单元中的数据送到端口号在DX寄存器中的I/O端口中,并根据DF的值和数据类型改变SI。
语法:
OUTS DX,SRC
OUTSB (字节)
OUTSW (字)
OUTSD (双字)(386及其后继机型可用)
⑴ 无条件转移
JMP 跳转
(2)条件转移
⑶ 循环指令
LOOP 循环
LOOPZ/LOOPE 为零/相等时循环
LOOPNZ/LOOPNE 不为零/不等时循环
⑷ 子程序调用与返回
CALL 调用
RET 返回
⑸ 中断及中断返回
INT 中断
INTO 溢出则中断
IRET 中断返回
CLC //对CF清零
STC //对CF置位
CMC //对CF取反
CLD //对DF清零
STD //对DF置位
CLI //对IF清零
STI //对IF置位