作业帮 > 数学 > 作业

很多地方都这样写 LEA BX ,[SI] 为什么不写成 MOV BX,SI.这两种写法不是等价的吗?

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/24 03:38:06
很多地方都这样写 LEA BX ,[SI] 为什么不写成 MOV BX,SI.这两种写法不是等价的吗?
这两条指令完全不一样,MOV BX,SI,只是两个寄存器的传送,把SI的值传送给BX,而LEA BX,[SI]中[SI]是个存储器,它是把该存储器的偏移地址送BX
再问: http://baike.baidu.com/view/4271988.htm百度百科中的一段话: 例1 假设:SI=1000H  执行指令 LEA BX , [SI]后,BX=1000H ////////////////////////// 用MOV BX,SI执行后,BX的内容也是 1000h...
再答: 这只是巧和,[SI]这个内存单元的偏移地址正好是SI寄存器的内容,这样就把SI的内容附给BX了,和MOV BX,SI的含义完全不同,如我们可以写指令LEA BX,[SI+5] ,这是偏移地址就是SI+5为1005H,前者是把内存的偏移地址取出来,后面就是直接寄存器传输。
再问: "这只是巧和,[SI]这个内存单元的偏移地址正好是SI寄存器的内容," /////////////////////////////// 我认为: [SI]这个内存单元的偏移地址 永远是SI寄存器的内容.. 原因: 在8086中[si]的段地址在DS中,偏移地址在si中 所以 LEA BX ,[SI] 和 MOV BX,SI 等价。。。
再答: 等价的概念不仅仅在值上是相同的,应该在功能上是相同的,LEA BX,[SI]的等价指令可写成 MOV BX,OFFSET [SI] 不仅值是相同的,功能也是相同。