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.mfbz.cn/a/327711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 设计模式之策略模式

【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【设计模式大纲】 【简介】什么是策略模式(第14种模式) 策略模式是⼀种⾏为型设计模式&…

解决BigDecimal序列化科学计数法前端展示问题(大坑)

解决BigDecimal序列化科学计数法前端展示问题(大坑) 前言:在生产中出现一个问题,就是BigDecimal类型的字段在前端页面展示变成科学计数法,通过排查,发现里面的坑还是挺多的,所以特意记录下处理过程。Json序列化&#x…

使用dbever连接 hsqldb

完整的url为 jdbc:hsqldb:hsql://ip:端口/别名 注意,hsqldb跟随应用启动和停止,所以当应用断点时,hsqldb也会连接不上导致查询数据失败,可以断点前进一步

Angular系列教程之路由守卫

文章目录 前言路由守卫的类型CanLoadCanActivateCanActivateChildCanDeactivateResolve总结 前言 在Angular中,路由守卫是一个非常有用的功能,可以帮助我们控制用户在导航过程中的权限和访问限制。通过使用路由守卫,我们可以拦截导航并根据需…

Mybatis 常用条件语句,大于小于、if、for、模糊搜索、case when、choose

大于小于 方法1&#xff1a; > 大于 &#xff0c; < 小于 <if test"startTime ! null ">and a.create_time > #{startTime} </if> <if test"endTime ! null ">and a.create_time < #{endTime} </if> 方法2(建议写这…

Macbook空间不足怎么解决?

随着使用时间的增长&#xff0c;我们会发现Mac电脑的存储空间越来越少&#xff0c;这时候我们就需要对Mac电脑进行清理&#xff0c;以释放更多的存储空间。那么&#xff0c;Mac空间不足怎么解决呢&#xff1f; 1.清理垃圾文件 Mac空间不足怎么解决&#xff1f;首先要做的就是清…

图像表示方法

RGB表示 RGB是使用三基色合成的原理&#xff0c;我们看到的彩色图片&#xff0c;都有三个通道&#xff0c;分别为红、绿、蓝通道&#xff0c;如果需要透明度则还有alpha分量. 通常每个通道用8bit表示&#xff0c;8bit能表示256种颜色&#xff0c;所以可以组成 256256256167772…

Vue 如何把computed里的逻辑提取出来

借用一下百度的ai 项目使用&#xff1a; vue 文件引入 <sidebar-itemv-for"route in routes":key"route.menuCode":item"route":base-path"route.path"click"onColor"/>import { handleroutes } from "./handle…

分布式搜索引擎ElasticSearch——基础

分布式搜索引擎ElasticSearch——基础 文章目录 分布式搜索引擎ElasticSearch——基础初识elasticsearch什么是elasticsearchelasticsearch的发展正向索引和倒排索引安装elasticsearch&#xff0c;kibana部署单点es创建网络加载镜像运行 部署kibana部署DevTools 安装IK分词器在…

力扣白嫖日记(sql)

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 175.组合两个表 表&#xff1a;Courses 列名类型studentvarcharclassvarchar 在 SQL 中&#xff0c;(stude…

物流信息管理系统的设计与实现:从数据库到前端的全流程解析

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

CSS3中多列布局详解

多列布局 概念&#xff1a;在CSS3之前&#xff0c;想要设计类似报纸那样的多列布局&#xff0c;有两种方式可以实现&#xff1a;一种是"浮动布局"&#xff0c;另一种是“定位布局”。 这两种方式都有缺点&#xff1a;浮动布局比较灵活&#xff0c;但不容易控制&…

vue3__Provide / Inject (依赖注入)和mixins

一、 Provide提供和Inject 注入 Provide提供 <script setup> import { provide } from vueprovide(/* 注入名 */ message, /* 值 */ hello!) </script> 例如父组件中提供方法 <template> <div class"home">dfhualsf<div><button…

npm link 后怎么查看软连接和删除软连接的

一&#xff1a;在你的npm项目中&#xff0c;进行打包&#xff0c;形成一个dist文件 npm run build // 这是我的打包命令&#xff0c;具体可查看 package.json 文件 二&#xff1a; 打包完成后&#xff0c;运行pwd命令&#xff0c;可查看到你npm项目的路径。 pwd // 输出一…

FFMPEG解码实时流,支持cpu、gpu解码

官网下载的ffmpeg目前只能下载到X64版本的库&#xff0c;具体编译请参考windows编译ffmpeg源码&#xff08;32位库&#xff09;_windows 32位ffmpeg动态库-CSDN博客 直接上代码 int VideoDecodeModule::Open(std::string strUrl) {AVFormatContext *pFormatCtx nullptr;AVCo…

Next.js 开发指​南(GitHub 115k star​)

Next.js 是一个构建于 Node.js 之上的开源 Web 开发框架&#xff0c;它扩展了最新的 React 特性&#xff0c;集成了基于 Rust 的 JavaScript 工具&#xff0c;可以帮助你快速创建全栈 Web 应用 &#xff08;full-stack Web applications&#xff09; 。 对于有一定 React 基础…

虚拟机 以及 Centos 7的 安装全过程

目录 安装VMwere Workstion 虚拟机的操作过程 CentOS 7 安装过程 install CentOS 7 安装操作系统 安装VMwere Workstion 虚拟机的操作过程 更改安装位置 到下面图片中的这一个步骤&#xff0c;可以点击许可证&#xff0c;输入密钥就可以使用了&#xff0c; 密钥可以去某度或…

网络安全B模块(笔记详解)- 文件包含

文件包含的渗透与加固 1.使用渗透机场景kali中工具扫描服务器,将服务器上 File Inclusion首页概述页中的Flag提交; Flag:iloveu 2.使用渗透机场景windows7访问服务器场景网站中的File Inclusion(local)页面,找到根目录下Flag文件夹下的Flag.txt文件并将其内容提交; Flag:…

Linux中SSH远程管理服务

一、SSH服务 1.1.什么是SSH服务器&#xff1f; SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#…

回环检测算法:Stable Trangle Descriptor

回环检测是指检测传感器的两次测量&#xff08;如图像、激光雷达扫描&#xff09;是否发生在同一场景&#xff0c;它是对于SLAM问题至关重要。基于激光雷达的回环检测应该满足如下要求&#xff1a; 无论视点如何变化&#xff0c;回环检测方法应该实现旋转和平移不变性&#xf…
最新文章