字节对齐 ALIGN

ALIGN; 声明4字节对齐

定义一个数字常量定义 EQU

NAME EQU expr {type}
PLLCON EQU 0xE01FC080;定义PLLCON,类似于C的宏或C++的常量

包含文件 GET和INCLUDE

INCLUDE lpc2106.inc

NOP 空指令

在汇编时会被ARM的空操作代替,比如MOV R0,R0,一般用于延时与占位。

声明一个外部符符号 IMPORT,EXTERN

IMPORT,EXTERN 向外部导入一个符号,一般是外部程序全局变量

条件编译:[]。类似于C的#ifdef 之类定义。

格式 :[ 条件表达式

    满足条件分支

    |

    不满足条件分支

  ]

示例1:

[ ENTRY_BUS_WIDTH=32 ;类似#if ENTRY_BUS_WIDTH=32
b ChangeBigEndian ;DCD 0xea000007
] ; 类似#endif

示例2: [ CLKDIV_VAL>1 ; 类似#if CLKDIV_VAL>1
bl MMU_SetAsyncBusMode
|;类似#else
bl MMU_SetFastBusMode ; default value.
]; 类似#endif

示例3 [ THUMBCODE 类似#ifdef THUMBCODE
bx lr
| ;类似#else

                          mov   pc,lr

                           ]  ;类似#endif

段定义 AREA

指令集定义 CODE16和CODE32

指示是Thumb 指令集(压缩指令集,每个指令16位)。还是普通32位指令集

汇编结束:END

程序入口ENTRY

一个基本ARM程序结构

源代码由文本文件组成.按照汇编的编译器不同,分为两大量,一类是ADS的汇编程序,一类是GNU汇编格式,两者在指令集是完成一样,但是在伪指令.程序结构等方法各不同相同.本节主要是讲解ADS汇编格式.
ADS汇编程序,主要包含如下几类程序:

  • 汇编源程序,后缀名是.S
  • 汇编包含文件,后缀名是.inc
  • 如果是与C混和编程..C,.h也能识别

ARM 汇编语句格式

[标号]  <指令|条件|S> <操作数> [;注释]
  • 所有标号顶格写,而指令和伪指令不能顶格写
  • 标识符(标号,指令)大小写敏感,所以要在标号和指令时书写一致,一般伪指令,指令,寄存器名可以全部为大写
  • 注释以;开头,可以顶格写
  • 可以使用\来分行写太长语句
  • 变量,常量的定义必须在一行顶格写

常量的书写

数字常量

在程序中直接写数字 ,十进制 12,256,十六进制 0x1228,

字符常量

类似于C的定义,用SETS来定义字符常量

HELLO SETS “hello,the world!”

逻辑常量

逻辑真为{TRUE},逻辑假为{FLASE}

  Testno SETS {TURE}

汇编程序的段定义

任何一个程序都要分段,C语言一般由编译器自动分段,(分成.Text,.Data段之类),但在汇编程序这样的底层程序中,由开发者自行分段. 它包含如下段

  • 至少一个代码段,并且代码段是只读的,对应(.Text)
  • 数据段可以没有,也可以有多个.
  • 每一个段用END结束

AREA 定义一个段

AREA  段名    属性1, 属性2,

例子:AREA Init,CODE,READONLY

  • ENTRY 指明一个段的入口

  • END结束一个段

           ABC EQU 0x12
    
              AREA Example,CODE,READONLY
    
              ENTRY
    
          START MOV R7,#10
    
                MOV R6,#5
    
                ADD R6,R6,R7
    
                B   
    
                END

    ADS ARM汇编程序格式要求:

  1. 所有标号要顶格写.
  2. 所有指令不能顶格写,一般插入Tab键在行首
  3. ADS ARM中,是大小写敏感的.建议标号,指令,伪指令,寄存器名全部为大写
  4. 注释采用;打头
  5. 每个程序至少有一个AREA在代码里(READONLY)
  6. 每个段都要用END结束(不能顶格)

最常见几个伪指令 AREA,EQU,DCB,END ,ENTRY,EXPORT,GOBEL,IMPORT

常见伪定义:

  • DCB 定义字符中
     Str DCB "hello, world"