--------------------------------------------------------------------------------------------------------------------------------------------------------------------
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
Cardinal typedef ptr dword ;自定义变量
.data?
v1 db ?
v2 dw ?
v3 dd ?
v4 df ?
v5 dq ?
v6 dt ?
v7 db 1024 dup(?)
.data
V8 db 11,22,33,44
V8Size = ($ - V8) ;这是变量 V1 的大小 大小为4
V9 dw 11,22,33,44
V9Size = $ - V8 ;这是变量 V2 的大小 实际大小为8 这样相减后是减去V8的地址 - -
V10 dd 10 dup(0)
V10Size = $ - V10 ;这是变量 V3 的大小
V10Len = ($-V10) / 4 ;这是变量 V3(dword 类型数组)的元素数目
V11 db 'abcdefghijklmnopqrstuvwxyz', 0
V11Size = $ - V11 ;这是变量 V4 的大小
v12 db 'abc', 0
v13 dd 11, 22, 33, 44, 55
v14 dd 10 dup(0)
val Cardinal 100 ;使用 Cardinal 定义变量
.code
main proc
;TYPE: 获取类型大小, 对数组是获取每个元素的大小
PrintDec (type v1) ;1
PrintDec (type v2) ;2
PrintDec (type v3) ;4
PrintDec (type v4) ;6
PrintDec (type v5) ;8
PrintDec (type v6) ;10
PrintDec (type v7) ;1
;$: 当前程序语句的地址
PrintHex $ ;004013FF, 这是当前语句的地址
PrintDec V8Size ;4
PrintDec V9Size ;8
PrintDec V10Size ;40
PrintDec V10Len ;10
PrintDec V11Size ;27
PrintHex $ ;00401756, 这是当前语句的地址
;LENGTHOF: 数组元素个数; SIZEOF: 总字节数
PrintDec (lengthof v12) ;4
PrintDec (lengthof v13) ;5
PrintDec (lengthof v14) ;10
PrintDec (sizeof v12) ;4
PrintDec (sizeof v13) ;20
PrintDec (sizeof v14) ;40
PrintDec val;100
ret
main endp
end main
输出结果:
------------------------------------------------------------------------------------------------------------------------------------------
(type v1) = 1 (Test.asm, 45)
(type v2) = 2 (Test.asm, 46)
(type v3) = 4 (Test.asm, 47)
(type v4) = 6 (Test.asm, 48)
(type v5) = 8 (Test.asm, 49)
(type v6) = 10 (Test.asm, 50)
(type v7) = 1 (Test.asm, 51)
$ = 004013FF (Test.asm, 53)
V8Size = 4 (Test.asm, 54)
V9Size = 12 (Test.asm, 55)
V10Size = 40 (Test.asm, 56)
V10Len = 10 (Test.asm, 57)
V11Size = 27 (Test.asm, 58)
$ = 00401756 (Test.asm, 59)
(lengthof v12) = 4 (Test.asm, 61)
(lengthof v13) = 5 (Test.asm, 62)
(lengthof v14) = 10 (Test.asm, 63)
(sizeof v12) = 4 (Test.asm, 64)
(sizeof v13) = 20 (Test.asm, 65)
(sizeof v14) = 40 (Test.asm, 66)
val = 100 (Test.asm, 67)
----------------------------------------------------------------------------------------------------------
总结下
TYPE: 获取类型大小, 对数组是获取每个元素的大小
$: 当前程序语句的地址
LENGTHOF: 数组元素个数; SIZEOF: 总字节数
TYPEDEF: 创建自定义类型
------------------------------------------------------------------------------------------------------------