我有一些这样的代码(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]
然后按预期运行。
如何使第一个版本与第二个版本类似?
答案 0 :(得分:2)
您的“预期” 4
来自哪里?如果来自len dw 4h
的内容,那么您需要加载,例如add si, [len]
。
lea
不能不访问内存的内容。
x86没有与内存源进行复制和添加的操作,因此您必须在具有破坏目标的“ {破坏性” add
和具有寄存器目标的lea
之间进行选择寄存器+汇编时间常数