【发布时间】:2014-09-27 13:54:57
【问题描述】:
我正在尝试掌握 MASM32,但对以下内容感到困惑:
我认为括号是用于间接的,所以如果我有一个预定义的变量
.data
item dd 42
然后
mov ebx, item
会将“item”的内容,即数字 42,放入 ebx 和
mov ebx, [item]
会将“item”的地址,即存储 42 的位置,放入 ebx。
但控制台应用程序中的以下代码:
mov ebx, item
invoke dwtoa, ebx, ADDR valuestr
invoke StdOut, ADDR valuestr
mov ebx, [item]
invoke dwtoa, ebx, ADDR valuestr
invoke StdOut, ADDR valuestr
打印 42 两次。要获取“项目”的地址,我似乎需要
mov ebx, [OFFSET item]
invoke dwtoa, ebx, ADDR valuestr
invoke StdOut, ADDR valuestr
谁能解释一下 MASM 中方括号的含义,或者给我一个好的参考。
【问题讨论】:
-
duplicate of this question 还指出
var2 dword var1组装到var1的地址。这是唯一正常的行为,因为var1可能是extern,使其内容在汇编时不可用。幸运的是,offset var1在该上下文中是允许的,因此您始终可以使用明确的表示法。