汇编语言移位和循环移位指令简介

移位指令与前面介绍的按位操作指令一起形成了汇编语言最显著的特点之一。位移动 (bit shifting) 意味着在操作数内向左或向右移动。

x86 处理器在这方面提供了相当丰富的指令集如下表所示,这些指令都会影响溢出标志位和进位标志位。

SHL 左移 ROR 循环右移
SHR 右移 RCL 带进位的循环左移
SAL 算术左移 RCR  带进位的循环右移
SAR 算术右移 SHLD 双精度左移
ROL 循环左移 SHRD 双精度右移

逻辑移位和算术移位

移动操作数的位有两种方法。第一种是逻辑移位 (logic shift),空出来的位用 0 填充。如下图所示,一个字节的数据向右移动一位。也就是说,每一位都被移动到其旁边的低位上。注意,位 7 被填充为 0:


下图所示为二进制数 1100 1111 逻辑右移一位,得到 OllOOlll。最低位移入进位标志位:


另一种移位的方法是算术移位 (arithmetic shift),空出来的位用原数据的符号位填充:


例如,二进制数 1100 1111,符号位为 1。算术右移一位后,得到 1110 0111:

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

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

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

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

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

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