为了账号安全,请及时绑定邮箱和手机立即绑定

MOV和LEA有什么区别?

MOV和LEA有什么区别?

我想知道这些指令之间的区别是:MOV AX, [TABLE-ADDR]和LEA AX, [TABLE-ADDR]
查看完整描述

3 回答

?
慕雪6442864

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。如果您要进行包含多个基地址等的多部分计算,则它很有用。


查看完整回答
反对 回复 2019-10-15
?
慕仙森

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而不是加载。


查看完整回答
反对 回复 2019-10-15
?
慕慕森

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指令本质上完全相同。


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1056 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信