我正在完成与c编程和汇编语言有关的作业。这是简单的c程序:
int multiply(int a, int b) {
int k = 4;
int c,d, e;
c = a*b ;
d = a*b + k*c;
return d;
}
它的优化装配是
_a$ = 8 ; size = 4
_b$ = 12 ; size = 4
_multiply PROC
mov eax, DWORD PTR _a$[esp-4]
imul eax, DWORD PTR _b$[esp-4]
lea eax, DWORD PTR [eax+eax*4]
ret 0
_multiply ENDP
我想在汇编的这一行代码之后知道eax寄存器的值
lea eax, DWORD PTR [eax+eax*4]
我知道在汇编中添加整数时,它将结果存储在目标位置。当我们相乘时,它存储在eax中。因此,如果我调用函数multiple(3,8),则该行之后的eax寄存器的值应为120。
答案 0 :(得分:0)
lea
是“加载有效地址”。
指令集可以具有一些非常复杂的多寄存器地址计算模式,这些模式通常仅用于将数据读取和写入内存,但是lea允许程序员获取指令可以访问的地址。
有效地,它在方括号内执行计算,并返回该值-它不访问内存(方括号通常暗示)。
在这种情况下,它被用作乘以5的快速方法,因为该函数的其余部分已被优化!