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