向内存地址添加偏移量

Adding an offset to a memory address

我有一些这样的代码 (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]

然后它按预期工作。

如何使第一个版本以与第二个类似的方式工作?

你的"expected"4来自哪里?如果它来自 len dw 4h 的内容,那么您需要一个负载,例如 add si, [len].

lea 访问内存内容。

x86 没有带有内存源的复制和添加,因此您必须在带有寄存器目标的 "destructive" addlea 之间进行选择只是用寄存器 + assemble-时间常数

做数学运算