向存储器地址添加偏移量

时间:2019-05-02 04:55:35

标签: masm x86-16 emu8086

我有一些这样的代码(emu8086)

data segment
    str1 db "hello"
    len dw 4h
data ends

code segment
    ...
    ...
    mov si, offset str1
    lea di, [si + len]
code ends

我希望它使di指向DS:0004的地址,但是实际生成的指令是LEA DI, [SI] + 021h

如果相反,我使用:

lea di, [si + 4]

然后按预期运行。

如何使第一个版本与第二个版本类似?

1 个答案:

答案 0 :(得分:2)

您的“预期” 4来自哪里?如果来自len dw 4h的内容,那么您需要加载,例如add si, [len]

lea不能访问内存的内容。

x86没有与内存源进行复制和添加的操作,因此您必须在具有破坏目标的“ {破坏性” add和具有寄存器目标的lea之间进行选择寄存器+汇编时间常数