【问题标题】:Storing value in ECX register and using lower register CL to shift by that value?将值存储在 ECX 寄存器中并使用较低的寄存器 CL 移动该值?
【发布时间】:2015-11-03 01:57:01
【问题描述】:

所以我将一个变量存储到寄存器 ECX 中,并希望使用 'shrl %cl, %eax' 将寄存器 EAX 中的值移动存储在 ECX 中的变量数量。我试过这个,但没有发生转变。我是否需要将变量存储在 CL 寄存器中,如果需要,我将如何执行此操作,因为 'movl variable, %cl' 对我不起作用。感谢您的帮助!

【问题讨论】:

  • 应该可以的。
  • 对于 'movl variable, %cl' 部分,我收到错误 '%cl not allowed with movl'
  • 确实不允许。应该起作用的是您的原始代码。否则你也可以使用movb variable, %cl
  • 查看调试和参考资料链接stackoverflow.com/tags/x86/info

标签: assembly x86


【解决方案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 位。

【讨论】:

  • 谢谢。我尝试将变量输入 ECX 并使用 %cl 进行转换,它起作用了。该程序似乎有一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多