我有%ecx包含我希望%esi的值向左移动的位置数,但据我所知,shl的来源必须是立即值。
有人可以帮我理解我将如何改变%ecx的价值吗?我环顾四周,看到人们推荐使用CL寄存器。但是有替代方案吗?
谢谢。
答案 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。