首页 > 其他 > 详细

ARM中汇编程序实例小笔记

时间:2014-03-21 14:57:03      阅读:535      评论:0      收藏:0      [点我收藏+]
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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!