Arm汇编指令集2
什么是协处理器:
SoC内部另一处理核心,协助CPU实现某些功能,被主CPU调用执行一定任务。
ARM设计上支持16个协处理器,但是一般SoC只实现其中的CP15(cp就是cooperation processor)。
协处理器和MMU、cache、TLB等处理有关,功能上和操作系统的虚拟地址映射、cache管理有关。
协处理器cp15操作指令:mcr & mrc
mrc用于读取cp15中的寄存器
mcr用于写入cp15中的寄存器
多寄存器访问指令:
ldr/str每周期只能访问4字节的内存,如果需要批量读取,写入内存时太慢,解决方案是stm/ldm
ldm (load register mutiple)
stm(store register mutiple)
比如:
stmia sp,{r0-r12}
将r0存入sp指向的内存处(假设为0x30001000);然后地址+4(指向0x30001004),将r1存入该地址;然后地址再+4(指向0x30001008),将r2存入该地址......直到r12内容放入(0x30001030),指令完成。
一个访存周期同时完成13个寄存器的读写。
主要还有这个ia这个后缀
ia(increase after)先传输,再地址+4
ib(increase before)先地址+4,再传输
da(decrease after)先传输,再地址-4
db(decrease before)先地址-4,再传输
fd(full decrease)满递减堆栈
ed(empty decrease)空递减堆栈
fa(……)满递增堆栈
ea(……)空递增堆栈
四种栈:
空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出。
满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入,取出时可以直接取出,然后在移动栈指针。
增栈:栈指针移动时像地址增加的方向移动的栈。
减栈:栈指针移动时向地址减小的方向移动的栈。
!的作用
ldmia r0,{r2-r3}
ldmia r0! ,{r2-r3}
感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。
^的作用
ldmfd sp!,{r0-r6,pc}
ldmfd sp!,{r0-r6,pc}^
^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr。一般用于从异常模式返回。
Arm汇编指令集2的更多相关文章
- ARM汇编指令集_学习笔记(1)
一.什么是ARM汇编? 运行在ARM处理器上的汇编语言就叫ARM汇编. C程序运行在X86平台,底层就是X86汇编:运行在ARM平台,底层就是ARM汇编.ARM汇编与X86汇编有显著区别. X86属于 ...
- ARM汇编指令集3
常用ARM指令1:数据处理指令 •数据传输指令 mov mvn mov r1, r0 @两个寄存器之间数据传递 mov r1, #0xff ...
- ARM汇编指令集1
(汇编)指令是CPU机器指令的助记符,经过编译过会得到一串0011组成的机器码,可以由CPU读取执行. (汇编)伪指令本质不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译 ...
- ARM汇编指令集
一.跳转指令.跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转. Ⅰ.使用专门的跳转指令.Ⅱ.直接向程序计数器PC写入跳转地址值. 通过向程序计数器PC写入跳转地址值 ...
- ARM 汇编指令集 特点5:ARM 多级指令流水线
1.为增加处理器指令流 的速度,ARM使用多级流水线. 就是举个例子: mov r1,#0 ,这条指令 分几个人做,一个人从存储器取指令,解码指令中用到的寄存器,寄存器运算. 这样三步 :如果一个人做 ...
- ARM汇编指令集4
协处理器cp15操作指令: mcr & mrc •mrc用于读取CP15中的寄存器 •mcr用于写入CP15中的寄存器 什么是协处理器? •SoC内部另一处理核心,协助主CPU实现某些功能 ...
- ARM 汇编指令集 特点之一:条件执行后缀
mov r0,r1; moveq r0,r1;//这句代码是否执行 取决于 上几句代码 的运行结果(最后一次CPSR 寄存器 的 高四位 NZCV 的标志位) 条件后缀执行特点:1.条件后缀执行是 ...
- ARM 汇编指令集 特点之一:指令后缀
1.同一 指令 添加不同的后缀 就会有不同的功能! 例子: B (Byte) 功能不变,操作长度变为8位 H (Half Word) 功能不变,操作长度变为16位 S(Signed) 功能不变,操作 ...
- ARM汇编指令集5
为什么需要多寄存器访问指令? ldr/str每周期只能访问4字节内存,如果需要批量读取.写入内存时太慢,解决方案是stm/ld 举例(uboot start.S 537行) stmia sp, ...
随机推荐
- three.js效果之热力图和轨迹线
1.热力图 开始的时候,是用一个网上找的canvas画渐变热点的demo,原理就是给定顶点坐标,然后画圆,颜色使用渐变色,根据权重决定渐变的层数(红色->橙色->绿色) . 但是终究觉得这 ...
- Django:(02)项目配置
上一篇我们创建了一个Django项目,并且让它运行了起来了. 当是,我们还没有使用到我们创建的应用,以及templates模版目录. 需求: 在此之前我们根据需要对我们的项目进行配置修改. 在项目开发 ...
- Fabric1.4 链码开发,开发模式下的测试
关闭之前已启动的网络环境 sudo docker-compose -f docker-compose-cli.yaml down 进入devmode目录: cd ~/go/src/github.co ...
- Kafka Connector无法启动的原因
如图:启动Connector的时候一直提示报错. 后面找了一下网上发现原因, 基本原因就是Kafka的lib包和插件包都添加到ClassPath里面了 而这两地方都有Kafka-Client的jar包 ...
- JS自适应导航栏,菜单栏
1. 打开 https://github.com/VPenkov/okayNav下载源代码 2.引入两个css样式 <link rel="stylesheet" href=& ...
- JAVA汽车4S店管理系统
JAVA汽车4S店管理系统源码(前台+后台)分为这5个大模块 系统设置 整车销售辅助销售汽修管理 汽修统计1.经理管理(增加 和删除功能) 表设计经理编号经理名年龄性别2.业务员管理(增删改查) ...
- 老贾的幸福生活day 04
变量 变量名的规则: 变量名由字母,数字,下划线组成 变量名不能以数字开头 变量名要具有可描述性 变量名要区分大小写 变量名禁止使用python关键字 变量名不能使用中文和拼音 变量名推荐写法: 驼峰 ...
- 从入门到自闭之Python--Django Rest_Framework
核心思想: 缩减编写api接口的代码 Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用.在REST framew ...
- HORSE PILL--一种新型的linux rootkit
资料 ppt:https://www.blackhat.com/docs/us-16/materials/us-16-Leibowitz-Horse-Pill-A-New-Type-Of-Linux- ...
- 使用SQL语句查询Elasticsearch索引数据
Elasticsearch 的官方查询语言是 Query DSL,存在毕竟有存在的道理,存在即合理.SQL 作为一个数据库查询语言,它语法简洁,书写方便而且大部分服务端程序员都清楚了解和熟知它的写法. ...