查看: 48|回复: 0

汇编语言简易教程(10):宏

[复制链接]

3

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-11-1
发表于 2024-4-12 21:59:00 | 显示全部楼层 |阅读模式

汇编语言简易教程(10):宏

汇编语言宏是一组预定义的指令,可以轻松插入到需要的地方。

一旦定义,宏可以根据需要多次使用。当必须多次使用同一组代码时,它非常有用。

宏可用于减少编码量、简化程序并减少重复编码带来的错误.

汇编器包含一个强大的宏处理器,支持条件汇编、多级文件包含和两种形式的宏(单行和多行),以及用于额外宏功能的“上下文堆栈”机制.

在使用宏之前,必须对其进行定义。宏定义应放在源文件中数据和代码部分之前。

该宏用于文本(代码)部分。以下部分将提供详细的示例以及定义和使用。

单行宏

这部分需要您有一些基本的c/c++的基础知识

定义方式

%define mulby4(x) shl x, 2

使用方式

mulby4 (rax)

在源代码中,这会将 rax 寄存器的内容乘以 4(通过移位两位)

多行宏

多行宏可以包含不同数量的行(包括一行)。多行宏更有用,以下部分将主要关注多行宏.

定义

在使用多行宏之前,必须先对其进行定义。一般格式如下:

%macro  <name>  <number of arguments>
	; [body of macro]
%endmacro

参数可以在宏中通过 % 引用,其中 %1 是第一个参数,%2 是第二个参数,依此类推

示例

%macro  abs  1    
      cmp  %1, 0
      jge  %%done
      neg  %1
%%done:

%endmacro

从此示例中, 可以看到, lable的定义需要在开头增加 %%

使用

为了使用或“调用”宏,必须将其放置在代码段中并通过名称和适当数量的参数进行引用.

例如:

qVar    dq    4
mov		eax, -3    
abs		eax    
abs		qword [qVar]

每次使用宏时,宏都会从定义复制到代码中,并在宏主体中替换适当的参数。 <1>表示从宏定义复制的代码。在这两种情况下,%1 参数都被替换为给定的参数;在本例中指的是eax

使用示例

建议翻看原文 183 页

调试宏

宏的代码不会显示在调试器源窗口中。当宏正常工作时,这是非常方便的。但是,调试宏时,代码必须是可见的.

为了查看宏代码,请显示机器代码窗口(View → MachineCode Window)。在窗口中,显示指令的机器代码。步骤和下一个指令将执行整个宏。为了执行宏指令,必须使用stepi和nexti命令



来源:https://www.cnblogs.com/pDJJq/p/18132216/simple-tutorial-of-assembly-language-10-macro-1tbnma
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部