80x86指令系统:逻辑运算与移位操作

需积分: 27 3 下载量 145 浏览量 更新于2024-07-11 收藏 1.2MB PPT 举报
"中山大学微机原理与接口汇编语言课程资料,重点讲解逻辑操作类指令和80x86指令系统的寻址方式" 在80x86指令系统中,逻辑操作类指令是编程中不可或缺的部分,它们主要用于处理二进制数据的逻辑运算。这些指令包括: 1. **AND** - 逻辑与运算,将两个操作数按位进行与运算,结果中1的位置只有当两个操作数相应位置都是1时才保留。 2. **TEST** - 逻辑测试,它类似于AND但不改变目标寄存器的值,常用于检查位掩码。 3. **OR** - 逻辑或运算,将两个操作数按位进行或运算,只要对应位有一个操作数为1,则结果位就是1。 4. **XOR** - 逻辑异或运算,两个操作数按位进行异或运算,结果位为1的位置是两个操作数相应位不同的位置。 5. **NOT** - 逻辑取反,对操作数进行逐位取反,0变为1,1变为0。 移位运算指令则用于将数据位向左或向右移动: 6. **SHL** - 左移位,将操作数的位向左移动指定的次数,右边用0填充。 7. **SHR** - 右逻辑移位,将操作数的位向右移动,左边用0填充,相当于除以2的幂次。 8. **SAL** - 左算术移位,与SHL相同,但在16位或32位处理器中,左移相当于乘以2的幂次。 9. **SAR** - 右算术移位,保持符号位不变,右边用符号位填充,相当于有符号数除以2的幂次。 10. **ROL** - 左循环移位,位向左移动,最左边的位移至最右边。 11. **ROR** - 右循环移位,位向右移动,最右边的位移至最左边。 12. **RCL** - 左环带进位移位,类似ROL,但会根据CF标志位决定最左边的位。 13. **RCR** - 右环带进位移位,类似ROR,但会根据CF标志位决定最右边的位。 14. **SHLD** 和 **SHRD** - 双字左右移位,用于32位及以上处理器,对双字数据进行移位操作。 位测试并修改指令允许检查和修改存储在内存或寄存器中的特定位: 15. **BT** - 位测试,检查指定位是否设置为1。 16. **BTS** - 位设置,设置指定位,并更新标志位。 17. **BTR** - 位清除,清除指定位,并更新标志位。 18. **BTC** - 位翻转,翻转指定位,并更新标志位。 位扫描指令用于查找第一个设置位或清除位: 19. **BSF** - 找到第一个设置位,返回其位置。 20. **BSR** - 找到第一个清除位,返回其位置。 在80x86处理器的寻址方式中,有以下几种主要类型: 1. **立即寻址** - 操作数直接包含在指令中,如`MOV AX, 1234H`。 2. **寄存器寻址** - 操作数位于寄存器中,如`MOV AX, BX`。 3. **存储器寻址** - 操作数位于存储器中,寻址方式复杂,包括直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址、比例变址寻址、基址比例变址寻址以及相对基址比例变址寻址等。 理解这些指令和寻址方式对于编写汇编语言程序至关重要,因为它们决定了如何访问和操作数据。