我试图与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中解释方括号的含义,或为我提供参考。
我试图与MASM32保持联系,并对以下内容感到困惑:我认为括号用于间接寻址,所以如果我有一个预定义变量.data dd 42 then mov ...
MASM对于具有类型的汇编语言是不常见的。 MASM知道,因为您如何定义符号item
,它是类型为DWORD
的存储位置。当您将其用作操作数时,您知道(可能)意味着您希望将值存储在地址中,而不是地址中的值。因此,无论您使用item
还是[item]
,MASM都假定您是指后者。如果您确实想要商品的地址,则需要使用OFFSET item
。