汇编寄存器算术?

这个问题在这里已经有了答案:

  • LEA指令的目的是什么? 14个答案

  • lea不会移动地址,它会计算有效地址并将结果地址存储到目标寄存器中。 地址计算是用机器语言以常规算术进行的,而不是C指针算术。

    lea eax,[ebp-40]
    

    从寄存器ebp的值中减去40 ,并将结果存储在寄存器eax

    mov DWORD PTR [esp+4], 0x80484c
    

    通过将寄存器esp包含的值加上4来计算目标地址,并将值0x80484c (整数8407116存储为该地址处占用4个字节的32位整数,最低有效字节在前。


    lea只是计算表达式并将其保存到变量中。 它实际上并没有对内存或内存地址做任何事情,即使它被命名为“加载有效地址”。

    例如lea eax,[ebp-40]意味着eax = ebp - 40

    它可以用来计算表达式,否则会采取几个指令,例如:

    lea eax, [8 * eax + ebx + 10]
    

    用一条指令计算eax = 8 * eax + ebx + 10

    另一方面, mov[...] ,会从/向内存读取/写入内容,所以它有点像使用C指针。

    mov DWORD PTR [esp+4], 0x80484c
    

    这将32位无符号整数( DWORD )值0x80484c到内存位置esp + 4 ,即与以下伪C相同:

    *((uint32_t*)(esp + 4)) = 0x80484c;
    
    链接地址: http://www.djcxy.com/p/72373.html

    上一篇: Assembly Register Arithmetic?

    下一篇: LEA in x86 assembly