MOV和LEA有什么区别?

我想知道这些指令之间的区别是:


MOV AX, [TABLE-ADDR]


LEA AX, [TABLE-ADDR]


天涯尽头无女友
浏览 1059回答 3
3回答

慕雪6442864

LEA 表示加载有效地址MOV 表示负载值简而言之,LEA加载指向您要寻址的项目的指针,而MOV加载该地址处的实际值。的目的LEA是允许用户执行非平凡的地址计算并存储结果[供以后使用]LEA ax, [BP+SI+5] ; Compute address of valueMOV ax, [BP+SI+5] ; Load value at that address在仅涉及常量的地方MOV(通过汇编程序的常量计算)有时似乎与的最简单用法重叠LEA。如果您要进行包含多个基地址等的多部分计算,则它很有用。

慕仙森

使用NASM语法:mov eax, var       == lea eax, [var]   ; i.e. mov r32, imm32lea eax, [var+16]  == mov eax, var+16lea 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指令本质上完全相同。
打开App,查看更多内容
随时随地看视频慕课网APP