一.寻址方式
1.1立即寻址
1.2寄存器寻址
1.3存储器寻址
EA = (BX/BP) + (SI/DI) +DISP
有效地址 = 基址 变址 位移量
寻址方式 | 有效地址EA | 默认的段寄存器 |
直接寻址 | 【DISP】 | DS |
寄存器间接寻址 | 【BX】 | DS |
【BP】 | SS | |
【SI】 | DS | |
【DI】 | DS | |
基址寻址 | 【BX+DISP】 | DS |
【BP +DISP】 | SS | |
变址寻址 | 【SI+DISP】 | DS |
【DI+DISP】 | DS | |
基址加变址寻址 | 【BX+SI+DISP(或无DISP)】 | DS |
【BX+DI+DISP(或无DISP)】 | DS | |
【BP+SI+DISP(或无DISP)】 | SS | |
【BP+DI+DISP(或无DISP)】 | SS |
二.指令
2.1数据传送指令
分类 | 功能 | 助记符格式 | 操作 |
通用数据传送 | 传送 | MOV d,s | d<--s |
交换 | XCHG d,s | ||
压入堆栈 | PUSH s | ||
弹出堆栈 | POP d | ||
查表转换 | XLAT | ||
地址传送 | 取有效地址 | LEA reg16,s | |
取逻辑地址(指针) | LDS reg6,s | ||
取逻辑地址(指针) | LES reg16,s | ||
标志传送 | 标志寄存器送AH | LAHF | |
AH送标志寄存器 | SAHF | ||
标志入栈 | PUSHF | ||
标志出栈 | POPF | ||
输入输出 | 从I/O端口输入数据 | IN 累加器,端口地址(例如:IN AL,201H )只能为AL或者AX | |
数据输出至I/O端口 | OUT 端口地址,累加器 |
注:IN AL,port
MOV DX,port 16位的不能直接传到AX
IN AX,DX
2.2算术运算指令
2.2.1加法
1.加法:ADD d,s
2.带进位加:ADC d,s
3.加1:INC d
2.2.2减法
1.减法:SUB d,s
2.带借位减:SBB d,s
3.减1:DEC d
4.取补:NEG d
5.比较:CMP d,s
2.2.3乘法
1.无符号乘法:MUL s
2.有符号乘法: IMUL s
2.2.4除法
2.2.5符号扩展
2.2.6BCD码
1.加压缩BCD码调整: DAA
2.加压非压缩BCD码: AAA
3.减法压缩BCD码: DAS
2.3逻辑运算和位移循环指令
分类 | 功能 | 操作 | 状态标志位 |
逻辑运算 | 与 | AND d,s | |
或 | OR d,s | ||
异或 | XOR d,s | ||
非 | NOT d | ||
测试 | TEST d,s 只影响标志位(d,s求与) | ||
移位 | 算术左移 | SAL | |
算术右移 | SAR (最左边新添加的为==前一次最左边的值) | ||
逻辑左移 | SHL | ||
逻辑右移 | SHR | ||
循环移位 | 向左小循环 | ROL (最左边给最右边,同时给CF) | |
向右小循环 | ROR(最右边给最左边,同时给CF) | ||
向左大循环 | RCL (最左边移入CF,CF移入最右边) | ||
向右大循环 | RCR (最右边移入CF,CF移入最左边) |
2.4程序控制指令
分类 | 功能 | 助记符格式 | 条件 |
无条件转移 | 无条件转移 | JMP 目标地址 | |
子程序调用 | CALL 子程序地址 | ||
从子程序返回 | RET或RET n | ||
条件转移--》 单标志 | 结果是0/相等 | JZ/JE | ZF=1 |
结果不是0/不相等 | JNZ/JNE | ZF=0 | |
有进位(借位) | JC | CF=1 | |
无进位(借位) | JNC | CF=0 | |
有溢出 | JO | OF=1 | |
无溢出 | JNO | OF=0 | |
符号位为1 | JS | SF=1 | |
符号位不为1 | JNS | SF=0 | |
1的个数是偶数 | JP/JPE | PF=1 | |
1的个数是奇数 | JNP/JPO | PF=0 | |
条件转移--》无符号数 | 高于/不低于等于 | JA/JNBE | CF=0且ZF=0 |
高于或等于/不低于 | JAE/JNB | CF=0 | |
低于不高于等于 | JB/JNAE | CF=1 | |
低于或等于/不高于 | JBE/JNA | CF=1或ZF=1 | |
条件转移--》有符号数 | 大于/不小于等于 | JG/JNLE | (OF异或SF=0)且ZF=0 |
大于或等于/不小于 | JGE/JNL | OF异或SF=0 | |
小于/不大于等于 | JL/JNGE | OF异或SF=1 | |
小于或等于/不大于 | JLE/JNG | OF异或SF=1或ZF=1 | |
循环控制 | LOOP | CX-1->CX !=0 | |
相等/结果是0 | LOOPE/LOOPZ | ZF=1且CX-1->CX !=0 | |
不相等/结果不是0 | LOOPNE/LOOPNZ | ZF=0且CX-1->CX !=0 | |
CX是0 | JCXZ | CX=0 | |
中断 | 中断调用 | INT n | |
溢出中断 | INTO | ||
中断返回 | IRET |
2.5串操作指令
2.6处理器控制指令
分类 | 功能 | 助记符格式 | 操作 |
标志位操作 | 进位标志清0 | CLC | CF<-0 |
进位标志置1 | STC | CF<-1 | |
进位标志取反 | CMC | CF<-非CF | |
方向标志清0 | CLD | DF<-0 | |
方向标志置1 | STD | DF<-1 | |
中断允许标志清0 | CLI | IF<-0 | |
中断允许标志置1 | STI | IF<-1 | |
同步控制 | 等待 | WAIT | |
交叉 | ESC外部操作码,源操作数 | ||
封锁总线 | LOCK | ||
暂停及空操作 | 暂停 | HLT | |
空操作 | NOP |