8086指令系统:移位指令详解

需积分: 13 0 下载量 198 浏览量 更新于2024-08-22 收藏 1.38MB PPT 举报
"本文主要介绍了移位指令在单片机指令系统中的应用,特别是非循环移位指令,包括算术左移(SAL),算术右移(SAR),逻辑左移(SHL)和逻辑右移(SHR)。同时,提到了8086微处理器的指令系统、寻址方式和指令的书写格式,以及立即数寻址方式和寄存器寻址方式的特点和使用规则。" 移位指令是单片机编程中常用的操作,它们能够改变数据的二进制表示,按照指定的位数向左或向右移动。在8086指令系统中,非循环移位指令有四种: 1. **算术左移(SAL)**:这种指令将数据的二进制位向左移动,最右边的空位由符号位(最高位)填充,如果是正数,则填充0,如果是负数,则填充1。例如,如果一个数值为0101 0000(二进制),SAL操作会将其变为1010 0000。 2. **算术右移(SAR)**:算术右移指令将数据向右移动,最左边的空位填充符号位。对于正数,无论左移多少位,结果始终为正数。对于负数,最左边填充1,保持了数值的符号不变。 3. **逻辑左移(SHL)**:逻辑左移指令将数据的二进制位向左移动,最右边的空位全部填充0。这适用于不关心符号位的移位操作,例如位运算或扩大二进制表示的位宽。 4. **逻辑右移(SHR)**:逻辑右移指令将数据向右移动,最左边的空位填充0。这种方式用于无符号数的移位,因为无符号数没有符号位的概念。 指令书写格式通常包括标号、指令助记符和操作数,可能还有注释。例如,SAL指令可以写作"SAL src, count",其中"src"是被移位的寄存器或内存地址,"count"表示移位的位数。 寻址方式是获取操作数的方法。8086指令系统支持多种寻址方式,如立即数寻址和寄存器寻址: - **立即数寻址**:操作数直接包含在指令中,执行速度快但只能作为源操作数,且长度有限制,8位立即数可放入8位或16位寄存器,16位立即数只能放入16位寄存器。 - **寄存器寻址**:操作数位于CPU内部的寄存器中,执行速度快,源操作数和目的操作数都可以是寄存器,但操作数长度需匹配。 在使用这些指令时,需要特别注意操作数的类型匹配,例如8位操作数不能直接赋值给16位寄存器,反之亦然。此外,立即数寻址方式中,立即数不能作为目的操作数,而只能用作源操作数,给寄存器或存储器初始化。寄存器寻址方式则提供了快速的数据处理,但同样要求源操作数和目的操作数的数据宽度一致。