例3.17 假设某数据段定义如下:
  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指令是在执行时才计算地址,然后再传送到指定寄存器,因此执行速度相对慢一些。

 例3.18 对例3.17的数据定义,下列两条指令的执行结果是什么?
      ① LDS BX, TABLE
      ② LES BX, TABLE

  答:LDS指令执行后,(BX)=0040H, (DS)=3000H
    LES指令执行后,(BX)=0040H, (ES)=3000H