lea和mov区别 我是菜鸟,请问各位高手LEA SI,BUFFER和MOV SI,OFFSET BUFFER的区别?

我是菜鸟,请问各位高手LEA SI,BUFFER和MOV SI,OFFSET BUFFER的区别?lea的源操作数(第二个操作数)可以是任何内存寻址模式。例如,leasi,[4]leasi,[BX]l

我是菜鸟,请问各位高手LEA SI,BUFFER和MOV SI,OFFSET BUFFER的区别?

lea的源操作数(第二个操作数)可以是任何内存寻址模式。例如,leasi,[4]leasi,[BX]leasi,[BX 4]leasi,[BX Di]leasi,[BX Di 4]leasi,bufferleasi,[BX]bufferleasi,[BX]bufferleasi,[BX Di]buffer是可以的,但是offset后面只能跟一个标签。另外,由于lea有一条对应的指令,所以它会被编译成相应的指令,而offset是一条伪指令。最后,它将被编译成一个常量,表示偏移地址、偏移量和标签。例如,如果这样定义:datasegmentbufferdb100dataends movsi,那么offset buffer最终会编译成movsi[0],所以结论是:地址复杂时最好选择lea,因为它可以保存一些指令。如果只是一个标签,那就要看你的心情了

它们都是用来抵消地址的。

运算符2的寻址方式不确定

例如

lea DX,buf

lea DX,[Si

]这两句话是合法的,

offset后跟变量或标签

另外:

mov Si,offset varb与lea Si,varb有相同的功能