我正在解决学校的任务,到目前为止一切都很简单。但是,我遇到了以下代码:
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中,但这没有意义,是吗?
答案 0 :(得分:0)
lea 0x1(%eax), %ecx
使用%ecx
加载注册%eax + 1
。由于该指令集的相对复杂的寻址模式,lea
指令通常用于算术计算。
如果你没有将%eax
标识为地址,这可能就是这里发生的事情(正如Oli所说,我们没有足够的背景知道)。