ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-04-30 12:03:28  阅读:225  来源: 互联网

标签:10 TYPEDEF main lib PrintDec includelib Win32 include inc


学 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

posted on 2010-04-06 12:40  万一  阅读(5030)  评论(0)  编辑  收藏

标签:10,TYPEDEF,main,lib,PrintDec,includelib,Win32,include,inc
来源: https://blog.51cto.com/u_14617575/2745508

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有