【问题标题】:Dereferencing syntax in IA-32 assembly () or *?IA-32 程序集 () 或 *? 中的取消引用语法
【发布时间】:2013-10-13 11:52:51
【问题描述】:

这是混乱的根源: movl (%edx), %eax 这会将 %eax 的值当作一个地址,去到它并将其内容复制到 %eax,

牢记这一点,然后查看: jmp *(%edx) 由于前面使用了括号(作为 mov 指令中的取消引用),那么星号是双重取消引用的一种形式吗?

...该指令的执行方式有何不同? --> jmp (%edx)

...或者怎么样 jmp *%edxjmp %edx ?

【问题讨论】:

  • 这是 AT&T 语法,请保持标记。
  • 你的第一句话..我认为它是一个错字......你的意思是:“它把%edx的值当作一个地址,去它并将其内容复制到%eax

标签: assembly att x86


【解决方案1】:

* 表示绝对跳转,而没有星号则表示相对跳转。 见http://sourceware.org/binutils/docs-2.17/as/i386_002dMemory.html#i386_002dMemory

但是,即使* 丢失,我也不知道汇编器是否从间接中推断出绝对跳转,或者它对间接相对跳转的不可能性大喊大叫。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多