向内存地址添加偏移量
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" add
或 lea
之间进行选择只是用寄存器 + assemble-时间常数
做数学运算
我有一些这样的代码 (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" add
或 lea
之间进行选择只是用寄存器 + assemble-时间常数