zoukankan      html  css  js  c++  java
  • 学 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
    

  • 相关阅读:
    javascript中的闭包、模块与模块加载
    jQuery源代码学习之九—jQuery事件模块
    javascript中的正则表达式学习
    javascript中的真假值、数据类型判断以及+的特殊用法
    jQuery源代码学习之八——jQuery属性操作模块
    使用RESTful风格,开发Web接口
    SpringBoot实战(1):搭建第一个SpringBoot项目
    Java面试考点解析(3)-- 数据库篇、Spring+MyBatis整合
    Java面试考点解析(2)-- Web开发、Spring、SprinMVC
    Java面试考点解析(1)-- 基础知识篇
  • 原文地址:https://www.cnblogs.com/del/p/1705241.html
Copyright © 2011-2022 走看看