在汇编中:LEA和OFFSET 的具体区别????

hy_number_one 2006-12-16 09:01:34
在汇编中:LEA和OFFSET 的具体区别?????
过了几年,复习怎么搞忘记了哦
...全文
4680 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2006-12-20
  • 打赏
  • 举报
回复
LEA = Load Effect Address(上载有效地址)

OffSet (偏离原来的起始地址)

----------------------------

Message
.ASCII "i am guy"

........
MOV $Message,%eax
MOV %eax,%edx
LEA %edx (上载Message)

MOV $2,%edx
这样他的OFFSET 就是2了。偏离值为2
jackanie1982 2006-12-19
  • 打赏
  • 举报
回复
LEA是传送地址的
OFFSET是传送偏移地址
例如:
LEA DS 2000H
OFFSET BI 200H
MOV BX,DS+BI
colinboy 2006-12-19
  • 打赏
  • 举报
回复
OFFSET只能取得用数据定义伪指令定义的变量的有效地址,不能取得一般操作数的有效地址(摘自80x86汇编语言程序设计教程)

MOV BX,OFFSET [BX+200]这句是错误的 应该用LEA BX,[BX+200]
  • 打赏
  • 举报
回复
lea可以进行比较复杂的计算,比如lea eax,[esi+ebx*4],把ebx的值*4,加上esi的值,存入eax中。
mov就不行了。
Silent_Spring 2006-12-19
  • 打赏
  • 举报
回复
offset 比 lea 的指令码短?
我也不知从哪看来的
ymghaym 2006-12-18
  • 打赏
  • 举报
回复
没有区别
hy_number_one 2006-12-16
  • 打赏
  • 举报
回复
那实际效果是一样的嘛,干嘛还要用两个名称不一样,效果一样的关键字
具体应用呢?
大熊猫侯佩 2006-12-16
  • 打赏
  • 举报
回复
LEA BX BUFFER”在实际执行时才会将buffer的地址放入bx

而“MOV BX, OFFSET BUFFER 在编译时就已经计算出buffer的地址为4300(假设),
然后将上句替换为:

mov bx,4300
hy_number_one 2006-12-16
  • 打赏
  • 举报
回复
我想问:指令“LEA BX BUFFER”和“MOV BX, OFFSET BUFFER”有甚么区别?
指令“LEA BX,[BX+200]”和“MOV BX,OFFSET [BX+200]”有什么区别?
大熊猫侯佩 2006-12-16
  • 打赏
  • 举报
回复
lea 是机器指令,offset 是伪指令。查看编译后的文件就会一目了然。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧