学 Win32 汇编[10]: TYPE、$、LENGTHOF、SIZEOF、TYPEDEF


TYPE: 获取类型大小, 对数组是获取每个元素的大小

; Test10_1.asm

.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



.data?

    v1 db ?

    v2 dw ?

    v3 dd ?

    v4 df ?

    v5 dq ?

    v6 dt ?

    v7 db 1024 dup(?)

.code

main proc

    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

    ret

main endp

end main


 
   

$: 当前程序语句的地址

; Test10_2.asm

.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



.data

    V1 db 11,22,33,44

    V1Size = ($ - V1)  ;这是变量 V1 的大小

    

    V2 dw 11,22,33,44

    V2Size = $ - V2    ;这是变量 V2 的大小

    

    V3 dd 10 dup(0)

    V3Size = $ - V3      ;这是变量 V3 的大小

    V3Len  = ($-V3) / 4  ;这是变量 V3(dword 类型数组)的元素数目

    

    V4 db 'abcdefghijklmnopqrstuvwxyz', 0

    V4Size = $ - V4      ;这是变量 V4 的大小

.code

main proc

    PrintHex $        ;00401001, 这是当前语句的地址

    PrintDec V1Size   ;4

    PrintDec V2Size   ;8

    PrintDec V3Size   ;40

    PrintDec V3Len    ;10

    PrintDec V4Size   ;27

    PrintHex $        ;0040135A, 这是当前语句的地址

    ret

main endp

end main


 
   

LENGTHOF: 数组元素个数; SIZEOF: 总字节数

; Test10_3.asm

.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



.data

    v1 db 'abc', 0

    v2 dd 11, 22, 33, 44, 55

    v3 dd 10 dup(0)

.code

main proc

    PrintDec (lengthof v1)  ;4

    PrintDec (lengthof v2)  ;5

    PrintDec (lengthof v3)  ;10

    

    PrintDec (sizeof v1)  ;4

    PrintDec (sizeof v2)  ;20

    PrintDec (sizeof v3)  ;40

    ret

main endp

end main


 
   

TYPEDEF: 创建自定义类型

; Test10_4.asm

.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



;自定义一个等同于 DWORD 的类型: Cardinal

Cardinal typedef ptr dword



.data

    val Cardinal 100  ;使用 Cardinal 定义变量

.code

main proc

    PrintDec val  ;100

    ret

main endp

end main



;TYPEDEF 还用于定义函数原型, 如:

;MyType typedef proto :DWORD, :DWORD, :DWORD


 
   

你可能感兴趣的:(typedef)