2015-11-03 131 views
0

因此,我將一個變量存儲到寄存器ECX中,並希望使用'shrl%cl,%eax'將寄存器EAX中的值移入ECX中存儲的變量值。我嘗試過,但沒有發生轉變。我是否需要將變量存儲在CL寄存器中,如果是這樣,我該怎麼做,因爲'movl變量,%cl'不適用於我。謝謝您的幫助!將值存儲在ECX寄存器中並使用較低的寄存器CL來移位該值?

+0

這應該有效。 – Jester

+0

對於'movl變量,%cl'部分,我收到錯誤'%cl不允許movl' –

+2

確實這是不允許的。本來應該工作的是你的原始代碼。否則,你也可以使用'movb變量,%cl'。 – Jester

回答

1

這應該有效。你忘了提供完全可重複的測試案例,所以這裏是我的:

1  movl $3, %ecx 
(gdb) si 
2  movl $0xaaaaaaaa, %eax 
(gdb) 
3  shrl %cl, %eax 
(gdb) 
4  nop 
(gdb) p/x $eax 
$1 = 0x15555555 
(gdb) p/x 0xaaaaaaaa >> 3 
$2 = 0x15555555 

還要注意,移位計數被屏蔽到5位。

+0

謝謝。我試着將變量輸入到ECX中,並用%cl轉換,並且工作正常。該計劃似乎有一個不同的問題,然後。 –