В одно время (16-битные Windows) эти типы имели разные размеры.Во время перехода на Win32 все они оказались 32-битными типами данных.Таким образом, DWORD
совместим со всеми из них, по крайней мере до некоторой степени.
Вопреки распространенному мнению, однако, язык ассемблера имеет (или, по крайней мере, может) иметь типы и даже довольно справедливую безопасность типов,Например, рассмотрим, что происходит, когда вы делаете что-то вроде:
mov lpszMenuName[ecx], 0
Если lpszMenuName
определено как DWORD
, ассемблер не примет это, потому что '0' может быть byte
, word
, dword
или (в 64-битном мире) qword
.Чтобы это работало, вы должны добавить (по существу) приведение типа:
mov byte ptr lpszMenuName[ecx], 0
Так что ассемблер знает, что вы хотите написать один байт.В качестве альтернативы вы можете определить lpszMenuName
как:
lpszMenuName ptr byte
В этом случае ассемблер будет знать, что он должен обрабатывать его как указывающий на байт без явного указания этого каждый раз.