0
我有%ecx包含希望將%esi的值移到左側的位置數,但對於我的理解,shl的源必須是立即值。在寄存器中按值轉換位
有人可以幫助我理解我將如何轉移%ecx的價值嗎?我環顧四周,看到有人推薦使用CL寄存器。但是有沒有其他選擇?
謝謝。
我有%ecx包含希望將%esi的值移到左側的位置數,但對於我的理解,shl的源必須是立即值。在寄存器中按值轉換位
有人可以幫助我理解我將如何轉移%ecx的價值嗎?我環顧四周,看到有人推薦使用CL寄存器。但是有沒有其他選擇?
謝謝。
80386架構提供了與移位量%cl
,其掩蔽31雙字移,15字的變化,等。注意,%cl
寄存器是%ecx
寄存器的最低8位左移位指令:
0 8 16 32 64
+---------------------------------------------------------------+
| rcx |
+-------------------------------+-------------------------------+
| ecx |
+---------------+---------------+
| cx |
+-------+-------+
| cl | ch |
+-------+-------+
因此,shll %cl,%esi
已經做了你所期望的和移動的%esi
通過在%ecx
指定爲高位真的不重要反正名額內容(偏移量與31轉向之前被屏蔽) 。
...或63位64位寄存器掩碼 – Anty
對於程序來說,高位實際上可能很重要,在這種情況下,必須特別注意將結果清零。你可能會認爲'1 << 33'是'0'而不是'2'。 – Jester
@Jester這是正確的。但是,由於shll會將31位移位操作數屏蔽掉,因此無論如何將ecx中的任何高位設置爲無效,都無關緊要。 – fuz