社区
汇编语言
帖子详情
请问下汇编中MOV和LEA的区别是什么
linhuz
2009-09-21 06:08:14
如题 感觉MOV和LEA功能差不多,刚学汇编
...全文
11221
15
打赏
收藏
请问下汇编中MOV和LEA的区别是什么
如题 感觉MOV和LEA功能差不多,刚学汇编
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangwenfeng12345
2010-04-20
打赏
举报
回复
很好 受教了
Lizichuan1996
2009-10-12
打赏
举报
回复
不错 ,受教了
Guilty
2009-10-08
打赏
举报
回复
[Quote=引用 10 楼 lonelyboysvc 的回复:]
引用 9 楼 guilty 的回复:
6楼说的也不太准确,很多情况是LEA就是MOV一样,不一定和就地址有关,可以用做+计算
那在什么情况下,是用做+运算呢?
[/Quote]
比如说:LEA EAX,[EBX+ECX*2+1]
等效于:
MOV EAX, EBX
ADD EAX, ECX
ADD EAX, ECX
ADD EAX, 1
所以可以说LEA就是一种MOV,所有LEA可以用MOV+ADD取代,但反过来说就不正确,读写内存的MOV指令并不能用LEA取代
dbgchen
2009-10-08
打赏
举报
回复
[Quote=引用 9 楼 guilty 的回复:]
6楼说的也不太准确,很多情况是LEA就是MOV一样,不一定和就地址有关,可以用做+计算
[/Quote]
那在什么情况下,是用做+运算呢?
Guilty
2009-10-08
打赏
举报
回复
6楼说的也不太准确,很多情况是LEA就是MOV一样,不一定和就地址有关,可以用做+计算
dbgchen
2009-10-08
打赏
举报
回复
6楼说的正确
Guilty
2009-10-08
打赏
举报
回复
[Quote=引用 12 楼 guilty 的回复:]
本来LEA是很容易理解的,就是MOV和ADD、SHL的组合,但是成天有人问,本版可能是第800次出现这个问题了吧?
究其原因,吃屎的8086汇编语言设计者负有很大责任,LEA后面跟[]的语法太愚蠢了,造成N多误会费大家N多口水,
语法上把[]就好了,少敲键盘程序也整洁易读。
[/Quote]
语法上把[]去掉就好了,少敲键盘程序也整洁易读。
Guilty
2009-10-08
打赏
举报
回复
本来LEA是很容易理解的,就是MOV和ADD、SHL的组合,但是成天有人问,本版可能是第800次出现这个问题了吧?
究其原因,吃屎的8086汇编语言设计者负有很大责任,LEA后面跟[]的语法太愚蠢了,造成N多误会费大家N多口水,
语法上把[]就好了,少敲键盘程序也整洁易读。
veranh
2009-10-06
打赏
举报
回复
新手,来学习!
a5796489
2009-09-30
打赏
举报
回复
3
lea传的是地址
mov传的是值
举个例子:
mov eax,[00400000]
传的是地址400000这个地址里的值,假设400000这个地址中的值是100,那么eax寄存器中的值就为100
lea eax,[00400000]
那么eax寄存器中的值就是400000
LAISHUAN001
2009-09-27
打赏
举报
回复
4
lea传送的是寄存器里面的值,mov传送的是主存中以寄存器的值为地址里面的值。
例如。
leal 8(%eax),%ecx
movl 8(%eax) ,%ecx
这样,两条指令,传送的值是不一样的
leal 是传送 8+%eal(值)到 寄存器%ecx
movl 是传送的是在主存中以8+%eax为地址的存储序列里面存的值到%ecx。
anjie4402211
2009-09-22
打赏
举报
回复
我觉得LEA 就像C中的 取地址& ,当源操作数是在内存的时候
传参时
mov 寄存器,offset 变量名
比用LEA快
dlpzgr
2009-09-21
打赏
举报
回复
LEA BX,list
MOV BX,OFFSET list
等价的,但是OFFSET后面不能跟复杂的寻址方式
shenshunxiao
2009-09-21
打赏
举报
回复
支持
killbug2004
2009-09-21
打赏
举报
回复
mov是将数据从源操作传到目的操作数中
lea是将源操作数的地址传到目的操作数中
一个是数据,一个是地址
lea指令只有一个周期,某些编译器会使用lea来优化加法等操作
汇编
语言-在线第4周1.pptx
汇编
语言-在线第4周1.pptx
汇编
语言-在线第4周1.pdf
汇编
语言-在线第4周1.pdf
汇编
打字游戏
CODE SEGMENT ASSUME DS:DATA, CS:CODE, SS:STACK START:
MOV
AX, DATA
MOV
DS, AX
MOV
CX, 10
MOV
SI, 0 LP:
LEA
DX, N CALL PRINT
MOV
DX, [STR+SI] CALL PRINT
LEA
DX, N CALL PRINT
LEA
DX, MSG CALL PRINT SCANF BUF
LEA
DX, N CALL PRINT
MOV
DX, [STR+SI]
LEA
DI, BUF+2 CALL strcmp CMP BX, 0 JNE EQUIL
LEA
DX, NO CALL PRINT JMP CONTINUE EQUIL:
LEA
DX, YES CALL PRINT CONTINUE: ADD SI, 2
LEA
DX, N CALL PRINT LOOP LP
MOV
AH, 4CH INT 21H PRINT PROC NEAR ; 相当于 C 语言的 printf PUSH AX
MOV
AH, 09H INT 21H POP AX RET PRINT ENDP strcmp PROC NEAR ; 相当于 C 语言的 strcmp() PUSH AX PUSH CX PUSH DX PUSH SI PUSH DI XOR CX, CX
MOV
BX, 1
MOV
SI, DX
MOV
AH, BYTE PTR [DI] CMP AH, '$' JE EXIT LP2:
MOV
AH, BYTE PTR [DI] INC DI CMP AH, '$' JZ RETURN
MOV
AL, BYTE PTR [SI] INC SI CMP AL, AH JNZ LP2 JZ EXIT RETURN: XOR BX, BX JMP EXIT
经典
汇编
程序实例21例
案例1判断闰年程序 data segment ;定义数据段 infon db 0dh,0ah,'P
lea
se input a year: $' Y db 0dh,0ah,'This is a
lea
p year! $' N db 0dh,0ah,'This is not a
lea
p year! $' w dw 0 buf db 8 db ? db 8 dup(?) data ends stack segment stack db 200 dup(0) stack ends code segment assume ds:data,ss:stack,cs:code start:
mov
ax,data
mov
ds,ax
lea
dx,infon ;在屏幕上显示提示信息
mov
ah,9 int 21h
lea
dx,buf ;从键盘输入年份字符串
mov
ah,10 int 21h
mov
cl, [buf+1]
lea
di,buf+2 call datacate call ifyears jc a1
lea
dx,n
mov
ah,9 int 21h jmp exit a1:
lea
dx,y
mov
ah,9 int 21h exit:
mov
ah,4ch int 21h datacate proc near; push cx; dec cx
lea
si,buf+2 tt1: inc si loop tt1 ;
lea
si,cx[di] pop cx
mov
dh,30h
mov
bl,10
mov
ax,1 l1: push ax sub byte ptr [si],dh mul byte ptr [si] add w,ax pop ax mul bl dec si loop l1 ret datacate endp ifyears proc near push bx push cx push dx
mov
ax,w
mov
cx,ax
mov
dx,0
mov
bx,4 div bx cmp dx,0 jnz lab1
mov
ax,cx
mov
bx,100 div bx cmp dx,0 jnz lab2
mov
ax,cx
mov
bx,400 div bx cmp dx,0 jz lab2 lab1: clc jmp lab3 lab2: stc lab3: pop dx pop cx pop bx ret ifyears endp code ends end start
人机对话
汇编
源代码
汇编
语言编写的人机对话小程序。
mov
ax,data
mov
ds,ax
lea
dx,msg1 ;ti shi yonghu shu ru name
mov
ah,9 int 21h
lea
dx,msg
mov
ah,9 int 21h
汇编语言
21,495
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章