ARM汇编编程学习

在嵌入式程序中,汇编语言多用于bootloader、内核的初始化以及效率要求比较高的程序代码中。

目前常用的ARM汇编指令有两种,一是ARM标准汇编,适用于ARM公司的汇编器适合在Windows平台中使用;二是GNU汇编,适用与交叉编译工具链中的汇编器,适合于Linux开发平台。

       和C语言有程序开发有它的程序框架一样,如包含头文件,宏定义,函数格式等等,汇编语言也有它的开发框架,如:

.section.data

     <初始化的数据>

.section.bss

<为初始化的数据>

.section.text

.global _start

_start:

...

...



_start为汇编语言的程序入口


下面分类介绍ARM指令,这里将ARM汇编指令分为6种:


       1)算数和逻辑指令


MOV 传送指令

       MOV {条件} {S} <dest> ,  <op 1>

     dest = op_1

MOV指令从另一个寄存器、被移位的寄存器或一个立即数装载到目的寄存器

MOV R0, R0, LSL#3


MVN:传送取反的值

 MVN {条件} {S} <dest> ,  <op 1>

dest = !op_1


SUB:减法

SUB   {条件}   {S} <dest>,  <op 1>,  <op 2>

dest = op_1  -   op_ 2


ADD :加法

ADD  {条件}   {S} <dest>,  <op 1>,  <op 2>

dest = op_1 +  op_ 2


AND:逻辑与

AND  {条件}   {S} <dest>,  <op 1>,  <op 2>

dest = op_1 and  op_ 2


ORR:逻辑或

ORR {条件}   {S} <dest>,  <op 1>,  <op 2>

dest = op_1 or  op_ 2


BIC:位清除

BIC {条件}   {S} <dest>,  <op 1>,  <op 2>

BIC 是在一个字中清除位的一个方法, 操作数2是一个32位的位掩码(mask),如在掩码中置1了某一位则清除这一位。

BIC R0, R0, #0b1011


2)比较指令

CMP:比较

CMP {条件}   {P} <op 1>,  <op 2>

status = op_1 - op_2

影响CSPR标志位

TST:测试位

CMP {条件}   {P} <op 1>,  <op 2>

status = op_1 and op_2

结果影响标志位

3跳转指令

B:分支

B {条件} <地址>

BL:带链接的分支

BL {条件} <地址>

在分支之前R14寄存器中装载上了R15的内容,在分支程序执行结束之后可以将R14中的地址装载到R15中,从而返回分支之前的指令。


·4)移位指令

LSL:逻辑算术左移

左端高位移出数据丢弃,右端最低有效位用0补充

ROR:循环右移

将右侧移出的数据放在左侧


5)程序状态字访问指令 (对CRSR, SPSR操作的指令)

MSR  :将普通寄存器中的数据写入程序状态字寄存器中

MRS::将程序状态字寄存器中的数据保存至普通寄存器中

6)  存储器访问指令

LDR    Rd, <地址>  ;将内存中的数据传入寄存器中

STR    Rd, <地址> ;将寄存器中的数据存入内存中


STR  Rd, [Rbase, Rindex] !  ;内存中的地址为 Rbase+ Rindex ,   !表示将Rbase+ Rindex 写回至Rbase


下面讲解一下ARM汇编伪指令,首先说明一下什么是伪指令,伪指令本身并没有对应的机器码,只是在编译的时候起作用,或者转化为其他实际指令来运行。这里有必要解释一下机器码。

机器码是我们嵌入式芯片能够识别的代码,我们在编译器中编写的c或者汇编代码最终都要翻译为机器码。下图为机器码格式的说明。




ARM汇编伪指令可分为两类,定义类伪指令和操作类伪指令;

1)定义类伪指令

这里介绍7中定义类伪指令

global   ;全局变量声明

.data   ;数据段声明

.ascii;  数据段中字符串格式声明

.byte ; 数据段中字节格式声明

.word; 数据段中字格式声明

.equ ; 类似于c中的 #define宏定义

.align ; 字节对齐

2)操作类伪指令

nop   ; 空操作

ldr  ;受机器码格式的限制,arm汇编指令的操作数不能超过8位,这里定义ldr伪指令用于处理汇编代码中超过8位的操作数,使用范例    ldr r0, =0xfff


最后说明的指令是协处理器访问指令,为了减轻处理器负担,ARM处理器支持多达16个协处理器用于执行特定的任务,其中CP15是最重要的一个,用到的指令为mrc    mcr具体格式可参阅arm核参考手册

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习ARM汇编指令的经典资料。 对ARM的各种汇编指令进行了深入全面的讲解,并给出了各种示例和详细注解,并且还对一些值得注意的点或是容易犯错误的地方进行了总结。 目录 前言................................................................................................................................................................i 目录................................................................................................................................................................I ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM处理器寻址方式..........................................................................................................................2 寄存器寻址....................................................................................................................................2 立即寻址........................................................................................................................................2 寄存器偏移寻址............................................................................................................................2 寄存器间接寻址............................................................................................................................3 基址寻址........................................................................................................................................3 多寄存器寻址................................................................................................................................4 堆栈寻址........................................................................................................................................4 块拷贝寻址....................................................................................................................................5 相对寻址........................................................................................................................................5 指令集介绍............................................................................................................................................7 ARM指令集..................................................................................................................................7 指令格式................................................................................................................................7 第2个操作数................................................................................................................7 #immed_8r...........................................................................................................7 Rm..........................................................................................................................8 Rm,shift..................................................................................................................8 条件码............................................................................................................................9 ARM存储器访问指令........................................................................................................11   LDR和STR........................................................................................................11   LDM和STM.......................................................................................................14   SWP.....................................................................................................................17 ARM数据处理指令............................................................................................................19 数据传送指令..............................................................................................................20   MOV............................................................................................................20   MVN............................................................................................................20 算术逻辑运算指令......................................................................................................20   ADD.............................................................................................................20   SUB..............................................................................................................21   RSB..............................................................................................................21   ADC.............................................................................................................21   SBC..............................................................................................................21   RSC..............................................................................................................22   AND.............................................................................................................22   ORR..............................................................................................................22   EOR..............................................................................................................22   BIC...............................................................................................................23 比较指令......................................................................................................................23   CMP.............................................................................................................23   CMN.............................................................................................................23   TST...............................................................................................................24   TEQ..............................................................................................................24 乘法指令......................................................................................................................25   MUL.............................................................................................................25   MLA.............................................................................................................25   UMULL........................................................................................................25   UMLAL........................................................................................................26   SMULL........................................................................................................26   SMLAL........................................................................................................26 ARM跳转指令....................................................................................................................27   B...........................................................................................................................27   BL.........................................................................................................................27   BX........................................................................................................................27 ARM协处理器指令............................................................................................................28   CDP......................................................................................................................28   LDC......................................................................................................................29   STC......................................................................................................................29   MCR.....................................................................................................................30   MRC.....................................................................................................................30 ARM杂项指令....................................................................................................................31   SWI......................................................................................................................31   MRS.....................................................................................................................32   MSR.....................................................................................................................33 ARM伪指令........................................................................................................................34   ADR.....................................................................................................................35   ADRL...................................................................................................................35   LDR......................................................................................................................36   NOP......................................................................................................................37 Thumb指令集.............................................................................................................................39 Thumb指令集与ARM指令集的区别..............................................................................39 Thumb存储器访问指令.....................................................................................................40   LDR和STR........................................................................................................41   PUSH和POP......................................................................................................43   LDMIA和STMIA..............................................................................................43 Thumb数据处理指令.........................................................................................................45 数据传送指令..............................................................................................................46   MOV............................................................................................................46   MVN............................................................................................................46   NEG..............................................................................................................47 算术逻辑运算指令......................................................................................................47   ADD.............................................................................................................47   SUB..............................................................................................................48   ADC.............................................................................................................49   SBC..............................................................................................................49   MUL.............................................................................................................50   AND.............................................................................................................50   ORR..............................................................................................................50   EOR..............................................................................................................51   BIC...............................................................................................................51   ASR..............................................................................................................51   LSL...............................................................................................................52   LSR..............................................................................................................52   ROR..............................................................................................................53 比较指令......................................................................................................................53   CMP.............................................................................................................53   CMN.............................................................................................................54   TST...............................................................................................................54 Thumb跳转指令.........................................................................................................55   B...................................................................................................................55   BL.................................................................................................................55   BX................................................................................................................55 Thumb杂项指令.........................................................................................................56   SWI..............................................................................................................56 Thumb伪指令.............................................................................................................57   ADR.............................................................................................................57   LDR..............................................................................................................57   NOP..............................................................................................................58 伪指令..................................................................................................................................................59 符号定义伪指令..........................................................................................................................59   GBLA、GBLL、GBLS..............................................................................................59   LCLA、LCLL、LCLS................................................................................................60   SETA、SETL、SETS.................................................................................................61   RLIST...........................................................................................................................61   CN................................................................................................................................62   CP.................................................................................................................................62   DN、SN.......................................................................................................................62   FN.................................................................................................................................63 数据定义伪指令..........................................................................................................................63   LTORG.........................................................................................................................64   MAP.............................................................................................................................64   FIELD..........................................................................................................................65   SPACE..........................................................................................................................66   DCB.............................................................................................................................66   DCD和DCDU............................................................................................................67   DCDO..........................................................................................................................67   DCFD和DCFDU........................................................................................................68   DCFS和DCFSU.........................................................................................................68   DCI...............................................................................................................................69   DCQ和DCQU............................................................................................................69   DCW和DCWU..........................................................................................................70 报告伪指令..................................................................................................................................70   ASSERT.......................................................................................................................70   INFO............................................................................................................................71   OPT..............................................................................................................................71   TTL和SUBT..............................................................................................................72 汇编控制伪指令..........................................................................................................................73   IF、ELSE和ENDIF...................................................................................................73   MACRO和MEND.....................................................................................................74   WHIL和WEND.........................................................................................................75 杂项伪指令..................................................................................................................................76   ALIGN.........................................................................................................................77   AREA...........................................................................................................................78   CODE16和CODE32..................................................................................................79   END.............................................................................................................................80   ENTRY.........................................................................................................................80   EQU.............................................................................................................................81   EXPORT和GLOBAL................................................................................................81   IMPORT和EXTERN.................................................................................................82   GET和INCLUDE......................................................................................................83   INCBIN........................................................................................................................83   KEEP............................................................................................................................83   NOFP...........................................................................................................................84   REQUIRE....................................................................................................................84   PEQUIRE8和PRESERVE8.......................................................................................84   RN................................................................................................................................84   ROUT...........................................................................................................................85 ARM伪指令................................................................................................................................86   ADR.............................................................................................................................86   ADRL...........................................................................................................................86   LDR..............................................................................................................................86   NOP..............................................................................................................................86   LDFD...........................................................................................................................86   LDFS............................................................................................................................87 Thumb伪指令.............................................................................................................................87   ADR.............................................................................................................................87   LDR..............................................................................................................................87   NOP..............................................................................................................................88 ARM汇编程序设计............................................................................................................................88 文件格式......................................................................................................................................88 ARM汇编的一些规范................................................................................................................88 汇编语句格式......................................................................................................................88 标号......................................................................................................................................89   基于PC的标号...................................................................................................89   基于寄存器的标号..............................................................................................90   绝对地址..............................................................................................................90 局部标号..............................................................................................................................90 符号......................................................................................................................................91 常量......................................................................................................................................91   数字常数..............................................................................................................91   字符常量..............................................................................................................92   布尔常量..............................................................................................................92 段定义..................................................................................................................................92 宏定义及其作用..................................................................................................................93 子程序的调用..............................................................................................................................94 数据比较跳转..............................................................................................................................95 循环..............................................................................................................................................95 数据块复制..................................................................................................................................95 栈操作..........................................................................................................................................96 特殊寄存器定义及应用..............................................................................................................96 散转功能......................................................................................................................................97 查表操作......................................................................................................................................97 长跳转..........................................................................................................................................97 对信号量的支持..........................................................................................................................98 伪指令使用..................................................................................................................................98 一个完整的例子..........................................................................................................................98 外围部件控制..............................................................................................................................99 三级流水线介绍..........................................................................................................................99 C与汇编混合编程............................................................................................................................100 内嵌汇编....................................................................................................................................100 内嵌汇编的指令用法........................................................................................................103 内嵌汇编器与armasm汇编器的差异.............................................................................104 内嵌汇编注意事项............................................................................................................104 访问全局变量............................................................................................................................106 C与汇编相互调用....................................................................................................................107 寄存器的使用规则............................................................................................................108 堆栈使用规则....................................................................................................................108 参数传递规则....................................................................................................................109 C程序调用汇编程序........................................................................................................110 汇编程序调用C程序.......................................................................................................111 ARM指令集列表..............................................................................................................................113 ARM存储器访问指令表列表..................................................................................................113 ARM数据处理指令列表..........................................................................................................114 ARM乘法指令列表..................................................................................................................115 ARM跳转指令列表..................................................................................................................116 ARM协处理器指令列表..........................................................................................................117 ARM杂项指令列表..................................................................................................................118 ARM伪指令列表......................................................................................................................119 Thumb指令集列表...........................................................................................................................120 Thumb存储器访问指令列表...................................................................................................120 Thumb数据处理指令列表.......................................................................................................121 Thumb跳转指令及软中断指令列表.......................................................................................122 Thumb伪指令列表...................................................................................................................123 汇编预定义变量及伪指令................................................................................................................124 预定义的寄存器和协处理器名................................................................................................124 通用寄存器........................................................................................................................124 程序状态寄存器................................................................................................................124 浮点数寄存器....................................................................................................................124 协处理器及协处理器寄存器............................................................................................125 内置变量列表............................................................................................................................125 伪指令列表................................................................................................................................126 指令条件码列表........................................................................................................................128 CPSR和SPSR分配图.............................................................................................................................129
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值