gnu汇编程序:获取标签/变量的地址[INTEL SYNTAX]

时间:2009-12-13 19:12:06

标签: syntax label gnu intel object-address

我有这样的代码:

.bss
woof: .long 0

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

现在我想把woof的地址移到eax中。这里有什么 intel语法代码?将bleh的地址移动到例如ebx中也是如此。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

bss部分中不能包含任何实际对象。有些汇编程序可能仍然允许你切换到.bss部分,但你可以做的就是:x: . = . + 4

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

然后您可以使用以下任一方式获取地址:

lea woof, %eax

movl $woof, %eax

更新: aha,英特尔语法,而不是英特尔架构。 OK:

.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表单都应生成相同的代码。