ARM的状态传送器指令、软中断指令与协处理指令(软中断具体实现)

news2024/11/28 14:33:55

1.状态寄存器传送指令:

作用:访问(读写)CPSR寄存器

CPSR寄存器结构图:

前八位的作用:

Bit[4:0] :不同的电平组合表示不同的模式,[10000]User    [10001]FIQ     [10010]IRQ     [10011]SVC     [10111]Abort   [11011]Undef   [11111]System  [10110]Monitor  

Bit[5]:[0]ARM状态     [1]Thumb状态  

Bit[6]:[0]开启FIQ     [1]禁止FIQ  

Bit[7]:[0]开启IRQ     [1]禁止IRQ
 

我们知道cpsr寄存器的数据表示当前程序处于什么状态,如果我们想人为更改其模式或者知道当前程序处于什么模式,我们可使用以下两个指令:

  • MRS指令:读CPSR
  • MSR指令:写CPSR

在汇编程序刚启动时,CPSR中存放的数据为0xD3,转换成二进制数就是11010011,在与上图的前八位一一对应后得知此时程序处于SVC模式,并且禁止了FIQ中断和IRQ中断,因为在刚开始启动时系统需要做初始化,这时候是不想让其他的中断去打断系统初始化这个操作的,所以此时CPSR中存放的数据为0xD3,当初始化完成后我们就可以使用指令来更改其数据,具体操作如下:

        @ 读CPSR
		@ MRS R1, CPSR
        @将CPSR中的数据读到R1中,等价于R1 = CPSR
		
		@ 写CPSR
		@ MSR CPSR, #0x10
        @将0x10写入CPSR中,通过文章开始的图经计算得知0x10为user模式,等价于CPSR = 0x10	
		@ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
        @此时在此执行下面的写指令,CPSR的值将不会改变
		@ MSR CPSR, #0xD3

再次强调,在user模式下CPSR的值是不允许被改变的,一般c语言的程序在汇编时的权限就是user

2.软中断指令

SWI:触发一次软中断

异常向量表:

 

具体使用如下(软中断的具体处理过程在代码中):

@ 异常向量表
		@ B MAIN  
        @ 位置为0x00,每一条指令会使这个值+4

		@ B .
        @ 0x04

		@ B SWI_HANDLER
        @0x08

		@ B .
		@ B .
		@ B .
		@ B .
		@ B .
		
		@ 应用程序
@ MAIN:
		@ MOV SP, #0x40000020
		@ 初始化SVC模式下的栈指针

		@ MSR CPSR, #0x10
		@ 切换成USER模式,开启FIQ、IRQ

		@ MOV R1, #1
		@ MOV R2, #2

		@ SWI #1
		@ 触发软中断异常,其第二操作数可以是随便一个立即数

        @***************************软中断处理过程*******************************
        @ 在软中断触发后,程序会进行异常处理操作,PC中的数据会变成异常向量表中SWI的位置
        @ 也就是0x08,而此时0x08这个地址中可能存放着之前的指令从而导致异常处理无法执行
        @ 所以我们在汇编的开始需要将0x08这个地址存放异常程序处理函数的入口
        @ 所以我们可以再汇编开始时写几条指令来代表异常向量表,
        @ 因为我们默认了汇编开始的位置为0x00000000,且异常向量表中的复位对应的位置也是0x00,
        @ 在ARM中每条指令占四个字节,所以我们可以再开始时使其跳转到主函数MAIN
        @ 这时候0x00这个地址指向的指令就是B MAIN也就是跳转指令,
        @ 我们就可以使用多个跳转命令使得我们自创的异常向量表种每个位置都与异常向量表中的对应
        @ 使其能跳转到对应的异常处理函数
        @ 因为SWI异常在异常向量表中存在于0x08这个位置
        @ 所以我们汇编程序的0x08地址应该为SWI异常处理的位置
        @ 所以我们使第三个跳转指令跳转到异常处理函数,也就是 B SWI_HANDLER,
        @ 其他的异常处理只需放在对应的位置即可
        @ 所以当这条指令执行时,ARM回去找到0x08位置的指令去执行,也就跳转到了异常处理函数
        @**********************************************************************
   
		@ ADD R3, R2, R1        
		@ B STOP
		
		@ 异常处理程序
@ SWI_HANDLER:
        @ 因为异常处理程序在此操作了R1和R2,所以需要进行压栈来保护
		@ 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状态的恢复

3.协处理器指令:

        含义:操控协处理器的指令

        简单提及一下,具体了解自行学习
    
         1.协处理器数据运算指令
            CDP
         2.协处理器存储器访问指令
            STC    将协处理器中的数据写入到存储器
            LDC    将存储器中的数据读取到协处理器
         3.协处理器寄存器传送指令
            MRC    将协处理器中寄存器中的数据传送到ARM处理器中的寄存器
            MCR    将ARM处理器中寄存器中的数据传送到协处理器中的寄存器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Hadoop】二、Hadoop MapReduce与Hadoop YARN

文章目录 二、Hadoop MapReduce与Hadoop YARN1、Hadoop MapReduce1.1、理解MapReduce思想1.2、Hadoop MapReduce设计构思1.3、Hadoop MapReduce介绍1.4、Hadoop MapReduce官方示例1.5、Map阶段执行流程1.6、Reduce阶段执行流程1.7、Shuffle机制 2、Hadoop YARN2.1、Hadoop YARN…

导入源码至Android Studio

导入源码至Android Studio 参考: Android源码环境搭建(aosp Ubuntu 16.04) 使用如下的步骤: 1.. build/envsetup.sh (source可以用 .代替,即". build/envsetup.sh") 2.lunch,并选择要编译的项…

jmeter请求Sse长链接接口

文章目录 1.背景1.1 什么是SSE接口 2. **解决思路-尝试方法⬇️:**2.1 🏳️‍🌈 **postman-sse请求结果**2.2 **⚡ jmeter报错**2.3 ☀️**封装此SSE接口**2.3.1 ❌httpclient2.3.2 ❌HttpURLConnection2.3.3 ✔️okhttp3 3. jmeter-beanshel…

跟我一起使用 compose 做一个跨平台的黑白棋游戏(3)状态与游戏控制逻辑

前言 在上一篇文章中,我们已经完成了黑白棋的界面设计与编写,今天这篇文章我们将完成状态控制和游戏逻辑代码的编写。 正如第一篇文章所述,在本项目中,我们需要实现不依赖于平台的状态管理,也就是使用 Flow 和 compo…

浏览器扩展一些好用插件

给浏览器添加一些插件功能,能够让我们用的更方便,开发中非常实用,下面直接开始 我们这里选择的是微软自带的Microsoft Edge浏览器(谷歌也行。这两款浏览器都是非常好用的) 我们打开浏览器找到扩展应用这个,…

opencv 中值滤波

中值滤波是一种常用的图像滤波算法,是在像素点周围进行多个点的中值滤波,将点的灰度值根据其周围像素点的灰度值进行平均,并使这些点的灰度值具有相似性,以达到平滑去噪的目的。中值滤波在图像处理中应用广泛,在图像滤…

利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法)

利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法) 一、设备调配方案二、设备匹配算法三、代码实现(java) 最近在做一个项目设备调配系统,分享一些干货!!! 一、设备…

Godot引擎 4.0 文档 - 入门介绍 - Godot 关键概念概述¶

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面:Overview of Godots key concepts — Godot Engine (stable) documentation in English Godot 关键概念概述 每个游戏引擎都围绕您用来构建应用程序的抽象展开。在 Godo…

【mysql】库的操作+表的操作

文章目录 启动mysql登录mysql1.MySQL环境安装与基础认识修改端口号连接服务器服务器,数据库,表关系建表 第二讲_库与表的操作1.创建数据库2.创建数据库案例3.指明字符集和校验集校验规则对数据库的影响不区分大小写的查询以及结果:区分大小写…

SQL Backup Master 6.3.6 Crack

SQL Backup Master 能够为用户将 SQL Server 数据库备份到一些简单的云存储服务中,例如 Dropbox、OneDrive、Amazon S3、Microsoft Azure、box,最后是 Google Drive。它能够将数据库备份到用户和开发者的FTP服务器上,甚至本地机器甚至网络服务…

速通二次型、二次型标准型、二次型规范型

浅过二次型 理解二次型可以从二次型的多项式入手: 显然,在系数都为实数的情况下,二次型矩阵即为一个实对称矩阵。 取一个代入值的例子就是: 二次型的标准型 OK,再从二次型的标准型的多项式入手,如下&…

FPGA System Planner(FSP)使用手册

FSP工具是cadence公司为了FPGA/PCB协同设计而推出的一个解决方案工具包。它的主要工作是由软件来自动生成、优化FPGA芯片的管脚分配,提高FPGA/PCB设计的工作效率和连通性。FSP完成两顷重要工作:一、可以自动生成FPGA芯片的原理图符号(symbol);二、自动生成、优化和更改FPG…

C++模板(上)

文章目录 模板函数模板函数模板的实例化 类模板总结 模板 模板是C种为了方便用户对于一些场景的使用&#xff0c;引入的新概念&#xff0c;使得我们的代码不会冗余 template关键字 template关键字的意思就是模板&#xff0c;语法为&#xff1a;template<typename T1,type…

内网渗透之Linux权限维持-OpenSSHPAM后门SSH软链接公私钥登录

0x01替换版本-OpenSSH后门 原理&#xff1a;替换本身操作系统的ssh协议支撑软件openssh&#xff0c;重新安装自定义的openssh,达到记录帐号密码&#xff0c;也可以采用万能密码连接的功能&#xff01; 可以修改软件版本和删除安装记录 1.环境准备&#xff1a; yum -y install…

【Java EE 初阶】网络初识

目录 1.网络互连 1.局域网&#xff1a; 2.广域网WAN 2.网络通信基础 3.IP地址&#xff1a;端口号 4.协议 1.五元组 2.协议分层 1.为什么要用网络分层&#xff1f; 3.OSI七层模型 4.TCP/IP五层&#xff08;或四层&#xff09;模型 5.封装和分用 1.应用层 2.传输层A…

Oracle数据库中了locked1勒索病毒攻击后怎么办,什么是locked1勒索病毒

Oracle数据库是一种被集团企业广泛使用的关系型数据库管理系统&#xff0c;但是随着科学技术的不断发展&#xff0c;在现代互联网环境中数据库安全性成为了一个非常重要的问题。而其中主要的威胁就是勒索病毒攻击。一旦数据库被勒索病毒攻击入侵&#xff0c;许多重要的数据就会…

【JVM】3. 运行时数据区及程序计数器

文章目录 3.1. &#x1f379;运行时数据区3.1.1. &#x1f942;概述3.1.2. &#x1f942;线程3.1.3. &#x1f942;JVM系统线程 3.2. &#x1f379;程序计数器(PC寄存器) 3.1. &#x1f379;运行时数据区 3.1.1. &#x1f942;概述 本节主要讲的是运行时数据区&#xff0c;也就…

跟我一起使用 compose 做一个跨平台的黑白棋游戏(2)界面布局

前言 在上一篇文章中&#xff0c;我们讲解了实现这个游戏的总体思路&#xff0c;这篇文章我们将讲解如何实现游戏界面。 本文将涉及到 compose 的自定义绘制与触摸处理&#xff0c;这些内容都可以在我往期的文章中找到对应的教程&#xff0c;如果对这部分内容不太熟悉的话&am…

论文阅读_语音合成_VALL-E

论文阅读 number headings: auto, first-level 2, max 4, _.1.1 name_en: Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers name_ch: 神经网络编解码器语言模型实现零样本TTS paper_addr: http://arxiv.org/abs/2301.02111 date_read: 2023-04-25 da…

Docker代码环境打包进阶 - DockerHub分享镜像

1. Docker Hub介绍 Docker Hub是一个广泛使用的容器镜像注册中心&#xff0c;为开发人员提供了方便的平台来存储、共享和分发Docker容器镜像。它支持版本控制、访问控制和自动化构建&#xff0c;并提供了丰富的公共镜像库&#xff0c;方便开发人员快速获取和使用各种开源应用和…