指令系统小结
一、数据传送
1. 数据传送
- 作用: 将一个字节或字的操作数从源地址传送到目的地址。
- 指令格式: MOV DST, SRC
- 技巧:
(1)CS 、IP 只能做源操作数,不能被赋值。
(2)段寄存器不能直接和立即数交互。
(3)立即数只能赋值存储器和寄存器,不能被赋值。
该指令不影响标志位
- 作用: 取偏移地址
- 作用: 取相邻双字地址,高字地址放在 DS,低字地址放在寄存器。
- 作用: 取相邻双字地址,高字地址放在 ES,低字地址放在寄存器。
- 作用: 将状态标志位的低字节放到 AH。
- 作用: 将 AH 的数据加载到状态标志位的低字节。
2. 堆栈操作
- 作用: 把一个字的操作数从源地址压入堆栈。
- 指令格式: PUSH SRC
- 技巧:
(1)只能进行字操作,不能字节存储。
(2)CS 只能压栈,不能弹栈。
(3)立即数不能压栈、弹栈。
- 作用: 把一个字的操作数从栈中弹出到目的操作数。
- 指令格式: POP DST
- 技巧:
(1)不能向 IP、CS 弹栈。
(2)立即数不能弹栈。
- 作用: 把状态标志位压到栈中栈中。
- 指令格式: PUSHF
- 作用: 从栈中弹出状态标志位。
- 指令格式: POPF
3. 数据交换
- 作用: 对字/字节的源操作数的内容与目的操作数的内容进行交换。
- 指令格式: XCHG OPR1, OPR2
- 技巧:
(1)寄存器之间可以交换。
(2)存储可以与寄存器交换,不能自身交换。
(3)段寄存器、CS、IP、立即数之间不能交换。
此命令不影响标志位
- 作用: 完成一个字节的查表转换。
- 指令格式: XLAT OPR
- 技巧:
(1)使用前需要在数据段中建立一个小于256 B 的表格,表的首地址放在 BX 中,偏移值放在 AL 中。
(2)将数据段中偏移地址为 BX 与 AL 之和的存储单元内容送到 AL 中。
4. 输入输出
- 作用: 从输入端口到 CPU 的数据传送。
- 指令格式: IN AX, PORT
- 技巧:
- 作用: 从 CPU 到输出端口的数据传送。
- 指令格式: OUT PORT, AX
- 技巧:
(1)立即数不能直接输出,要先保存在寄存器中。
二、算术运算
1.加法
- 作用: 将源操作数与目的操作数相加,结果放在源操作数。
- 指令格式: ADD DST, SRC
- 技巧:
(1)要求源操作数和目的操作数必须同时为带符号或无符号数。
(2)影响标志位
- 作用: 将源操作数与目的操作数和 进位标志位 相加,结果放在源操作数。
- 指令格式: ADC DST, SRC
- 技巧:
(1)影响标志位
- 作用: 将指定操作数内容加 1。
- 指令格式: INC OPR
- 技巧:
(1)不 影响标志位
2. 减法 ; 比较
- 作用: 目的数减去源操作数,结果存放于目的操作数。
- 指令格式: SUB DST, SRC
- 技巧:
- 作用: 目的数减去源操作数再减去 借位 CF 的值,结果存放于目的操作数。
- 指令格式: SBB DST, SRC
- 技巧:
- 作用: 对制定操作数减 1。
- 指令格式: DEC OPR
- 技巧:
(1)不影响进位标志
- 作用: 对指定操作数求补运算。
- 指令格式: NEG DST, SRC
- 技巧:
- 作用: 比较指令 ,目的数减去源操作数,结果不予保存,只根据结果的状态设置标志位。
- 指令格式: CMP DST, SRC
- 技巧:
3. 乘法
- 作用: 完成两个 无 符号数之间的乘法运算。
- 指令格式: MUL SRC
- 技巧:
(1)要求被乘数放在 AL 或 AX,进行字节或字运算。
(2)SRC 只能通过 非立即数 的方式寻址。
(3)字节运算时,目的操作数只能在 AL,结果在 AX 中。
(4)字运算时,目的操作数只能在 AX,结果高位在 DX,低位在 AX。
(5)只影响 OF、CF 标志位。
- 作用: 完成两个 有 符号数之间的乘法运算。
- 指令格式: MUL SRC
- 技巧:
(1)要求被乘数放在 AL 或 AX,进行字节或字运算。
(2)SRC 只能通过 非立即数 的方式寻址。
(3)字节运算时,目的操作数只能在 AL,结果在 AX 中。
(4)字运算时,目的操作数只能在 AX,结果高位在 DX,低位在 AX。
(5)只影响 OF、CF 标志位。
4. 除法
- 作用: 无 符号除法指令。
- 指令格式: MUL SRC
- 技巧:
(1)字节操作: 16位被除数放在 AX 中,8位除数位源操作数,结果在 AL,余数在 AH 中。
(2)字操作: 32位被除数在 DX 、AX 中,16位除数为源操作数,结果的16位商在 AX 中,16位余数在 DX 中。
(3)对所有的条件码位皆无影响
- 作用: 有 符号除法指令。
- 指令格式: MUL SRC
- 技巧:
(1)字节操作: 16位被除数放在 AX 中,8位除数位源操作数,结果在 AL,余数在 AH 中。
(2)字操作: 32位被除数在 DX 、AX 中,16位除数为源操作数,结果的16位商在 AX 中,16位余数在 DX 中。
(3)对所有的条件码位皆无影响
5. 扩展
6. 十进制调整
三 、位操作
1. 逻辑运算
- 指令格式: AND DST , SRC
- 指令格式: OR DST , SRC
- 指令格式: NOT OPR
- 指令格式: XOR DST , SRC
- 作用: 不保存结果,只改变对应标志位。
- 指令格式: TEST OPR1 , OPR2
2. 移位运算
** 当移位次数大于 1 时,需要存储在 CL **
- 作用: 算术左移。
- 指令格式: SAL OPR , CL
- 作用: 算术右移。
- 指令格式: SAR OPR , CL
- 作用: 逻辑左移。
- 指令格式: SHL OPR , CL
- 作用: 逻辑右移。
- 指令格式: SHR OPR , CL
3. 循环移位
- 作用: 循环左移。
- 指令格式: ROL OPR , CL
- 作用: 循环右移。
- 指令格式: ROR OPR , CL
- 作用: 带进位循环左移。
- 指令格式: RCL OPR , CL
- 作用: 带进位循环右移。
- 指令格式: RCR OPR , CL
四、串操作
五、程序控制
1. 调用
- 作用: 调用子程序。
- 作用: 子程序结束。
2. 中断
3. 重复操作
- 作用: CX 的值为 0 转移。
- 作用: CX 的值不为 0 是跳转。
- 作用: CX 的值为 0 且 ZF = 1 时转移。
- 作用: CX 的值为 0 且 ZF = 0 时转移。
4. 跳转
- 作用: A > B。
- 作用: A >= B。
- 作用: A < B。
- 作用: A <= B。
- 作用: 有 符号指令,A > B。
- 作用: 结果为 0 时转移(ZF = 1)。
- 作用: 结果不为 0 时转移(ZF = 0)。
- 作用: 有 符号指令,A >= B。
- 作用: 有 符号指令,A < B。
- 作用: 没有 进借位。
- 作用: 有 进借位。
- 作用: 结果不为负转移(SF = 0)。
- 作用: 结果为负转移(SF = 1)。
- 作用: 奇偶位为 1 时转移。
- 作用: 奇偶位不为 1 时转移。
- 作用: 结果无溢出时转移(OF = 0)。
- 作用: 结果有溢出时转移(OF = 1)。