Syntax gnu汇编程序:获取标签/变量的地址[英特尔语法]

Syntax gnu汇编程序:获取标签/变量的地址[英特尔语法],syntax,label,gnu,intel,object-address,Syntax,Label,Gnu,Intel,Object Address,我有这样一个代码: .bss woof: .long 0 .text bleh: ...some op codes here. 现在我想把woof的地址移到eax。英特尔的语法是什么?将bleh的地址移动到(比如)ebx也是如此 非常感谢你的帮助 bss部分中不能有任何实际对象。某些汇编器可能仍然允许您切换到.bss部分,但您在那里所能做的只是说一些类似于:x:.=.+4 如今,在大多数汇编程序中,特别是在gnu for intel中,不再有.bss指令,因此您可以临时切换到bss,并使用类

我有这样一个代码:

.bss
woof: .long 0

.text
bleh:
...some op codes here.
现在我想把woof的地址移到eax。英特尔的语法是什么?将bleh的地址移动到(比如)ebx也是如此


非常感谢你的帮助

bss部分中不能有任何实际对象。某些汇编器可能仍然允许您切换到.bss部分,但您在那里所能做的只是说一些类似于:
x:.=.+4

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

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

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

谢谢,非常有启发性。不过,我在这里关心的并不是bss或数据部分。我只需要知道如何使用gnu INTEL语法(而不是AT&T语法)将标签地址加载到地址中。我试过mov-eax,woof和mov-eax,dword-ptr[woof],但都得到了相同的结果。我想做一些像movl$woof,%eax,但使用gnu英特尔语法。谢谢!我也在用lea,但我想知道我是否可以用mov来做。我想偏移平面是这里的关键?对,有多种寻址模式;MOV可以加载一个立即数,它可能恰好也是一个地址,也可以加载一个地址的内容。通常在Unix上,这是
movl$woof,%eax
vs
movlwoof,%eax
,但在Intel语法中,这有点老生常谈。无论如何,“是”,lea和mov都可以加载一个地址。
.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