2011-11-17 12 views
2

でDWORDと同じWinAPIの中で定義されたDWORDです:はWinAPIので組み立て

typedef unsigned long DWORD; 

私はDWORD、WORD ...は関係なく、int型、unsigned long型のために、コンピュータでの基本的なデータタイプだと思います...それは最終的にアセンブリでDWORDに変換されます、なぜそれはここで符号なしの長さに変換する必要がありますか? DWORDをそのまま使用することはできませんか?

答えて

1

DWORDはどのようなものでも定義されています(アセンブリでは特定の幅に自動変換されません)。このtypedefは、WinAPIインターフェイスがすべてDWORDが使用されているどこでもunsigned longで定義されているため必要です。 IOWでは、APIで作業するにはこの定義が必要です。

他の質問にお答えします。この答えは「いいえ、DWORDは定義なしでは使用できません。コンパイラーの組み込み型ではありません。 DWORDの定義は、Win32 APIのために固定されている

:x86命令セットに基づいて、Windows APIのInおよびアセンブリ言語でhttp://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx

1

、DWORDは32ビットのサイズの変数を指定します。だから、通常は同じサイズです。

タイプDWORDは、コア言語の一部ではないため、C++で定義することなく使用できません。タイプ定義DWORDは、コンパイラーとシステムアーキテクチャーに応じて調整する必要があります。どうやら、あなたの設定では、タイプunsigned longは32ビットなので、DWORDはunsigned longと定義されています。

+0

ほとんどのアセンブリ言語では、ワードは32ビットです。なぜなら、ワードは通常CPU上の「自然な」データ型であるからです。 x86は16ビットアーキテクチャの拡張版なので少し奇妙なので、ある単語は16ビットで、「ダブルワード」すなわちdwordは32です。 "ほとんどのアセンブリ言語"について言えません – jalf

+0

まあ、私はNASM、MASM、TASMを知っています。ワードは従来の理由から16ビット、DWORDは32ビットを意味します。たとえば、DWORDは、Windows APIで修正されたのと同じ理由で、混乱の原因となるため修正されています。私はこれらが最も一般的に使用されている印象を受けていました。これは他のアセンブリ言語でも同様です。 – ddso

+0

それらは私が別のアセンブリ言語と呼ぶものではありません。それらは異なるアセンブラですが、すべて同じ命令セットをターゲットにしています。 DWORDは命令セットでIntelによって定義されているため、それらはすべて同じことを意味するために 'DWORD 'を使用します。 MIPSまたはPowerPCまたはARM CPU用のアセンブラは、それらのCPUが同じように用語を定義していない限り、DWORDをまったく使用しないか、同じ意味で使用します。 – jalf

関連する問題