8086汇编语言:主程序与子程序中的逻辑运算指令

需积分: 0 1 下载量 26 浏览量 更新于2024-08-22 收藏 985KB PPT 举报
"主程序与子程序的调用与返回,以及8086汇编语言中的位操作指令" 在8086汇编语言编程中,主程序与子程序是程序设计中的基本构造块。主程序通常是程序的主要流程,而子程序则是可以被主程序多次调用的独立代码段,用于完成特定功能。调用子程序通常使用`CALL`指令,该指令会将返回地址压入堆栈,然后跳转到子程序的入口。子程序执行完毕后,使用`RET`指令可以从堆栈中弹出返回地址,恢复程序的执行流程,回到`CALL`指令之后的地址。 关于8086的指令系统,其中涉及的寄存器组、寻址方式、数据传送、算术运算、位操作、串操作、控制转移和处理机控制类指令是汇编语言编程的基础。特别是位操作类指令,它们是以二进制位为基本单位进行数据操作的,对于理解和编写低级别程序至关重要。 1. 逻辑运算指令包括: - `AND`(逻辑与):执行两个操作数的逐位逻辑与运算,只有对应位都为1时,结果位才为1。例如:`MOVAL, 45h` 后 `ANDAL, 31h` 会使得 `AL` 寄存器中的值变为 `01h`。 - `OR`(逻辑或):执行两个操作数的逐位逻辑或运算,只要对应位有一个为1,结果位就为1。如:`MOVAL, 45h` 后 `ORAL, 31h` 会使得 `AL` 寄存器中的值变为 `75h`。 - `XOR`(逻辑异或):执行两个操作数的逐位逻辑异或运算,只有对应位不同时,结果位才为1。例如:`MOVAL, 45h` 后 `XORAL, 31h` 会使得 `AL` 寄存器中的值变为 `74h`。 - `NOT`(逻辑非):对一个操作数进行逐位逻辑非运算,即0变1,1变0。如:`MOVAL, 45h` 后 `NOTAL` 会使得 `AL` 寄存器中的值变为 `BAh`。 2. 移位指令包括: - `SHL`(左移):将操作数的位向左移动指定的次数,空出的位由符号位填充。 - `SHR`(右移):将操作数的位向右移动指定的次数,空出的位由符号位填充。 - `SAR`(算术右移):类似 `SHR`,但空出的位由原数值的符号位填充,保持了数值的算术性质。 - `ROL`(循环左移)和 `ROR`(循环右移):循环移动位,最左边的位移入最右边,最右边的位移入最左边。 这些位操作指令常用于设置或清除特定位,位测试,以及实现复杂的逻辑操作。比如,`AND` 指令可以用来复位某些位(将位设为0),而 `OR` 可以用来置位某些位(将位设为1)。在编写高效的汇编代码时,熟练掌握这些指令是至关重要的。