8088/8086指令系统
Last updated
Last updated
指令的组成
操作码字段:标明计算机要执行什么操作
操作数字段:指出指令在执行过程中所需要的操作数(值为多少或者放在什么地方),以及操作结果送到哪里
指令的一般格式:操作数字段可以有一个,二个或三个操作数,通常称为“一地址”,“二地址”或“三地址”指令。
指令中如何提供操作数或操作数地址的方式称为寻址方式。(规定如何对地址字段作出解释以找到操作数)
在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的变型或组合:
立即寻址(立即数寻址)
寄存器寻址
直接寻址
间接寻址
变址寻址
8088/8086与操作数有关的寻址方式
立即寻址方式
寄存器寻址方式
直接寻址方式
寄存器间接寻址方式
寄存器相对寻址方式
基址变址寻址方式
基址变址相对寻址方式
寻址方式总结
三种类型的操作数:立即数(data),寄存器操作数(reg),存储器操作数(mem)。
段前缀:寻址方式隐含地规定了存储器操作数的段地址。允许数据存放在其它的段(代码段除外),此时应在指令中给出 “段前缀”。
操作数的类型必须一致
8088/8086的指令系统可分为六大类:
数据传送指令
算术运算指令
逻辑运算和移位指令
控制转移指令
串操作指令
处理器控制指令
所有通用传送指令都不影响标志位。
MOV指令
MOV mem/reg1,mem/reg2
MOV reg,data
MOV ac,mem
MOV segreg,mem/reg
MOV mem/reg,segreg
MOV mem/reg,data
PUSH 和 POP 指令
PUSH reg
PUSH mem
POP reg
POP mem
交换指令
XCHG reg,reg
XCHG reg,mem
XCHG mem,reg
输入输出指令
直接输入输出指令
IN AL,PORT; AL ← (PORT)
IN AX,PORT; AX ← (PORT+1,PORT)
OUT PORT,AL; (PORT) →AL
OUT PORT,AX; (PORT+1,PORT) → AX 注:PORT为输入输出端口号,范围为0~255(00~FFH)
间接输入输出指令
IN AL, DX; AL ← (DX)
IN AX, DX; AX ← (DX+1,DX)
OUT DX,AL; (DX) → AL
OUT DX,AX; (DX+1,DX) → AX 在使用间接输入输出指令之前,需将端口号 → DX
地址传送指令
LEA (Load Effective Address)
LDS (Load pointer into register and DS)
LES (Load pointer into register and ES)
二进制加法和减法指令
加法 ADD DST,SRC DST ←SRC+DST
带进位加法 ADC DST,SRC DST ←SRC+DST+CF
减法 SUB DST, SRC DST ←DST﹣SRC
带借位减法 SBB DST,SRC DST ←ST﹣SRC﹣CF 标志位: 所有状态标志都受到指令执行结果的影响。
加1 减1和比较指令
加 1 INC OPR OPR ← OPR+1 INC reg INC mem
减 1 DEC OPR OPR ← OPR-1 DEC reg DEC mem
标志位: O D I T S Z A P C × - - - × × × × -
求补指令
NEG reg
NEG mem 操作: 对操作数按位取反, 末位加1。
比较指令
CMP OPR1, OPR2
操作:OPR1-OPR2
乘法指令
带符号乘法
格式:IMUL SRC
所执行的操作: 字节操作数: AX ← (AL)* (SRC) 字操作数: DX:AX ← (AX)*(SRC) (乘积带符号,并符合一般代数符号规则)
无符号乘法
格式:MUL SRC
所执行的操作: 同IMUL,但操作数和乘积均不带符号。
除法指令
带符号除法
格式:IDIV SRC
所执行的操作: SRC为字节数据: AL ← (AX)/(SRC) 之商 AH ← (AX)/(SRC) 之余数 SRC为字数据: AX ← (DX:AX)/(SRC) 之商 DX ← (DX:AX)/(SRC) 之余数 商和余数是带符号的:商的符号符合一般代数符号规则,余数的符号与被除数相同。
无符号除法
格式:DIV SRC
所执行的操作: 与IDIV相同,但操作数,商和余数均是无符号的。
符号扩展指令
CBW 操作:将AL中的8位带符号数扩展为16位并送入AX中。 实际上就是将AL的最高位送入AH的所有各位。
CWD 操作:将AX中的16位带符号数扩展为32位并送入DX和AX中(其中DX存放高16位,AX存放低16位)。 实际上就是将AX的最高位送入DX的所有各位。
逻辑运算指令
非 NOT OPR OPR ← OPR
或 OR DST,DST DST ← DST ∧ SRC
与 AND DST,SRC DST ← DST∧SRC
异或 XOR DST,SRC DST ← DST ∨ SRC
测试 TEST OPR1,OPR2 OPR1∧OPR2 标志: O D I T S Z A P C 0 - - - × × U × 0 (NOT指令除外,对标志位无影响)
移位指令
逻辑左移 SHL OPR,CNT
算术左移 SAL OPR,CNT
逻辑右移 SHR OPR,CNT
算术右移 SAR OPR,CNT (OPR是除立即数以外的任何一种寻址方式,CNT可以是1或CL) 标志位: O D I T S Z A P C × - - - × × U × × (左移1位时,若最高位发生改变,则OF=1;否则OF =0。)
(不带进位)循环左移 ROL OPR, CNT
(不带进位)循环右移 ROR OPR, CNT
(带进位)循环左移 RCL OPR , CNT
(带进位)循环右移 RCR OPR , CNT
与转移有关的寻址方式(无条件转移指令)
段内直接转移
段间直接转移
段内间接转移
段间间接转移 区别:对CS和IP进行修改的方法不同
条件转移指令
寻址方式相同:段内直接短转移
处理流程相同, 判断条件不同
循环控制指令
LOOP OPR
功能: (CX) - 1→ CX 若 (CX) ≠0,则转移至标号OPR处;否则顺序执行
子程序调用与返回
CALL
RET
中断调用与返回
INT
IRET
《IBM-PC汇编语言程序设计(第2版)》沈美明 温冬婵 著
寄存器间接寻址(MOV AX, [BX])和寄存器相对寻址 (MOV AX, 1100H[BX])
基址变址寻址(MOV AX, [BX][SI])和基址变址相对寻址(MOV AX, 1100H[BX][SI])