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

来源:百度知道 编辑:UC知道 时间:2024/06/17 18:04:02
其中buffer定义在data段里的
BUFFER DB 100
DB ?
DB 100 DUP(?)

我感觉上应该一样,但是在程序里运行出来的结果不一样。

LEA的源操作数(第二个操作数)可以是任意的内存寻址方式,举几个例子:
LEA si,[4]
LEA si,[bx]
LEA si,[bx+4]
LEA si,[bx+di]
LEA si,[bx+di+4]
LEA si,BUFFER
LEA si,[bx]BUFFER
LEA si,[bx+di]BUFFER
都是可以的

而offset后面只能接一个标号

另外由于LEA有对应的指令,所以会编译成对应的指令
而offset是个伪指令,最后连同offset和后面的标号只会编译成一个表示偏移地址的常量,比如如果这样定义的话:
data segment
BUFFER DB 100
data ends
MOV SI,OFFSET BUFFER最后会编译成MOV SI,[0]

所以结论是:
在地址比较复杂的时候最好选用LEA,因为可以节省一些指令,如果只是一个标号的话,看你心情