【问题标题】:What does the assembly code `movl %1, %%ebx` mean?汇编代码“movl %1, %%ebx”是什么意思?
【发布时间】:2011-07-31 02:56:26
【问题描述】:

我正在尝试理解一些汇编代码:

movl $244, %eax
movl %1, %%ebx

第一个表示将数字 244 放入寄存器 eax,但第二个是什么意思?在此先感谢您的帮助

P.S see the difference %1 and $244 and %eax and %%ebx

【问题讨论】:

  • 我重新标记是因为你忘了告诉你这个汇编代码是在 inline-assembly 的上下文中使用的

标签: gcc assembly linux-kernel inline-assembly


【解决方案1】:

gcc 内联汇编使用 %1 来指定参数。 你会在这里找到一些关于内联汇编的提示:

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s4

【讨论】:

  • 请注意,最新的 gcc docs 确实详细介绍了这一切。
【解决方案2】:

movl %1, %%ebx

movl 会将第一个参数移动到第二个参数。第一个参数是变量%1。第二个参数是寄存器%%ebx。编译器会将双百分号更改为单百分号,这样您就可以很好地编写:

movl %1, %ebx

【讨论】:

  • 嗯,实际上我不相信你可以删除那个额外的 %(你会得到“在 %-letter 之后缺少操作数编号”)。如果您使用扩展 asm(其中 OP 由 %1 指示),则必须使用 %%ebx。 %eax 逃脱的原因是 OP 正在从其他地方复制它(即不是扩展 asm)。
猜你喜欢
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 2010-12-12
相关资源
最近更新 更多