我有这样一段代码:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
现在我想把woof的地址移动到eax中。在英特尔语法中,这里要怎么写代码呢?同样的,如果要将bleh的地址移动到ebx中,应该怎么办呢?
非常感谢您的帮助!
我有这样一段代码:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
现在我想把woof的地址移动到eax中。在英特尔语法中,这里要怎么写代码呢?同样的,如果要将bleh的地址移动到ebx中,应该怎么办呢?
非常感谢您的帮助!
x: . = . + 4
。.comm sym,size,alignment
。这就是为什么您可能会收到错误信息“bss directive not recognized”或类似信息。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
movl $woof,%eax
与movl woof,%eax
之间的区别,但在Intel语法中,它会更加啰嗦一些。无论如何,“是的”,lea和mov都可以加载一个地址。 - DigitalRossmov $foo, reg
或mov reg, OFFSET foo
,而不是LEA。LEA比较冗长,大多数CPU上可以运行的执行端口更少,因此对于将32位常量放入寄存器(包括符号的绝对地址)完全没有意义。(RIP相对LEA在64位代码中很有用,但该机器码特性仅存在于64位模式下,并且它在asm源中具有特殊语法。如何将函数或标签的地址加载到寄存器中) - Peter Cordes