【问题标题】:is DWORD defined in WinAPI the same as DWORD in assemblyWinAPI中定义的DWORD是否与程序集中的DWORD相同
【发布时间】:2011-12-31 03:12:35
【问题描述】:

在 WinAPI 中:

typedef unsigned long DWORD;

我认为DWORD、WORD……是计算机中的基本数据类型,不管是int、unsigned long……最后在汇编中都会转换成DWORD,为什么这里要转换成unsigned long呢?不加定义就不能直接用DWORD吗?

【问题讨论】:

    标签: winapi assembly word dword


    【解决方案1】:

    DWORD 是它被定义的任何内容(在程序集中没有自动转换为特定宽度)。这个 typedef 是必需的,因为 WinAPI 接口都是用无符号长整数定义的,只要使用 DWORD。 IOW,您需要此定义才能使用 API。

    回答您的其他问题。这个答案是否定的,没有定义就不能使用 DWORD。它不是编译器的内置类型。

    Win32 API 的 DWORD 定义是固定的:http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx

    【讨论】:

      【解决方案2】:

      在 Windows API 和基于 x86 指令集的汇编语言中,DWORD 指定一个大小为 32 位的变量。所以是的,它通常是相同的大小。

      你不能在 C++ 中使用类型 DWORD 而不定义它,因为它不是核心语言的一部分。 DWORD 的类型定义可能需要根据您的编译器和系统架构进行调整。显然,对于您的配置,unsigned long 类型有 32 位,因此 DWORD 定义为unsigned long

      【讨论】:

      • 在大多数汇编语言中,一个字是 32 位的,因为一个字通常是 CPU 上的“自然”数据类型。 x86 有点奇怪,因为它是 16 位架构的扩展,所以一个字是 16 位,而“双字”或 dword 是 32。所以“大多数汇编语言”并非如此
      • 好吧,我只知道 NASM、MASM 和 TASM,其中 word 是 16 位,因为遗留原因,而 DWORD 表示 32 位。例如,DWORD 是固定的,因为否则会引起混淆,同样的原因它在 Windows API 中是固定的。我的印象是这些是最常用的,其他汇编语言也是如此。
      • 那些不是我所说的不同的汇编语言。它们是不同的汇编程序,但它们都针对相同的指令集。它们都使用DWORD 表示相同的意思,因为DWORD 是英特尔在指令集中定义的。 MIPS 或 PowerPC 或 ARM CPU 的汇编程序根本不会使用 DWORD,或者具有相同的含义,除非这些 CPU 也定义了该术语
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2011-10-30
      相关资源
      最近更新 更多