我正在努力学习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。为了获取“item”的地址,我似乎需要
mov ebx, [OFFSET item]
invoke dwtoa, ebx, ADDR valuestr
invoke StdOut, ADDR valuestr
有人能解释一下MASM中方括号的作用,或者给我推荐一个好的参考资料吗。
var2 dword var1
会组合成var1
的地址。这是唯一明智的行为,因为var1
可能是extern
,使得它在编译时不可用。幸运的是,在这种情况下允许使用offset var1
,所以您总是可以使用明确的标记。 - Peter Cordes