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中汇编程序实例小笔记相关推荐

  1. ps中的实例小学习——初学抠图及蒙版

    选区抠图: 1.将图片中的圆形抠出来: (步骤:选择椭圆选区--在圆形区域选择一小部分--(按住alt+shift键,然后调节大小)(也可理解为:按住alt键使选区变大--(前面的alt键不可松掉)在 ...

  2. linux数据包注释,关于 linux中TCP数据包(SKB)序列号的小笔记

    关于  SKB序列号的小笔记 为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq  一直没有找到seq 不清楚在那里初始化了,就 ...

  3. [小笔记]TypeScript/JavaScript模拟Python中的Range函数

    [小笔记]TypeScript/JavaScript 模拟Python中的Range函数 李俊才/CSDN博客 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢 ...

  4. ARM中C语言和汇编语言互相调用以及实例

    1.内联汇编 在C语言中内嵌汇编注意事项: 不能直接向PC寄存器赋值,程序跳转要使用B或者BL指令 在使用物理寄存器时,不要使用过于复杂的C表达式(比如ADD y,R0 ,x/y(无形中就是c语言表达 ...

  5. Android实例剖析笔记(四)

    摘要:分析NoteEditor这个类和以及Content Provider机制 NoteEditor深入分析 首先来弄清楚"日志编辑"的状态转换,通过上篇文章的方法来做下面这样一个 ...

  6. ARM中的---汇编指令

    ARM中的---汇编指令 一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是 ...

  7. 关于在ARM中的函数调用问题

    本人菜鸟一只,最近在学习arm汇编,做一个关于函数调用的笔记,如果有出错的地方希望大牛们指出. 以下汇编代码均为MDK5所生成的 首先看一个简单的例子 int main(void) { int a=1 ...

  8. 用一个月面试了 大厂,中厂,小厂的总结|2021 年中总结

    推荐:两年前端程序媛从0到18k的逆袭之路 | 2021年中总结 image.png 求点赞+求分享+求评论,哦耶!!!(基本工资有一部分花在付费学习上) (文末有彩蛋...).一个朋友,面试的小哥, ...

  9. 一个月面试大厂,中厂,小厂的总结|2021 年中总结

    一个朋友,面试的小哥,每天早晨六点起床学习,三本两年多经验拿了年包 50w 的 offer.某大佬: 你看很多,校招24k白菜价,谁又拿了大厂的offer.你会发现,他们不但学历高,而且都十分的努力. ...

最新文章

  1. python numpy数组和one-hot编码相互转换
  2. 关于 Workbench中 pk,nn,uq,bin,un,zf,ai 的解释
  3. PAT甲级1142 Maximal Clique :[C++题解]图论、最大团、枚举
  4. 金蝶记账王无法打开智能卡注册页面怎么办
  5. epoll 边沿触发(ET 模式)和水平触发(LT 模式)
  6. mysql 分类_MYSQL数据类型分类
  7. bootstrap 导航菜单 折叠位置_下拉菜单的讲究
  8. Android 使用代码设置selector 的图片或文字颜色
  9. Swift学习笔记 In-out形参
  10. 6.5移相器(Phasers)
  11. idea使用数据库连接工具
  12. html5简单在线绘图,html5实现一个简单的在线画板
  13. 我对kvm,qemu,vmware,xen,virtualbox等虚拟化产品的简单理解
  14. M2BEV:采用统一BEV表征的多摄像头联合3D检测分割
  15. 【MobileViT】
  16. 速读原著-UnixLinux基础(七)
  17. 计算机硬盘优化策略,如何让机械硬盘更快,几个优化提升机械硬盘速度!
  18. 力扣347:前k个高频元素---leetcode347:Top K Frequent Elements
  19. mysql数据迁移与同步常用解决方案总结
  20. 辞职一年后,我来谈谈30多岁中年人的转型

热门文章

  1. web前端——table标签
  2. 使用python matplotlib画二维图,设置坐标轴刻度和colorbar刻度ticks
  3. Python中xlrd操作excel单元格
  4. 投影仪家用推荐最新?投影仪便宜又好用的
  5. 嚼得菜根做得大事·《菜根谭》·六
  6. 类型“XXX”违反了继承安全性规则。派生类型必须与基类型的安全可访问性匹配或者比基类型的安全可访问性低。...
  7. 公司想辞退的你六种表现,你get到了么?
  8. Python保存数据到Excel文件
  9. 淘宝店铺网络营销赢家手册
  10. 计算机中恢复是什么的反操作,word文档恢复在哪里