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

相关推荐
我在人间贩卖青春6 天前
汇编之伪指令
汇编·伪指令
我在人间贩卖青春6 天前
汇编之伪操作
汇编·伪操作
济6176 天前
FreeRTOS基础--堆栈概念与汇编指令实战解析
汇编·嵌入式·freertos
myloveasuka6 天前
汇编TEST指令
汇编
我在人间贩卖青春6 天前
汇编编程驱动LED
汇编·点亮led
我在人间贩卖青春6 天前
汇编和C编程相互调用
汇编·混合编程
myloveasuka7 天前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子7 天前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka7 天前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春8 天前
汇编之分支跳转指令
汇编·arm·分支跳转