`
zzc1684
  • 浏览: 1224593 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

学 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
分享到:
评论

相关推荐

    Type of dat

    Padding: array[0..SizeOf(DWORD)-1] of Byte; begin FS := TFileStream.Create( // to read data file DataFile, fmOpenRead); RS := TFileStream.Create( // to write res file ResFile, fmCreate); { ...

    win32汇编内存映射文件之间的数据传递

    在Windows操作系统环境中,Win32汇编语言编程中,内存映射文件(Memory-Mapped Files)是一种高效的数据共享机制,尤其适用于多线程程序。它允许不同进程通过映射同一份文件到各自的虚拟地址空间来共享数据,而无需...

    解析C语言中的sizeof.rar

    在C语言中,`sizeof`是一个非常重要的运算符,它用于获取任何数据类型或变量所占用的内存字节数。这个运算符对于理解和优化代码、处理内存分配以及了解底层计算机工作原理都至关重要。下面我们将详细探讨`sizeof`的...

    php分割数据,数组,分割字符串

    php分割数据,数组,分割字符串循环输出 $array_x="1,15,8,100"; $new_arr = explode(",",$array_x); $length = sizeof($new_arr); for($i=0;$i<$length;$i++){ if($i!=0){echo " ";} echo $new_arr[$i]; }?>

    详细讲解sizeof的使用

    ### 详细讲解 `sizeof` 的使用 #### 一、`sizeof` 概念解析 `sizeof` 是 C 语言中的一个单目操作符,用于获取指定类型或变量的存储大小,单位为字节。它不同于普通的函数调用,而是直接在编译阶段就被解析。 ####...

    java-sizeof-0.0.5-API文档-中文版.zip

    赠送jar包:java-sizeof-0.0.5.jar; 赠送原API文档:java-sizeof-0.0.5-javadoc.jar; 赠送源代码:java-sizeof-0.0.5-sources.jar; 赠送Maven依赖信息文件:java-sizeof-0.0.5.pom; 包含翻译后的API文档:java-...

    STM32f103主控,通过IIC和BMP280相连接,完整工程,方便调试和移植

    STM32f103主控,通过IIC和BMP280相连接,完整工程,方便调试和移植 [15:44:51.228] chipId = 88 6.666000 [15:44:51.242] 82 ff 80 [15:44:51.247] sizeof(temp) = 3 [15:44:51.247] Pressure 2949.000000 Pa [15:...

    sizeof函数使用注意事项

    例如,`sizeof(int)`通常返回4(在32位系统中)或8(在64位系统中),因为这些是大多数系统上这些类型的标准字节数。 2. **数组与指针**:对于数组,`sizeof`会返回整个数组所占用的内存大小,而不仅仅是首元素的...

    C++sizeof使用规则及陷阱分析

    5. **typedef 与 `sizeof`**:使用 `typedef` 定义的新类型与原有类型具有相同的大小。 - 示例: ```cpp typedef short WORD; typedef long DWORD; cout (sizeof(short) == sizeof(WORD)) ; // 输出 1,表示...

    matlab开发-sizeof

    首先,`sizeof`函数的基本语法是`sizeof(type)`,其中`type`是你想要查询的数据类型。例如,如果你想知道`double`类型占用多少字节,你可以写`sizeof(double)`。在MATLAB中,大部分内置数据类型的字节数如下: 1. `...

    length of array

    在C++编程中,"length of array"是一个常见的需求,特别是在处理数组时。数组不同于其他数据结构,它没有内置的方法来获取其元素的数量。因此,程序员必须手动计算或存储数组的长度。本篇文章将深入探讨如何在C++中...

    sizeof详细总结

    sizeof 操作符的定义是:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. 其返回...

    sizeof运算符的使用

    使用`typedef`或`using`关键字创建类型别名后,`sizeof`依然能够正确返回别名类型的字节数。 8. **`sizeof...`运算符(C++11引入)** C++11引入了`sizeof...`运算符,用于计算模板参数 pack(可变参数模板)的...

    VC++串口编程--基于Win32 API

    "VC++串口编程--基于Win32 API" 本资源主要介绍了使用Win32 API实现串口编程的方法,并通过一个实例对其进行了详细的示例讲解。下面是该资源的知识点总结: 一、串口编程的基本概念 * 串口是计算机与外部设备进行...

    win32经典代码

    在编程领域,Windows API,通常称为Win32 API,是一组用于开发Windows操作系统应用程序的接口。这个API提供了底层访问权限,允许程序员直接控制操作系统的核心功能,如窗口管理、图形绘制、文件操作、网络通信等。...

    java-sizeof-0.0.5-API文档-中英对照版.zip

    赠送jar包:java-sizeof-0.0.5.jar; 赠送原API文档:java-sizeof-0.0.5-javadoc.jar; 赠送源代码:java-sizeof-0.0.5-sources.jar; 赠送Maven依赖信息文件:java-sizeof-0.0.5.pom; 包含翻译后的API文档:java-...

    sizeof和strlen区别

    在C/C++编程语言中,`sizeof`和`strlen`是两个非常重要的操作符,它们分别用于获取数据类型的大小和字符串的长度。然而,这两个操作符有着本质的区别,理解和掌握它们的区别对于编写高效且无误的代码至关重要。 ...

    typedef的用法

    在C语言中,`typedef` 是一个非常重要的关键字,它允许我们为已存在的类型创建新的别名,使得代码更具可读性和可维护性。本文将深入探讨`typedef`的使用方法,以及它如何与函数指针相结合。 首先,`typedef`的基本...

    sizeof用法

    sizeof 使用形式:sizeof(type)。数据类型必须用括号括住,例如:sizeof(int)。 2. 用于变量 sizeof 使用形式:sizeof(var_name) 或 sizeof var_name。变量名可以不用括号括住,例如:sizeof(var_name),sizeof ...

Global site tag (gtag.js) - Google Analytics