fisher60 发表于 2011-8-3 17:48:48

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

lea ax,data==mov ax,offset data.
但不知道两者有什么区别,功能完全一样不是多此一举吗?
希望能举例详细说明区别,,谢谢!!!

尐汇 发表于 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,,LEA BX,TABLE,LEA SI,等,这些指令都是把计算出来的有效地址送目的寄存器,而OFFSET不能使用这些寻址方式,它只作用于像TABLE这样的简单变量(或标号)。

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


fisher60 发表于 2011-8-3 21:19:05

尐汇 发表于 2011-8-3 18:19 static/image/common/back.gif
0000        DATA SEGMENT
  0000 0040      TABLE   DW  0040H
  0002 3000      ...

牛x 了,清晰明了,谢谢{:7_155:}
页: [1]
查看完整版本: 请教下高手:lea和offset的区别?