目录
[C++ 中的结构体(Struct)](#C++ 中的结构体(Struct))
[C++ 中的宏(Macro)](#C++ 中的宏(Macro))

C++ 中的结构体(Struct)
-
定义:用户自定义数据类型,将不同类型的变量组合在一起。
-
特点:
-
成员按声明顺序连续存储(可能存在内存对齐)。
-
通过
.或->访问成员。 -
便于管理复杂数据实体。
struct Point {
short x;
short y;
};Point p;
p.x = 123;
p.y = 456;
-
C++ 中的宏(Macro)
-
通过
#define定义,在预处理阶段进行文本替换。 -
支持常量和带参数的宏,无类型检查。
#define MAX 256
#define MyAdd(n) (n + 256)
汇编语言中的常量
基础解释:
-
EQU定义符号常量,编译时替换为值。代码中MAX EQU 256使MAX代表256。-
原理:文本替换,无运行时开销。
-
作用:提高代码可读性、维护性。
-
学习要点:掌握EQU语法,注意与变量区别。
MAX EQU 256 ; 定义常量
-
汇编语言中的结构体
基础解释:
-
结构体(struct)定义数据模板,指定字段类型和大小,编译器计算字段偏移。
-
代码中
Point struct定义x和y(各2字节,word),总4字节。 -
实例如
MyPoint在数据段分配内存,访问字段通过基址+偏移(如MyPoint.x偏移0)。
原理:
结构体是连续内存块,偏移固定,类似C的struct,但汇编直接操作地址。
作用:组织相关数据,便于管理复杂结构。
学习要点:理解内存布局、偏移计算、字段访问方式。

在 MASM 中,使用 struct ... ends 定义结构体。
Point struct
x WORD ? ; 2字节,未初始化
y WORD ? ; 2字节,未初始化
Point ends
关键知识点:
-
成员按声明顺序分配内存,偏移量从 0 开始计算。
-
WORD= 2 字节,DWORD= 4 字节等。 -
?表示分配空间但不初始化。 -
结构体实例定义在
.data段:.data
MyPoint Point <?> ; 创建 Point 类型的实例
成员访问方式:
mov MyPoint.x, 123 ; 直接通过 变量名.成员名 访问(汇编器自动计算偏移)
mov MyPoint.y, 456
内存布局:
-
MyPoint.x偏移 = 0(2字节) -
MyPoint.y偏移 = 2(2字节) -
总大小 = 4 字节
汇编语言中的宏
基础解释:
- 宏(MACRO)是MASM的文本替换机制,定义代码片段,通过参数动态生成指令。宏在预编译时展开,直接嵌入调用处,无函数调用开销。
原理:
-
宏是纯文本替换,编译器将宏调用替换为宏体代码。
-
代码中
MyAdd MACRO nNumber展开为mov eax,256; add eax,nNumber。
作用:
- 提高代码复用性,减少重复书写,适合简单逻辑。
学习要点:掌握宏定义、参数传递、展开机制,注意宏不涉及运行时堆栈,与函数的区别。

使用 MACRO ... endm 定义
;=========----======= 宏定义
MyAdd MACRO nNumber ; 定义宏
xor eax,eax
mov eax,256
add eax,nNumber
endm ;结束宏
调用方式:
MyAdd<MAX> ; 或 MyAdd<100>
宏展开后相当于直接插入:
mov eax, 256
add eax, MAX ; 结果 eax = 512
宏的特点:
-
汇编时完全展开为指令序列(文本替换)。
-
支持参数,实现代码复用。
-
提高开发效率,但会增加最终生成代码的体积。
-
调试时需注意宏展开后的实际指令