MOV和LEA有什么区别?

我想知道这些说明之间的区别是什么:

MOV AX, [TABLE-ADDR]

LEA AX, [TABLE-ADDR]

  • LEA表示加载有效地址
  • MOV表示加载值
  • 简而言之, LEA加载一个指向你正在处理的项目的指针,而MOV加载该地址的实际值。

    LEA的目的是允许用户执行一个不重要的地址计算并存储结果[以备后用]

    LEA ax, [BP+SI+5] ; Compute address of value
    
    MOV ax, [BP+SI+5] ; Load value at that address
    

    在涉及常量的地方, MOV (通过汇编程序的常量计算)有时可能会与使用LEA的最简单情况重叠。 如果您有多个基地址的多部分计算等,它很有用。


    在NASM语法中:

    mov eax, var       == lea eax, [var]   ; i.e. mov r32, imm32
    lea eax, [var+16]  == mov eax, var+16
    lea eax, [eax*4]   == shl eax, 2        ; but without setting flags
    

    在MASM语法中,使用OFFSET var获取mov-immediate而不是加载。


    指令MOV reg,addr表示将存储在地址addr中的变量读入寄存器reg。 指令LEA reg,addr表示将地址(不是存储在地址中的变量)读入寄存器reg。

    MOV指令的另一种形式是MOV reg,immdata,它表示将立即数据(即常量)immdata读入寄存器reg。 请注意,如果LEA reg中的addr,addr只是一个常数(即固定偏移量),那么该LEA指令与加载与立即数据相同常量的等效MOV reg,immdata指令基本上完全相同。

    链接地址: http://www.djcxy.com/p/72407.html

    上一篇: What is the difference between MOV and LEA?

    下一篇: Why can't x86 be abstracted by device driver?