3 回答
TA贡献1812条经验 获得超5个赞
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。如果您要进行包含多个基地址等的多部分计算,则它很有用。
TA贡献1827条经验 获得超7个赞
使用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而不是加载。
TA贡献1856条经验 获得超17个赞
指令MOV reg,addr表示将存储在地址addr的变量读入寄存器reg。指令LEA reg,addr表示将地址(不是存储在该地址的变量)读入寄存器reg。
MOV指令的另一种形式是MOV reg,immdata,这意味着将立即数据(即常量)immdata读入寄存器reg。请注意,如果LEA reg,addr中的addr只是一个常量(即固定偏移量),则该LEA指令与加载立即数相同常量的等效MOV reg,immdata指令本质上完全相同。
添加回答
举报