ARM中专用指令(异常向量表、异常源、异常返回等)

状态寄存器传送指令

  • CPSR寄存器
    状态寄存器传送指令:访问(读写)CPSR寄存器
    @ 读CPSR
    @ MRS R1, CPSR
    @ R1 = CPSR
    @ 写CPSR
    @ MSR CPSR, #0x10 @0x10为User模式,且开启IRQ和FRQ
    @ CPSR = 0x10
    @ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
    @ MSR CPSR, #0xD3

软中断指令

  • ARM异常源
    在这里插入图片描述

  • ARM异常模式
    在这里插入图片描述

  • 异常向量表在这里插入图片描述

  • ARM异常响应
    在这里插入图片描述

  • 异常返回
    在这里插入图片描述

  • 异常响应代码如下:
    状态寄存器传送指令:访问(读写)CPSR寄存器
    @ 读CPSR
    @ MRS R1, CPSR
    @ R1 = CPSR
    @ 写CPSR
    @ MSR CPSR, #0x10 @0x10为User模式,且开启IRQ和FRQ
    @ CPSR = 0x10
    @ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
    @ MSR CPSR, #0xD3
    @ 1.5 软中断指令:触发软中断
    @ 异常向量表
    @ B MAIN
    @ B .
    @ B SWI_HANDLER
    @ B .
    @ B .
    @ B .
    @ B .
    @ B .
    @ 应用程序
    @ MAIN:
    @ MOV SP, #0x40000020
    @ 初始化SVC模式下的栈指针
    @ MSR CPSR, #0x10
    @ 切换成USER模式,开启FIQ、IRQ
    @ MOV R1, #1
    @ MOV R2, #2
    @ SWI #1
    @ 触发软中断异常
    @ ADD R3, R2, R1
    @ B STOP
    @ 异常处理程序
    @ SWI_HANDLER:
    @ STMFD SP!,{R1,R2,LR}
    @ 压栈保护现场
    @ MOV R1, #10
    @ MOV R2, #20
    @ SUB R3, R2, R1
    @ LDMFD SP!,{R1,R2,PC}^
    @ 出栈恢复现场
    @ 将压入到栈中的LR(返回地址)出栈给PC,实现程序的返回
    @ ‘^’表示出栈的同时将SPSR的值传递给CPSR,实现CPU状态的恢复

协处理器指令

  • 协处理器指令:操控协处理器的指令
    @ 1.协处理器数据运算指令
    @ CDP
    @ 2.协处理器存储器访问指令
    @ STC 将协处理器中的数据写入到存储器
    @ LDC 将存储器中的数据读取到协处理器
    @ 3.协处理器寄存器传送指令
    @ MRC 将协处理器中寄存器中的数据传送到ARM处理器中的寄存器
    @ MCR 将ARM处理器中寄存器中的数据传送到协处理器中的寄存器

伪指令

  • 伪指令:本身不是指令,编译器可以将其替换成若干条等效指令
    @ 空指令
    @ NOP
    @ 指令
    @ LDR R1, [R2]
    @ 将R2指向的内存空间中的数据读取到R1寄存器
    @ 伪指令
    @ LDR R1, =0x12345678
    @ R1 = 0x12345678
    @ LDR伪指令可以将任意一个32位的数据放到一个寄存器
    @ LDR R1, =STOP
    @ 将STOP表示的地址写入R1寄存器
    @ LDR R1, STOP
    @ 将STOP地址中的内容写入R1寄存器

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

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

相关文章

7.使用os.Args或flag解析命令行参数

文章目录 一、os.Args二、flag包基本使用 Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 一、os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。 package mainimp…

数据伪列

目录 数据伪列 rownum 查询 emp 表中的记录并且取得第一行数据 取得 emp 表的前 5 行记录 rowid 面试题:表中有许多完全重复的数据,要求将重复的数据删除掉(只剩最早的一个) Oracle从入门到总裁:https://blog.csdn.net/weixin…

图像检索与识别——词袋模型(Bag-of-features models)

一、定义 计算机视觉单词袋是一种描述计算图像之间相似度的技术,常用于用于图像分类当中。该方法起源于文本检索(信息检索),是对NLP“单词袋”算法的扩展。在“单词袋”中,我们扫描整个文档,并保留文档中出…

Axure 入门文档 文件格式 全局样式 元件居中

文件格式 .rp 原型文件.rplib:元件库文件.rpteam 团队项目文件.html 项目网页文件 批量设置居中 选中多个,然后上方任务栏即可设置 设置自定义页面视图尺寸 项目-自适应视图设置 点击页面空白处就可以使用 添加元件说明 当一个元件创建好,可以设…

java spring 02. AbstractApplicationContext的refresh

spring创建对象的顺序,先创建beanfactory,再会把xml文件读取到spring。 public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, Nullable ApplicationContext parent)throws BeansException {//调用父类的构造方法super(p…

MQTT连接阿里云物联网上报物模型数据

目录 1. 创建产品(物联网平台 -> 产品 -> 创建产品) 2. 为产品添加设备 3. 添加物模型 4. mqtt.fx连接测试 5. 调试物模型 6. 使用mqtt.fx上报温度数据 1. 创建产品(物联网平台 -> 产品 -> 创建产品) 我这里再新…

⭐每天一道leetcode:35.搜索插入位置(简单;二分速查)

⭐今日份题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例1 输入: nums [1,3,5,6], target 5 输出: 2 …

网络学习:Vlan间路由

目录 一、vlan间路由实现的方法 二、精确匹配转发(交换机)流程 三、最长匹配转发(路由器) 四、交换机最长匹配转发 五、总结 一、vlan间路由实现的方法 方法1:使用路由器的物理接口 特点:在路由器上…

ETAS工具链ISOLAR-AB重要概念,RTE配置,ECU抽取

RTE配置界面,包含ECU抽取关联 首次配置RTE,出现需要勾选的抽取EXTRACT 创建System System制作SWC到ECU的Mapping System制作System Data 的Mapping

Redis--线程模型详解

Redis线程模型 Redis内部使用的文件事件处理器(基于Reactor模式开发的)file event handler是单线程的,所以Redis线程模型才叫单线程模型,它采用IO多路复用机制同时监听多个socket,当被监听的socket准备好执行accep、r…

就业班 2401--3.6 Linux Day12--计划任务和邮件和ssh远程连接

一、计划任务 计划任务概念解析 在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。RHEL6系统中默认已安装了at、crontab软件…

如何在控制台重新发送请求、修改请求参数

场景一:重新请求接口 - 鼠标右键点击请求,选择重放XHR - 可以看到重新发起了一次请求 注意:重放XHR不会重新渲染页面数据,只是单纯的请求接口 场景二:修改接口参数 - 右键鼠标右键点击接口、选择复制、选择以fetc…

Scrapy与分布式开发(3):Scrapy核心组件与运行机制

Scrapy核心组件与运行机制 引言 这一章开始讲解Scrapy核心组件的功能与作用,通过流程图了解整体的运行机制,然后了解它的安装与项目创建,为后续实战做好准备。 Scrapy定义 Scrapy是一个为了爬取网站数据、提取结构性数据而编写的应用框架…

【C++精简版回顾】20.模板的使用

1.模板起源 1.模板的定义 1.针对函数属性模板 //针对函数属性 template <class VOID > VOID print1(int a) {cout << a << endl; } 2.针对数据属性模板 //针对数据属性 template <typename INT,typename FLOAT> void print2(INT a,FLOAT b) {cout <…

win11配置Mask DINO小白踩坑记录

win11配置Mask DINO踩坑记录 1 准备工作2 创建python环境和安装detectron22.1 安装前提2.2 安装流程2.2.1 cl.exe的错误2.2.2 SetuptoolsDeprecationWarning的错误 3 MaskDINO运行3.1 运行demo 前情提要&#xff1a;需要复现Mask DINO&#xff0c;但是实验室没有Linux的电脑&am…

Tomcat基础与Nginx的动静分离

一、TOMCAT基础功能 &#xff08;一&#xff09;自动解压war包 在配置文件中讲到&#xff0c;当接受到请求后&#xff0c;会匹配符合要求的Host&#xff0c;在配置文件中的Host只有一个&#xff0c;且规定了自动解压war包 自动解压war包 .war&#xff1a;WebApp打包,类zip格…

领腾讯云红包,可抵扣云服务器订单金额

在2024年腾讯云新春采购节优惠活动上&#xff0c;可以领取新年惊喜红包&#xff0c;打开活动链接 https://curl.qcloud.com/oRMoSucP 会自动弹出红包领取窗口&#xff0c;如下图&#xff1a; 腾讯云2024新春采购节红包领取 如上图所示&#xff0c;点击“领”红包&#xff0c;每…

Matlab梁单元有限元编程 | 铁木辛柯梁 | 欧拉梁 | Matlab源码 | 理论文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

SPI 接口

SPI 接口 SPI 简介寻址方式通信过程极性和相位IIC 和 SPI 的异同相同点不同点 SPI 简介 SPI&#xff08;Serial Peripheral Interface&#xff09;是串行外设接口的缩写&#xff0c;SPI是一种高速的、全双工、同步的串行通信总线&#xff1b;SPI采用主从方式工作&#xff0c;一…

一篇了解电容的使用

目录 一、电容理论基础 1.电容的本质 2.电容量的大小 &#xff08;1&#xff09;电容的单位 &#xff08;2&#xff09;电容量的决定式 3.电容的特点 4.电容的串并联 5.电容器的类型 6.电容实际的电路模型 二、电容器的选型 1.安装方式 2.电容值 3.电容的类型 4…