|
发表于 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指令是在执行时才计算地址,然后再传送到指定寄存器,因此执行速度相对慢一些。
|
|