首先,对不起基本问题 - 我是汇编语言/ MASM的新手。我对使用OFFSET,方括号和取消引用非常困惑。
这是我的理解:
变量/数据标签是内存地址。方括号表示取消引用,因此[var]将检索地址var处的内容。 MASM指令自动取消引用内存操作数,因此以下内容都将var的内容复制到eax:
MOV eax, var
MOV eax, [var]
要将var的地址移动到寄存器,需要执行
MOV reg, OFFSET var
但现在看来var和[var]不再相同了:
var DWORD 10h
mov esi, OFFSET var
mov eax, [esi] ; eax = 10h
mov eax, esi ; eax = address of var
这是我的困惑开始的地方。鉴于总是暗示解除引用,何时需要方括号?什么时候可选?
此外,以下内容将使用var1的地址初始化var2
var1 byte 10h,20h,30h,40h
var2 dword var1
var2 dword OFFSET var1 ; equivalent
现在,var1什么时候引用地址?它什么时候引用内容?