Win32ASM学习[4]: TYPE、$、LENGTHOF、SIZEOF、TYPEDEF

本文深入探讨了汇编语言中自定义变量的定义与使用,详细解释了不同类型数据的大小及操作方法,并通过实例展示了如何获取变量类型大小、数组元素个数与总字节数等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

.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: 创建自定义类型

------------------------------------------------------------------------------------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值