汇编语言联合 (union) 的声明和使用
unionname UNION
union-fields
unionname ENDS
structname STRUCT
structure-fields
UNION unionname
union-fields
ENDS
structname ENDS
Integei; UNION
D DWORD 0
W WORD 0
B BYTE 0
Integer ENDS
一致性
如果使用初始值,那么它们必须为相同的数值。假设 Integer 声明了 3 个不同的初始值:
Integer UNION
D DWORD 1
W WORD 5
B BYTE 8
Integer ENDS
.data
mylnt Integer <>
结构包含联合
在结构声明中使用联合的名称,就可以使联合嵌套在这个结构中。方法如同下面在 Fileinfo 结构中声明 FilelD 字段一样:
Fileinfo STRUCT
FilelD Integer <>
FileName BYTE 64 DUP(?)
Fileinfo ENDS
Fileinfo STRUCT
UNION FilelD
D DWORD ?
W WORD ?
B BYTE ?
ENDS
FileName BYTE 64 DUP(?)
Fileinfo ENDS
声明和使用联合变量
联合变量的声明和初始化方法与结构变量相同,只除了一个重要的差异:不允许初始值多于一个。下面是 Integer 类型变量的例子:
val1 Integer <12345678h>
val2 Integer <100h>
val3 Integer <>
mov val3.B, al
mov val3.W, ax
mov val3.D, eax
INPUT_RECORD STRUCT
EventType WORD ?
ALIGN DWORD
UNION Event
KEY_EVENT_RECORD <>
MOUSE_EVENT_RECORD <>
WINDOW_BUFFER_SIZE_RECORD <>
MENU_EVENT_RECORD <>
FOCUS_EVENT_RECORD <>
ENDS
INPUT_RECORD ENDS
Win32 API
在命名结构时,常常使用单词 RECORD。KEY_EVENT_RECORD 结构的定义如下所示:
KEY_EVENT_RECORD STRUCT
bKeyDown DWORD ?
wRepeatCount WORD ?
wVirtualKeyCode WORD ? wVirtualScanCode WORD ?
UNION uChar
UnicodeChar WORD ?
AsciiChar BYTE ?
ENDS
dwControlKeyState DWORD ?
KEY_EVENT_RECORD ENDS
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算