80x86的指令系统(一)

时间:2022-05-15 01:17:40

1、数据传送指令:

  • 通用数据传送指令
    MOV、PUSH、POP、XCHG
  • 累加器专用传送指令
    IN、OUT、XLAT
  • 地址传送指令
    LEA、LDS、LES
  • 标志寄存器传送指令
    LAHF、SAHF、PUSHF、POPF
  • 类型转换指令
    CBW、CWD

2、MOV DST, SRC
注意:
* DST、SRC 不能同时为段寄存器 MOV DS, ES ×
* 立即数不能直接送段寄存器 MOV DS, 2000H ×
* DST 不能是立即数和CS
* DST、SRC 不能同时为存储器寻址
* 不影响标志位

3、进栈指令: PUSH SRC
出栈指令: POP DST
堆栈:‘先进后出’的存储区,段地址存放在SS中,
SP在任何时候都指向栈顶,进出栈后自动修改SP。
注意:
* 堆栈操作必须以字为单位。
* 不影响标志位
* 不能用立即寻址方式
PUSH 1234H ×
* DST不能是CS
POP CS ×

4、 交换指令:XCHG OPR1, OPR2
注意:
* 不影响标志位
* 不允许使用段寄存器

5、累加器专用传送指令(只限使用AX或AL)
输入指令 IN (I/O → CPU)
输出指令 OUT (CPU → I/O)
注意:
* 不影响标志位
* 前256个端口号00H~FFH可直接在指令中指定(长格式)
* 如果端口号≥ 256,端口号 →DX(短格式)

6、换码指令:XLAT 或 XLAT OPR
执行操作:(AL) <— ( (BX) + (AL) )
注意:
* 不影响标志位
* 字节表格(长度不超过256)
首地址 → (BX)
* 需转换的代码位移量 → (AL)

7、地址传送指令
有效地址送寄存器指令:
LEA REG, SRC
执行操作: (REG) <— SRC
注意:
* 不影响标志位
* REG 不能是段寄存器
* SRC 必须为存储器寻址方式

8、标志寄存器传送指令
标志送AH指令: LAHF
执行操作:(AH) <— (FLAGS的低字节)

9、类型转换指令
CBW AL → AX
CWD AX → (DX,AX)
注意:
* 无操作数指令
* 隐含对AL 或AX 进行符号扩展
* 不影响条件标志位

10、算术指令:
加法指令
ADD、ADC、INC
减法指令
SUB、SBB、DEC、NEG、CMP
乘法指令
MUL、IMUL
除法指令
DIV、IDIV
十进制调整指令
DAA、DAS、
AAA、AAS、AAM、AAD

11、加法指令
加法指令: ADD DST, SRC
带进位加法指令: ADC DST, SRC
加1指令: INC OPR
注意:
* 除INC指令不影响CF标志外,均对条件标志位有影响。
SF:
1 结果为负
0 否则
ZF:
1 结果为0
0 否则
CF:
1 和的最高有效位有向高位的进位
0 否则
OF:
1 两个操作数符号相同,而结果符号与之相反
CF 位表示 无符号数 相加的溢出。
OF 位表示 带符号数 相加的溢出。

12、减法指令
减法指令: SUB DST, SRC
带借位减法指令: SBB DST, SRC
减1指令: DEC OPR
求补指令:NEG OPR
比较指令: CMP OPR1, OPR2
注意:
除DEC指令不影响CF标志外,均对条件标志位有影响。
减法指令对条件标志(CF/OF/ZF/SF)的影响:
CF:
1 被减数的最高有效位有向高位的借位或减法转换为加法运算时无进位
0 否则
OF:
1 两个操作数符号相反,而结果的符号与减数相同
0 否则
CF 位表示 无符号数 减法的溢出。
OF 位表示 带符号数 减法的溢出。
NEG指令对CF/OF的影响
CF:
0 操作数为0
1 否则
OF:
1 操作数为-128(字节运算)或操作数为-32768(字运算)
0 否则

13、乘法指令
无符号数乘法指令: MUL SRC
带符号数乘法指令: IMUL SRC
执行操作:
字节操作数 (AX) <— (AL) * (SRC)
字操作数 (DX, AX) <— (AX) *(SRC)
注意:
* AL (AX) 为隐含的乘数寄存器。
* AX (DX,AX) 为隐含的乘积寄存器。
* SRC不能为立即数。
* 除CF和OF外,对条件标志位无定义。
乘法指令对 CF/OF 的影响:
MUL指令:CF,OF
00:乘积的高一半为零
11 否则
IMUL指令:CF,OF
00:乘积的高一半是低一半的符号扩展
11:否则

14、除法指令
无符号数除法指令: DIV SRC
带符号数除法指令: IDIV SRC
执行操作:
(AL) <— (AX) / (SRC) 的商
(AH) <— (AX) / (SRC) 的余数
字操作
(AX) <— (DX, AX) / (SRC) 的商
(DX) <— (DX, AX) / (SRC) 的余数
注意:
* AX (DX,AX) 为隐含的被除数寄存器。
* AL (AX) 为隐含的商寄存器。
* AH (DX) 为隐含的余数寄存器。
* SRC不能为立即数。
* 对所有条件标志位均无定义。如何判别结果有效?