ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习

文章目录

    • [ARM 汇编宏介绍](#ARM 汇编宏介绍)
    • [ARM 汇编宏的使用](#ARM 汇编宏的使用)

下篇文章:ARM64 常见汇编指令学习 12 -- ARM 汇编函数 的学习
上篇文章:ARM64 常见汇编指令学习 10 -- 无符号位域提取指令 BFXIL

ARM 汇编宏介绍

在 ARM 汇编中,".macro" 是用来定义一个宏的指令。宏可以看作是一个可以在汇编程序中重用的代码段。当调用宏时,汇编器会将宏的内容插入到调用位置。

一个简单的使用示例是:

c 复制代码
.macro add_and_mov, dst, src1, src2 
  add \dst, \src1, \src2 
  mov \dst, \src1 
.endm

在这个例子中,我们定义了一个名为'add_and_mov'的宏,它接受三个参数:dstsrc1src2。宏的主体部分包含两条指令:'add'和'mov'。使用的时候,只需要在程序中调用这个宏,传递相应的参数就可以了。例如:

c 复制代码
add_and_mov x0, x1, x2

这将在汇编代码中插入"add x0, x1, x2"和"mov x0, x1"两条指令。

需要注意的是,"\dst "、"\src1 "和"\src2 " 是参数的引用,它们在宏被实例化(即在代码中被调用)时,会被替换为实际的操作数。同时,宏定义的结束需要用".endm"来标记。

ARM 汇编宏的使用

在代码调试的初期,由于没有串口,只能通过POST_CODE的方式进行调试,也即通过汇编向 memory 中写入数据,下面代码展示了如何使用 宏 POST_CODE 进行调试。

c 复制代码
.macro  POST_CODE, val
  mov  x23, x0
  mov  x0, #\val
  bl   ASM_PFX(PostCode_S)
  mov  x0, x23
.endm

//x0 postcode value
ASM_FUNC (PostCode_S)
  mov x24, x1
  mov x1, #0x87000000
  str x0,[x1]
  mov x1, x24
  ret

ASM_FUNC(_ModuleEntryPoint)
  POST_CODE 0xE001

上面代码表示在调用 _ModuleEntryPoint 函数时候,会向地址 0x87000000 写入 0xE001d。其中 bl ASM_PFX(PostCode_S) 表示调用汇编函数 PostCode_S, 并且传给 函数 PostCode_S的参数是 x0的值(0xE001)。

关于 ASM_FUNC 的介绍见下篇文章:

下篇文章:ARM64 常见汇编指令学习 12 -- ARM 汇编函数 的学习
上篇文章:ARM64 常见汇编指令学习 10 -- 无符号位域提取指令 BFXIL

相关推荐
Jacen.L1 天前
逆向工程开篇(连载中)
汇编
薛定谔的猫_C8T61 天前
程序人生-Hello’s P2P
c语言·汇编·程序人生·shell·二进制·计算机系统·hello
God_archer1 天前
程序人生-hello’s P2P
linux·c语言·汇编·程序人生
南玖yy2 天前
x86 汇编逻辑运算全解析:从【位操作】到实际应用(AND,OR,NOT,XOR,TEST)
开发语言·汇编·arm开发·后端·架构·策略模式
南玖yy2 天前
深入理解 x86 汇编中的重复前缀:REP、REPZ/REPE、REPNZ/REPNE(进阶详解版)
开发语言·网络·汇编·后端·算法·bochs
Jacen.L2 天前
四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
汇编
网安INF3 天前
深入理解汇编语言中的顺序与分支结构
开发语言·汇编·编程
染指11104 天前
34.x64汇编写法(一)
汇编·x64汇编
廖致君5 天前
打打基础 | 从翻转链表到寄存器、汇编与内存
汇编·数据结构·链表
iCxhust5 天前
8088 单板机 汇编 NMI 中断程序示例 (脱离 DOS 环境)
c语言·开发语言·汇编·单片机·嵌入式硬件·mcu