结构和联合分别用 struct、union 定义, 都是 ends 结束定义.
它们使用方法相同, 并可以互相嵌套; 主要区别是后者的各成员共用同一个地址.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

结构示例:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
.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

;定义结构
MyPoint struct
    X dd ?
    Y dd ?
MyPoint ends

.data
    ;声明结构, 使用 <>、{} 均可
    pt1 MyPoint <>
    pt2 MyPoint {}
    pt3 MyPoint <33,44>
    pt4 MyPoint {55,66}
    pt5 MyPoint {77,}
    pt6 MyPoint {,88}
    pt7 MyPoint {,}
.code
main proc
    mov pt1.X, 11
    mov pt1.Y, 22
    inc pt1.X
    PrintDec pt1.X ;12
    PrintDec pt1.Y ;22
    ;
    PrintDec pt2.X ;0
    PrintDec pt2.Y ;0
    ;
    PrintDec pt3.X ;33
    PrintDec pt3.Y ;44
    ;
    PrintDec pt4.X ;55
    PrintDec pt4.Y ;66
    ;
    PrintDec pt5.X ;77
    PrintDec pt5.Y ;0
    ;
    PrintDec pt6.X ;0
    PrintDec pt6.Y ;88
    ;
    PrintDec pt7.X ;0
    PrintDec pt7.Y ;0
    ret
main endp
end main
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

联合示例:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
.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

;定义联合
MyUnion union
    D dd ?
    W dw ?
    B db ?
MyUnion ends

.data
    u1 MyUnion <>
    u2 MyUnion {1122h} ;只能有一个初始值
.code
main proc
    mov u1.D, 12345678h
    PrintHex u1.D ;12345678
    PrintHex u1.W ;5678
    PrintHex u1.B ;78
    ;
    PrintHex u2.D ;00001122
    PrintHex u2.W ;1122
    PrintHex u2.B ;22
    ret
main endp
end main
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

用寄存器引用结构变量:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
.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

MyPoint struct
    X dd ?
    Y dd ?
MyPoint ends

.data
    pt1 MyPoint <11,22>
.code
main proc
    lea ebx, pt1
    PrintDec (MyPoint ptr [ebx]).X ;11
    PrintDec (MyPoint ptr [ebx]).Y ;22
    ret
main endp
end main
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

定义时的数据初始化:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
.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

MyStruct struct
    FName db 12 dup(0)
    FAge  db 66
MyStruct ends

.data
    u1 MyStruct <>
    u2 MyStruct <'张三', 88>
.code
main proc
    PrintString u1.FName ;
    PrintDec    u1.FAge  ;66
   
    PrintString u2.FName ;张三
    PrintDec    u2.FAge  ;88
    ret
main endp
end main
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用 SYSTEMTIME 结构获取系统时间的例子:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
.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

;SYSTEMTIME 结构定义在 windows.inc
;GetLocalTime 函数声明在 kernel32.inc
.data
    sysTime SYSTEMTIME <>
.code
main proc
    invoke GetLocalTime, addr sysTime
    PrintDec sysTime.wYear  ;2010
    PrintDec sysTime.wMonth ;4
    PrintDec sysTime.wDay   ;22
    ret
main endp
end main
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

结构嵌套:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
.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

Pt struct
   X dd ?
   Y dd ?
Pt ends

Rect struct
    Left  Pt <>
    Right Pt <>
Rect ends

.data
    r1 Rect <>
    r2 Rect <<55,66>, <77,88>>
.code
main proc
    mov r1.Left.X, 11
    mov r1.Left.Y, 22
    mov r1.Right.X, 33
    mov r1.Right.Y, 44
   
    PrintDec r1.Left.X  ;11
    PrintDec r1.Left.Y  ;22
    PrintDec r1.Right.X ;33
    PrintDec r1.Right.Y ;44
   
    PrintDec r2.Left.X  ;55
    PrintDec r2.Left.Y  ;66
    PrintDec r2.Right.X ;77
    PrintDec r2.Right.Y ;88
    ret
main endp
end main

Win32ASM学习[19]:结构与联合相关推荐

  1. C语言学习之字符串,字符,字节,结构和联合

    1. 字符串 字符串就是一串零个或多个字符,并且以一个位模式全为0的NUL字节结尾. 头文件string.h包含了使用字符串函数所需要的原型和声明. memxxx函数提供了累死你字符串函数的能力,但是 ...

  2. Mysql进阶学习(七)联合查询与DML语言

    Mysql进阶学习(七)联合查询与DML语言 进阶9:联合查询 语法: 特点:★ 案例 DML语言 1.插入语句(insert) 方式一:经典的插入 1.1.插入的值的类型要与列的类型一致或兼容 1. ...

  3. 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)

    [摘要] 除了范围索引之外,点查找的Hash Map在DBMS中起着类似或更重要的作用. 从概念上讲,Hash Map使用Hash函数来确定性地将键映射到数组内的随机位置(参见图[9 ],只有4位开销 ...

  4. C语言结构、联合、位操作、位域和枚举

    1.结构 结构是派生的数据类型,可以使用其他数据类型来构造它们. 1.1 定义结构和结构类型的变量 关键字struct引入了结构定义,用一个标识符作为结构标记,来命名一个结构类型.结构定义大括号内声明 ...

  5. 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文

    2019独角兽企业重金招聘Python工程师标准>>> 学习索引结构的一些案例 The Case for Learned Index Structures Tim Kraska1 M ...

  6. SV学习笔记—结构体及枚举类型及字符串

    目录 1.结构体 1.1 压缩结构体 1.2 非压缩结构体 1.3联合结构体 2.枚举类型 3.字符串 1.结构体 Verilog的最大缺陷之一是没有数据结构,SV中可以使用struct语句创建结构, ...

  7. R语言七天入门教程三:学习基本结构

    R语言七天入门教程三:学习基本结构 一.编程的语言的基本结构 1.三种基本结构 绝大多数编程语言,都有三种最基本的程序结构:顺序结构.分支结构.循环结构.这三种结构的流程图如下所示(从左至右依次为:顺 ...

  8. Linux学习--目录结构

    ** Linux学习–目录结构 ** 一.基本介绍 linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录. 记住一句经 ...

  9. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图 ...

最新文章

  1. 线段树专辑——pku 2886 Who Gets the Most Candies?
  2. matlab检验两个样本的,两样本独立T检验MATLAB代码
  3. C++源代码免杀之函数的动态调用
  4. mysql安装了老版本_Windows环境下MySQL安装教程
  5. 分享一个有趣的网站“让我帮你百度一下“
  6. 计算机网络(十)-数据链路层-差错控制
  7. 【latex】输入角度符号°
  8. 随机森林入门攻略(内含R、Python代码)
  9. yolov2 损失函数_目标检测算法之YOLOv2损失函数详解
  10. SpringBoot项目防止Sql注入
  11. GO语言+区块链视频教程,GO语言+区块链学习线路图(含大纲+视频+资料)
  12. 散射理论对微波遥感的重要性
  13. 详细的组态王软件与200 Smart PLC网口通信教程
  14. 18. --plic--=--ply--=--pli--=--ple--=--plex--=--plo-- to fold 倍,重,折叠 (词19、20)
  15. 【CIPS 2016】(17章)文字识别 (研究进展、现状趋势)
  16. 微信小程序-图片等比例显示不变形
  17. cocos2d-x初探学习笔记(29)-cocosBuilder
  18. 格式化代码 format.js
  19. 计算机应用基础教师授课视频,微课在计算机应用基础教学的应用
  20. Babuk勒*索软件(病*毒)解密

热门文章

  1. 接口测试php代码,简易 PHP API 测试
  2. Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器
  3. mysql把用户权限授予新用户_MySQL新建普通用户和库并授予新用户对新库的所有权限...
  4. 关于模板引擎handlebars.js基本用法
  5. CSS实现垂直居中的方法
  6. Ocrad.js – JS 实现 OCR 光学字符识别
  7. Async Await
  8. Jquery获取服务器端控件ID的方法
  9. 关于页面布局间距使用的经验之谈
  10. js 计算对象数组中某个属性值重复出现的个数