我有这样的代码:

.bss
woof: .long 0

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

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

非常感谢您的帮助!

最佳答案

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

如今在大多数汇编程序中,尤其是在用于intel的gnu中,不再有.bss指令,因此您可以暂时切换到bss并使用类似于.comm sym,size,alignment的方式在一个镜头中创建bss符号。这就是为什么您可能会收到错误“.bss指令无法识别”或类似的错误的原因。

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

lea woof, %eax

或者
movl $woof, %eax

更新:啊哈,intel语法,而不是intel体系结构。好的:
.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表单都应生成相同的代码。

关于syntax - gnu汇编程序: get address of label/variable [INTEL SYNTAX],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1897401/

10-12 15:17