2015-11-03 125 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转换,并且工作正常。该计划似乎有一个不同的问题,然后。 –