ARM day4 汇编及硬件编程

一、指令--数据从内存到cpu--ldr、str

load -- 加载 读

store -- 存储 写 

在ARM 架构下, 数据从内存到cpu 直接的移动只能通过 LDR/STR来完成 
    mov 只能在寄存器之间移动数据 ,或把立即数移动到寄存器 ,并且数据长度不能超过 8 位

str  r2,  [r0]   //把r2 的数据  存储(写)到 r0 地址      *((int *) r0)  = r2

往右写
ldr  r1, [r0] // 把r0 地址中的数据  加载(读)到 r1 中   r1 = *((int *) r0)

往左读

    三种索引方式:
    LDR R0,[R1, #4]  //r0 = *((int *)(r1 + 4))        只读取数据
    LDR R0,[R1, #4]! // r0 = *((int *)(r1 + 4))  r1 += 4       读取数据且更新r1地址
    LDR R0, [r1],#4  //r0 = *((int *)r1)  r1 += 4         读取数据后更新r1地址?

二、pre or post indexed寻址

 

ldrb存一个数据
ldrh存两个数据
ldr存四个数据

三、stmXX / ldmXX

     stm  ---store  much  多数据存储(写),将寄存器的值 存到地址上 
      ldm   --- load much  多数据加载(读),将地址上的值加载到寄存器

XX有八种类型

IA(increase After )

每次传送后地址加 4 ,寄存器从左到右执行

STMIA  R0, {R1, LR}

//先存R1, 将R0的地址 加上4 再存 LR
LDMIA R0, {r0,r1,r2}

//将r0 地址中的值 逐个写入 寄存器 r0, r1, r2 

IB(increase Before  )每次传送前 地址加 4 ,同上
DA (decrease  After)

每次传送后 地址 减 4寄存器从右往左执行

STMDA R0, {r1, lr}  //先存LR,再存 r1 

DB(decrease  Before)每次传送前 地址减4 ,同上 
FD满递减堆栈

每次传递前 地址减4

(LDMFD--LDMIA    STMFD--STMDB )

FA满递增堆栈

每次传送后地址减4

(LDMFA--LDMDA; STMFA--STMIB)

ED空递减堆栈

每次传送前地址加4

(LDMED--LDMIB; STMED--STMDA)

EA空递增堆栈

每次传送后地址加4

(LDMEA--LDMDB; STMEA--STMIA)

   四种栈        空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出
        满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入;取出时可以直接取出,然后再移动栈指针
        增栈:栈指针移动时向地址增加的方向移动的栈
        减栈:栈指针移动时向地址减小的方向移动的栈

    eg: 一般出栈/入栈
        ldmfd sp!,{r0,r1,r2}   //将sp中值逐个写入到寄存器r0 R1 R2中
        stmfd sp!,{r0,r1,r2}   //将寄存器r0 R1 R2中逐个写入到sp中

重要:异常处理

        ldmfd sp!,{r0-r12,pc}^ --- 出栈 恢复现场
        stmfd sp!,{r0-r12,lr}  --- 入栈 保护现场

    SP后面的!表示要更新sp的值 sp -= n
    ^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。

四、中断和异常

异常的定义芯片内部的调度
异常(exception  )机制处理器,顺序执行程序指令的过程中,突然遇到异常的事情,而中止执行的当前程序,转而去处理异常。 
异常与中断的最大区别

中断--外部因素引起  异常--内部因素引起

(内因:本身硬件故障,程序故障,非法指令,或执行等特殊的系统服务指令等引起的)

异常源

 

    1、复位异常 reset
    2、数据异常   data abort
    3、FIQ 异常   fiq 
    4、IRQ 异常   irq
    5、预取指 异常    prefetch abort 
    6、软中断 异常    swi 
    7、未定义指令异常   undefined  instruction 

异常优先级

    异常优先级{
            异常在当前指令完成后才会被响应
            多个异常 在同一时间产生
            异常指定优先级和固定服务顺序(从高到低 )
    }

为什么FIQ的响应速度比IRQ快?

FIQ优先级更高

FIQ向量位于异常向量表的最末,异常处理程序可以从异常量处连续执行

FIQ有五个额外的私有寄存器,中断处理必须保护其使用的非私有寄存器

异常处理过程

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239669.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA 移位运算与乘法

题目: 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效) 由题意可知: 复位信号高有效,低复位;在inpu_grant上升…

C++基础1

一、形参带默认值的函数 二、inline内联函数 内联函数是一种在编译器处理时,将函数的实际代码插入到调用处的方法。通常,函数调用涉及一定的开销,包括保存和恢复调用现场、跳转到函数的代码位置等。而内联函数通过在调用处直接插入函数的代码…

MySQL-多表联合查询

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…

【笔记】认识电机

认识电机 电机一些概念永磁同步电机永磁体定子和转子励磁电磁感应定律 AC Optimal Power Flow功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右Smart…

说清楚Kubernetes、Docker、Dockershim、Containerd、runC、CRI、OCI的关系

Kubernetes v1.20版本 的 release note 里说 deprecated docker。并且在后续版本 v1.24 正式删除了 dockershim 组件,这对我们有什么影响呢?Kubernetes 1.20: The Raddest Release | Kubernetes 为了搞明白这件事情,以及理解一系列容器名词 …

JDK8-JDK17版本升级

局部变量类型推断 switch表达式 文本块 Records 记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类,但代码少得多;大多数开发人员使用 Lombok 生成 POJO 类,但是有了记录,你就不需要使…

【MATLAB】 HANTS滤波算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 HANTS滤波算法是一种时间序列谐波分析方法,它综合了平滑和滤波两种方法,能够充分利用遥感图像存在时间性和空间性的特点,将其空间上的分布规律和时间上的变化规律联系起来…

MySQL——性能优化与关系型数据库

文章目录 什么是性能?什么是关系型数据库?数据库设计范式 常见的数据库SQL语言结构化查询语言的六个部分版本 MySQL数据库故事历史版本5.6/5.7差异5.7/8.0差异 什么是性能? 吞吐与延迟:有些结论是反直觉的,指导我们关…

【MySQL】mysql集群

文章目录 一、mysql日志错误日志查询日志二进制日志慢查询日志redo log和undo log 二、mysql集群主从复制原理介绍配置命令 读写分离原理介绍配置命令 三、mysql分库分表垂直拆分水平拆分 一、mysql日志 MySQL日志 是记录 MySQL 数据库系统运行过程中不同事件和操作的信息的文件…

mysql数据库优化

数据库的性能调优和优化是指通过优化数据库结构、SQL语句的编写以及服务器硬件和操作系统等方面的配置,来提高数据库的响应速度和稳定性,以满足业务需求。 结合实际需求,从以下四个方面进行讲解。 一、数据库设计优化 二、SQL语句优化 三、…

Dockerfile的ADD和COPY

文章目录 环境ADD规则校验远程文件checksum添加Git仓库添加私有Git仓库ADD --link COPYCOPY --parent 使用ADD还是COPY&#xff1f;参考 环境 RHEL 9.3Docker Community 24.0.7 ADD ADD 指令把 <src> 的文件、目录、或URL链接的文件复制到 <dest> 。 ADD 有两种…

将图片添加到 PDF 的 5 种方法

需要一种称为 PDF 编辑器的特定工具才能将图片添加到 PDF。尽管大多数浏览器在查看和注释 PDF 文件方面都非常出色&#xff0c;但如果您使用图像到 PDF 技术&#xff0c;则只能将照片放入 PDF 中。无需修改即可将 PDF 文件恢复为原始格式的能力是使用此类软件程序甚至在线服务的…

基于Matlab/Simulink开发自动驾驶的解决方案

文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶&#xff0c;能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能&#xff0c;从而推进自动驾驶感…

基于ssm的线上旅游体验系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现

安防视频监控EasyCVR系统具备较强的兼容性&#xff0c;它可以支持国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…

05.neuvector网络学习与管控实现

原文链接&#xff0c;欢迎大家关注我的github 一、网络的策略学习 1.1.非主机模式的网络连接学习 agent进程侧&#xff1a; 调用taskAddContainer->taskInterceptContainer->programDP->DPCtrlAddTapPort为所有非host模式的容器向dp传送 DPAddTapPortReq对象数据.&…

第 3 场 蓝桥杯小白入门赛 解题报告 | 珂学家 | 单调队列优化的DP + 三指针滑窗

前言 整体评价 T5, T6有点意思&#xff0c;这场小白入门场&#xff0c;好像没真正意义上的签到&#xff0c;整体感觉是这样。 A. 召唤神坤 思路: 前后缀拆解 #include <iostream> #include <algorithm> #include <vector> using namespace std;int main()…

爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数

爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数 豆瓣电影网址&#xff1a;https://movie.douban.com/top250 主页截图和要抓取的内容如下图&#xff1a; 分析&#xff1a; 第一页的网址&#xff1a;https://movie.douban.com/top250?start0&filter 第二页的…

时间差异导致数据缺失,如何调整Grafana时间与Prometheus保持同步?

Grafana时间如何调快或调慢&#xff1f; 在k8s环境中&#xff0c;常使用prometheusgrafana做监控组件&#xff0c;prometheus负责采集、存储数据&#xff0c;grafana负责监控数据的可视化。 在实际的使用中&#xff0c;有时会遇到这样的问题&#xff0c;k8s集群中的时间比真实…

unity C#中使用ref、out区别和使用案例

文章目录 ref 关键字out 关键字 在Unity&#xff08;以及C#编程语言中&#xff09;&#xff0c; ref 和 out 都是用来传递参数的引用&#xff0c;这意味着它们允许函数修改实参变量&#xff0c;并且这些修改会反映到调用函数的地方。但它们之间确实存在一些关键区别和使用场景…