汇编语言中mov和lea的区别

如题所述

我晕,小勺勺儿的回答怎么有点不通。。。
lea SI,D1
是把D1的地址放入SI寄存器中。
所以SI中的值会变的,变成的是D1的地址。而D1则是用户定义的一个内存数据的助记符。
如果是mov SI,D1就会把D1的值放进SI。
例如,D1 dw 0x0000
汇编以后可能变成:
地址 值
0x9000 00
0x9001 00
那么lea SI,D1,SI的值是0x9000而不是0000,要用mov就是0000了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-19
LEA 指令,可以用MOV 指令代替,但是写法上要注意. 例如把0x114地址单元的地址送给eax, (at&t 书写格式)可以写成 lea edx, dword ptr ds:0x114, 其结果等价于movl $0x114,%edx, LEA 指令在取到内存地址时比较方便,例如汇编指令 lea ignore_int,%edx

ignore_int 是一个地址符号,会被翻译成一个地址值, 它等价于 movl $ignore_int,%edx
但 lea 还有另一种应用场景
例如: lea idt(,%ecx,8), %esi
以idt 为基地址,%ecx*8为偏移,计算这个数值赋值给esi , 显然这是为表格操作而设计的,所以LEA 在处理地址方面还稍显灵活。
第2个回答  2008-10-06
lea是取有效地址,比如lea SI,D1是把数据D1放到SI的地址中去,此时SI本身的值不变,只是其中的内容变为D1,只有SI,DI和BX可以使用lea指令,而mov是转移指令,mov AX,BX是把BX中的数据存放到AX中,此时AX的值变为BX的值,
而mov SI,offset D1与lea SI,D1是等效的
第3个回答  2016-11-07
LEA指令的功能是取偏移地址,例如LEA AX,[1000H],作用是将源操作数[1000H]的偏移地址1000H送至AX;
MOV指令的功能是传送数据,例如MOV AX,[1000H],作用是将1000H作为偏移地址,寻址找到内存单元,将该内存单元中的数据送至AX。
第4个回答  推荐于2017-12-16
mov ----为数据传送指令,可以在寄存器(立即数)、内存之间双向传递数据。
lea ----取内存单元的有效地址指令,只用于传送地址。

前者的使用范围更广,前者可以实现后者的功能。如:
lea dx, array
可用:
mov ax,offset array
mov dx,ax
替代

本回答被网友采纳
相似回答