汇编程序中eax寄存器的值

时间:2019-08-21 11:06:09

标签: c assembly x86 cpu-registers

我正在完成与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。

1 个答案:

答案 0 :(得分:0)

lea是“加载有效地址”。

指令集可以具有一些非常复杂的多寄存器地址计算模式,这些模式通常仅用于将数据读取和写入内存,但是lea允许程序员获取指令可以访问的地址。

有效地,它在方括号内执行计算,并返回该值-它不访问内存(方括号通常暗示)。

在这种情况下,它被用作乘以5的快速方法,因为该函数的其余部分已被优化!