![]() |
1
7
dword是32位窗口上的32位类型,C版本结构中的所有类型也是如此。因此,二者是相容的。 |
![]() |
2
5
汇编语言是无类型的-dword和其他关键字仅指示应为特定实体保留的字节数。事实上,由于双字及其同族不代表操作码/助记法,它们实际上是宏预处理器的特征。 与其他语言一样,C/C++类型受到诸如EndieNess之类的规则的约束,其中符号位的存在、转换、转换和赋值等都是可能的。等等,您提供的结构的C版本比汇编语言版本更具体,但兼容。 |
![]() |
3
4
所有这些不同的C类型的大小都是dword。程序集不是强类型的-它只知道每个变量的字节数。 |
![]() |
4
2
曾经(16位窗口)这些类型有不同的大小。在迁移到win32期间,它们都以32位数据类型结束。这样,A
然而,与流行的观点相反,汇编语言确实(或者至少可以)有类型,甚至相当公平的类型安全性。举个例子,考虑一下当你做如下事情时会发生什么:
用
所以汇编程序知道您要写一个字节。或者,您可以定义
在这种情况下,汇编程序会知道它应该将它视为指向一个字节,而不必每次都明确地声明。 |
![]() |
5
1
wndproc、uint等在c头文件中定义,因此没有直接的asm等效项。它们都是32位系统上的双字大小的量,这就是本教程生成工作代码的原因。 |
![]() |
6
1
在汇编中,不管高级结构是否有指针或整数,实际情况是它们关联的高级数据类型是字节、字和双字,在您的例子中,结构都是32位的,因此是双字(字是16位的,双字是32位的)。不要误认为组装中的结构与C中的结构不同,这是非常相同的。汇编程序具有原始数据类型,不管指针、结构等如何,将它们分开的是如何装入寄存器(取决于语法): mov eax, dword ptr [bx]
此汇编程序示例演示如何加载
int bx = 5; int *eax; ptr = &bx; 希望这有帮助, 最好的问候, 汤姆。 |
![]() |
7
1
事实上,masm 6+支持一种类型,因此您可以在masm中使用类似于c中的结构。但是您必须首先重新创建类型层次结构,并且很快就会注意到使用masm键入的好处在某种程度上是有限的(如果存在,就这样做了)。我建议你用谷歌搜索masm 6程序员的参考pdf文件:它相当清楚地解释了masm中的“hll”好东西,包括打字,并包括一些例子。 在下面的链接中似乎有一个副本可用,但还有其他副本在浮动。 http://www.microlab.teipat.gr/upload/arxeshy/Microsoft_MASM_Programmers_Guide_v6.zip |