鱼C论坛

 找回密码
 立即注册
查看: 5862|回复: 2

请教下高手:lea和offset的区别?

[复制链接]
发表于 2011-8-3 17:48:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
lea ax,data==mov ax,offset data.
但不知道两者有什么区别,功能完全一样不是多此一举吗?
希望能举例详细说明区别,,谢谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-3 18:19:57 | 显示全部楼层
本帖最后由 尐汇 于 2011-8-3 18:23 编辑

0000        DATA SEGMENT
  0000 0040      TABLE   DW  0040H
  0002 3000           DW  3000H
  0004        DATA ENDS


① MOV BX, TABLE
  ② LEA BX, TABLE
  ③ MOV BX, OFFSET TABLE

  答:第①条指令执行后,(BX)=0040H,
    第②条指令执行后,(BX)=0000,
    第③条指令执行后,(BX)=0000。

  比较①②两条指令,第①条MOV指令是用直接寻址方式把变量TABLE的内容送入BX,而LEA指令是把TABLE的地址送入BX。

  比较②③两条指令可以看到,LEA和用OFFSET指示符实现的功能是相同的,都是将TABLE的偏移地址0000送BX。既然功能相同,它们之间还有什么区别呢?

  首先,LEA指令可以使用各种存储器寻址方式,如,LEA BX,[DI],LEA BX,TABLE[DI],LEA SI,[BX+DI]等,这些指令都是把计算出来的有效地址送目的寄存器,而OFFSET不能使用这些寻址方式,它只作用于像TABLE这样的简单变量(或标号)。

  其次,对简单变量,OFFSET指示符比LEA执行速度快,因为MOV BX, OFFSET TABLE指令在汇编时,由汇编程序计算出了TABLE的偏移地址,并被汇编成立即数传送指令,因此效率很高,而LEA指令是在执行时才计算地址,然后再传送到指定寄存器,因此执行速度相对慢一些。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 21:19:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 02:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表