1、ARM处理器模式
ARM处理器模式共有7种运行模式
用户模式(usr)
快速中断模式(fiq)
外部中断模式(irq)
特权模式(sve)
数据访问中止模式(abt)
未定义指令中止模式(und)
系统模式(sys)
2、ARM寄存器
ARM处理器共有37个寄存器。其中包括:
31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。
6个状态寄存器。这些寄存器都是32位寄存器,但目前只使用了其中12位。
通用寄存器:
可以分为以下3类:
未备份寄存器,包括R0~R7。
备份寄存器,包括R8~R14。
程序计数器PC,即R15。
3、ARM中汇编程序实例之---利用跳转表实现程序跳转 (P163页)
;设置本段程序的名称(Jump)以及属性
AREA Jump,CODE,READONLY
;跳转表中的子程序个数
num EQU 2
;程序执行的入口点
ENTRY
Start
;设置3个参数,然后调用子程序arithfunc,进行算术运算
MOV r0,#0
MOV r1,#3
MOV r2,#2
;调用子程序arithfunc
BL arithfunc
Stop
;
;
;
;
MOV r0,#0x18
LDR r1,=0x20026
SWI 0x123456
;子程序arithfunc入口点
arithfunc
;判断选择子程序的参数是否在有效范围之内
CMP r0,#num
MOVHS pc,lr
;读取跳转表的基地址
ADR r3,JumpTable
;根据参数r0的值跳转到相应的子程序
LDR pc,[r3,r0,LSL#2]
;
;
;r0为0即选择DoAdd或者为1即选择DoSub
;跳转表JumpTable中保存了各个子程序的地址
JumpTable
DCD DoAdd
DCD DoSub
;子程序DoAdd执行加法操作
DoAdd
ADD r0,r1,r2
;从子程序DoAdd返回
MOV pc,lr
;子程序DoSub执行减法操作
DoSub
SUB r0,r1,r2
;从子程序DDoSub返回
MOV pc,lr
;结束汇编
END
4、一些伪操作
①DCD用于分配一段字内存单元(分配的内存都是字对齐的),并用伪操作中的expr初始化之。&是DCD的同义词。DCDU与DCD的不同之处在于DCDU分配的内存单元并不严格字对齐。
②SPACE用于分配一块内存单元,并用0初始化。%是SPACE的同义词。
示例:
Datastruc SPACE 280 ;分配280字节的内存单元,并将内存单元内容初始化成0
③ARM中伪指令不是真正的ARM指令或者Thumb指令,这些伪指令在汇编编译器对源程序进行汇编处理时被替换成对应的ARM或者Thumb指令(序列)。ARM伪指令包括ADR、ADRL、LDR、和NOP。
ADR(小范围的地址读取伪指令)将基于PC的地址值或基于寄存器的地址值读取到寄存器中。
ADRL(中等范围的地址读取伪指令)将基于PC的地址值或基于寄存器的地址值读取到寄存器中。
LDR(大范围的地址读取伪指令)将一个32位常数或者一个地址值读取到寄存器中。
NOP(空操作伪指令)在汇编时将被替换成ARM中的空操作,比如可能为MOV R0和R0等。它不影响CPSR中的条件标志位。
5、参考文献:杜春雷.ARM体系结构与编程[M].北京.清华大学出版社,2003
ARM中汇编程序实例小笔记,布布扣,bubuko.com
ARM中汇编程序实例小笔记
原文:http://blog.csdn.net/u013800219/article/details/21707793