这个lea究竟应该做什么?

时间:2014-05-17 14:22:59

标签: assembly x86 att

我正在解决学校的任务,到目前为止一切都很简单。但是,我遇到了以下代码:

mov 0x8(%ebp), %eax    ;load pointer function argument into eax
mov (%eax), %eax       ;dereference the pointer
test %eax, %eax        ;
sete %dl               ;test if it was 0
lea 0x1(%eax), %ecx    ;???
mov 0x8(%ebp), %eax    ;load the argument again
mov %ecx, (%eax)       ;store whatever is in ecx on the pointed-to address
...

我真的在这里结束了,寄存器是否有地址?我看到它的方式,lea会将eax的地址(偏移1)存储到ecx中,但这没有意义,是吗?

1 个答案:

答案 0 :(得分:0)

lea 0x1(%eax), %ecx使用%ecx加载注册%eax + 1。由于该指令集的相对复杂的寻址模式,lea指令通常用于算术计算。

如果你没有将%eax标识为地址,这可能就是这里发生的事情(正如Oli所说,我们没有足够的背景知道)。