我知道我要说的那句话可能是很快在 StackOverflow 上变得非常冷门的最好方法。无论如何我都会说:为什么这不起作用(完全)?
我试图弄清楚lea/leal 指令的作用。我理解它的方式,lea/leal 找出第一个操作数的内存地址并将这个地址写入第二个操作数(可能是一个寄存器左右)。
这部分似乎工作。当我运行下面的程序时,它说:
The memory address of var is 134518204.
但是,在此之后,它会说“内存访问错误”之类的东西。pushl (%eax)显然不起作用。为什么不?
.data
var: .long 42
str1: .string "The memory address of var is %d.\n"
str2: .string "At this memory address we find var's value: %d.\n"
.text
.global main
main:
leal var, %eax # Copy the address of var into %eax
pushl %eax
pushl $str1
call printf # Print str1
pushl (%eax)
pushl $str2
call printf # Print str2
# Some stack cleaning should be here :)
movl $1, %eax
int $0x80
我什至不确定 lea/leal 的作用是否正确。帮助表示赞赏。;)