Assemble - .macro
写在前面:
在阅读u-boot源码过程中,看到有些汇编使用.macro来进行宏定义,然后将相应指令写在其中。如下代码片段:
1 .macro imx6ull_ddr3_evk_setting 2 ldr r0, =IOMUXC_BASE_ADDR 3 ldr r1, =0x000C0000 4 str r1, [r0, #0x4B4] 5 ldr r1, =0x00000000 6 str r1, [r0, #0x4AC] 7 ldr r1, =0x00000030 8 str r1, [r0, #0x27C] 9 ldr r1, =0x00000030 10 str r1, [r0, #0x250] 11 str r1, [r0, #0x24C] 12 str r1, [r0, #0x490] 13 ldr r1, =0x000C0030 14 str r1, [r0, #0x288] 15 16 ldr r1, =0x00000000 17 str r1, [r0, #0x270] 18 19 ldr r1, =0x00000030 20 str r1, [r0, #0x260] 21 str r1, [r0, #0x264] 22 str r1, [r0, #0x4A0] 23 24 ldr r1, =0x00020000 25 str r1, [r0, #0x494] 26 27 ldr r1, =0x00000030 28 str r1, [r0, #0x280] 29 ldr r1, =0x00000030 30 str r1, [r0, #0x284] 31 32 ... 33 .endm
一、这种伪汇编指令的用法:
指令:.MACRO/.ENDM
二、语法:
宏名称 .MACRO [形式参数]
........
宏定义语句
........
.ENDM
三、描述:
用.MACRO指令可以定义一个宏,可以把需要重复执行的一段代码,或者是一组指令缩写成一个宏,在
程序调用的时候就可以直接去调用这个宏而使代码更加简洁清晰,此宏由以下3部分构成(头-体-尾):
1. 头: 在这里可以指定这个宏的名称,别且定义形式参数
2. 体: 这里包含的是当这个宏被调用时所需要执行的指令或者语句。
3. 尾: 这里用.ENDM标识着这个宏的结束。
备注:形式参数只是一个标识符,会在宏展开或者宏调用时被逐个展开,形参的定义也必须按照全局变量定义的规则,形参不能为(%)。