汇编语言SHR(右移)指令:将操作数逻辑右移一位

< 上一页SHL(左移)指令 SAL和SAR指令下一页 >

SHR(右移)指令使目的操作数逻辑右移一位,最高位用 0 填充。最低位复制到进位标志位,而进位标志位中原来的数值被丢弃:


SHR 与《SHL指令》一节中介绍的 SHL 的指令格式相同。在下面的例子中,AL 中的最低位 0 被复制到进位标志位,而 AL 中的最高位用 0 填充:

mov al, 0D0h     ; AL = 11010000b
shr al, 1              ; AL = 01101000b, CF = 0

在多位移操作中,最后一个移出位 0(LSB)的数值进入进位标志位:

mov al, 00000010b
shr al, 2                    ; AL = 00000000b, CF = 1

位元除法

数值进行右移(向 LSB 移动)即执行了位元除法(Bitwise Division)。将一个无符号数右移 n 位,即将该数除以 2n。下述语句将 32 除以 2¹,结果为 16:

mov dl, 32           ;移动前:00100000 = 32
shr dl, 1               ;移动后:00010000 = 16

下例实现的是 64 除以 2³:

mov al, 01000000b       ;AL = 64
shr al, 3                         ;除以 8, AL = 00001000b

用移位的方法实现有符号数除法可以使用 SAR 指令,因为该指令会保留操作数的符号位。
< 上一页SHL(左移)指令 SAL和SAR指令下一页 >

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注