5

我有这样的代码:

.bss
woof: .long 0

.text
bleh:
...some op codes here.

现在我想将 woof 的地址移动到 eax 中。这样做的英特尔语法代码是什么?将 bleh 的地址移动到 ebx 也是如此。

非常感谢您的帮助!

4

1 回答 1

8

bss 部分中不能有任何实际对象。一些汇编程序可能仍然允许您切换到 .bss 部分,但您可以在那里做的就是说如下内容:x: . = . + 4

如今,在大多数汇编器中,特别是在 gnu for intel 中,不再有.bss指令,因此您暂时切换到 bss 并使用以下内容一次性创建 bss 符号:.comm sym,size,alignment。这就是为什么您可能会收到错误“ .bss 指令无法识别”或类似的错误。

然后您可以通过以下任一方式获取地址:

lea woof, %eax

或者

movl $woof, %eax

更新:啊哈,英特尔语法,而不是英特尔架构。好的:

.intel_syntax noprefix
    lea    esi,fun
    lea    esi,[fun]
    mov     eax,OFFSET FLAT:fun
.att_syntax
    lea     fun, %eax
    mov     $fun, %eax
.data
fun: .long 0x123

所有lea表单都应生成相同的代码。

于 2009-12-13T19:48:57.107 回答