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标识着这个宏的结束。

备注:形式参数只是一个标识符,会在宏展开或者宏调用时被逐个展开,形参的定义也必须按照全局变量定义的规则,形参不能为(%)。

原文地址:https://www.cnblogs.com/iriczhao/p/12492633.html