汇编 结构体与宏

目录

[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定义xy(各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

宏的特点

  • 汇编时完全展开为指令序列(文本替换)。

  • 支持参数,实现代码复用。

  • 提高开发效率,但会增加最终生成代码的体积。

  • 调试时需注意宏展开后的实际指令

相关推荐
浩浩测试一下17 小时前
汇编中的JCC指令 (逆向分析)
汇编·逆向·标志位·jcc指令·跳转指令·标志位寄存器
浩浩测试一下18 小时前
汇编中的段与段寄存器(大小)段序 (逆向分析)
汇编·逆向·二进制·字节序·windows编程·内存地址排序
浩浩测试一下2 天前
汇编 call与ret 函数与堆栈 (逆向分析)
汇编·push·函数·pop·call·ret·堆栈逆向
山屿落星辰2 天前
昇腾NPU算子开发:从“手写汇编“到“搭积木“
汇编
浩浩测试一下2 天前
汇编 汇编寻址 (逆向分析)
汇编·寻址·windows编程·二进制逆向·机器码
浩浩测试一下3 天前
汇编 位运算 (逆向分析)
汇编·逆向·位运算·asm·windows编程·二进制逆向
浩浩测试一下3 天前
汇编 高低八位寄存器数据存储方式(逆向分析)
汇编·网络安全·逆向·二进制·免杀·寄存器·windows编程
a83331963 天前
C语言嵌入汇编详解
汇编·单片机·语言
yoyo_zzm4 天前
汇编到PHP:五大编程语言核心特性全解析
开发语言·汇编·php