MASM32中令人困惑的括号

问题描述 投票:7回答:1

我试图与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 ...

assembly masm masm32
1个回答
13
投票

MASM对于具有类型的汇编语言是不常见的。 MASM知道,因为您如何定义符号item,它是类型为DWORD的存储位置。当您将其用作操作数时,您知道(可能)意味着您希望将值存储在地址中,而不是地址中的值。因此,无论您使用item还是[item],MASM都假定您是指后者。如果您确实想要商品的地址,则需要使用OFFSET item

© www.soinside.com 2019 - 2024. All rights reserved.