我有一个这样的代码:

.bss
woof: .long 0

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

现在我想纬的地址移动到eax中。什么是 Intel语法代码这里做吗?这同样与移动的Bleh的地址转换成,比方说,EBX。

您的帮助深表感谢!

有帮助吗?

解决方案

bss段不能在它的任何实际对象。一些装配可能仍然允许你切换到.bss段,但是你能做的一切有这样说:x: . = . + 4

在大多数编译器这些天,特别是在GNU对于英特尔来说,也不再是.bss指令,让你暂时切换到BSS和喜欢的东西建立在一杆的BSS符号:.comm sym,size,alignment。这就是为什么你可能得到一个错误。“ BSS指令无法识别的”或类似的东西。

然后就可以用得到的地址之一:

lea woof, %eax

movl $woof, %eax

更新 AHA,Intel语法,而不是英特尔架构。 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形式应产生相同的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top