在寄存器

时间:2017-01-24 21:28:30

标签: assembly bit-manipulation x86-64 att

我有%ecx包含我希望%esi的值向左移动的位置数,但据我所知,shl的来源必须是立即值。

有人可以帮我理解我将如何改变%ecx的价值吗?我环顾四周,看到人们推荐使用CL寄存器。但是有替代方案吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

80386体系结构提供左移指令,其移位量为%cl,其中双字移位为31,字移位为15,等等。注意%cl寄存器最低%ecx寄存器的8位:

0       8       16              32                              64
+---------------------------------------------------------------+
| rcx                                                           |
+-------------------------------+-------------------------------+
| ecx                           |
+---------------+---------------+
| cx            |
+-------+-------+
| cl    | ch    |
+-------+-------+

因此,shll %cl,%esi已经达到预期效果,并将%esi的内容移动%ecx中指定的位数,因为高位无论如何都不重要(转变)在转移之前,金额被掩盖了31。