ARM专用指令

news2024/10/6 6:41:51

目录

一、状态寄存器传送指令:访问(读写)CPSR寄存器         ​编辑   

二、软中断指令:触发软中断

三、协处理器指令:操控协处理器的指令    

四、伪指令:


一、状态寄存器传送指令:访问(读写)CPSR寄存器
    
        

CPSR寄存器分为四个域,[31:24]为条件域用F表示、[23:16]为状态域用S表示、[15:8]为预留域用X表示、[8:0]为控制域用C表示
 

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

Bit[28]
    > 当运算器中进行加法运算且产生符号位进位时该位自动置1,否则为0

    > 当运算器中进行减法运算且产生符号位借位时该位自动置0,否则为1

Bit[29]
    > 当运算器中进行加法运算且产生进位时该位自动置1,否则为0

    > 当运算器中进行减法运算且产生借位时该位自动置0,否则为1

Bit[30]
    当运算器中产生了0的结果该位自动置1,否则为0

Bit[31]
    当运算器中产生了负数的结果该位自动置1,否则为0
————————————————
版权声明:本文为CSDN博主「宇努力学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52479948/article/details/128352512

        @ 读CPSR
        @ MRS R1, CPSR
        @ R1 = CPSR
        
        @ 写CPSR
        @ MSR CPSR, #0x10
        @ CPSR = 0x10
        
        @ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
        @ MSR CPSR, #0xD3
        


二、软中断指令:触发软中断

ARM寄存器组织与异常处理_宇努力学习的博客-CSDN博客
    

        当产生软中断后CPU会将IRQ自动禁止

压栈时压的是LR出栈直接将这个值出给PC实现PC=LR,在出栈程序后加^相当于CPSR=SPSR
        


.text
.global _start
 
_start:

    @ 异常向量表
    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状态的恢复    
    
STOP:
    B STOP
.end


三、协处理器指令:操控协处理器的指令
    

ARM最多可以有16个协处理器,常见的有:FPU(专门用来进行浮点运算)、CP15(内存管理:高速缓存、异常向量表、控制MMU)

浮点处理单元_百度百科

内存管理单元(MMU)和协处理器CP15介绍(转) - 走看看

ARM协处理器CP15介绍_Leon_George的博客-CSDN博客_arm cp15

MMU_百度百科

Linux上每个进程都有4个G的虚拟内存。


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

@ *****************************************************************

四、伪指令:

本身不是指令,编译器可以将其替换成若干条等效指令

        @ 空指令
        @ NOP
        
        @ 指令
        @ LDR R1, [R2]
        @ 将R2指向的内存空间中的数据读取到R1寄存器
        
        @ 伪指令
        @ LDR R1, =0x12345678
        @ R1 = 0x12345678    
        @ LDR伪指令可以将任意一个32位的数据放到一个寄存器
        

换成将PC中的地址给R1,PC这时应该是目前指令+8的位置,所以在0X08这个位置放了0X12345678 


        @ LDR R1, =STOP
        @ 将STOP表示的地址写入R1寄存器
        
        @ LDR R1, STOP
        @ 将STOP地址中的内容写入R1寄存器

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

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

相关文章

多线程的创建和使用(4种)

1.JDK5.0之前的创建方式 方式一:继承于Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run() --> 此线程执行的作声明在run()中 3.创建Thread类的子类的对象 4.通过此对象调用start() 方式二:实现Runnable接口 1.创建一个实现了Runnable…

第三十五章 数论——卡特兰数

第三十五章 数论——卡特兰数一、什么是卡特兰数1、推导2、公式二、卡特兰数的应用1、问题:2、分析3、代码一、什么是卡特兰数 1、推导 我们看下面这个坐标系: 我们从(0,0)(0,0)(0,0)点到(6,6)(6,6)(6,6)点的路线有很多,并且根据我们高中排…

57.return—函数的返回值

57.return-函数的返回值 文章目录57.return-函数的返回值1.定义2.分类3. 没有返回值4.有1个返回值5.有多个返回值6.一个自定义函数只执行一次return语句7.实操练习1.定义 return关键字后接变量名或表达式可以将函数的计算结果返回到调用处。 变量或表达式等同于接收果汁、豆浆…

Chronicle Pro - 一款简单 Mac 理财规划师,管理你的的个人预算

Chronicle Pro - 一款简单 Mac 理财规划师,管理你的的个人预算 使用Chronicle追踪和支付账单,管理你的个人预算,这是一款简单的Mac理财规划师。获得通知,这样你就不会错过下一个付款截止日期;你再也不用付滞纳金了。把你所有的账单…

8 GUI实例

GUI 1 Frame 用来创建窗口,构造函数如下: public Frame() throws HeadlessExceptionpublic Frame(String title) throws HeadlessException 常用方法如下: public class gui_v1 {public static void main(String[] args) {Frame f new F…

用python的turtle库画一个小猪佩奇

小猪佩奇是一个可爱的小猪。她已经四岁了,与她的妈妈,爸爸,和弟弟乔治生活在一起。佩奇最喜欢做的事情是玩游戏,打扮的漂亮,度假,以及在小泥坑里快乐的跳上跳下和与小羊苏西(她最好的朋友&#…

Nginx小结1

Nginx 是一个高性能的HTTP和反向代理web服务器,作为负载均衡器,承接的所有请求。核心功能有负载均衡、反向代理、静态资源服务器。另外Nginx还可以使用keepalive结合使用建立主备份机实现高可用。keepalive是在TCP中一个可以检测死连接的机制&#xff0c…

WordPress插件开发教程1:开发第一个WordPress插件

第一步:在 wp-content \ plugins 目录新建一个目录,随便起个名字,比如:my-first-plugin。 第二步:进入 my-first-plugin 目录,新建一个PHP文件,随便起个名字,比如:hello.…

UE解决SetActorHiddenInGame后其Collision仍然会被检测到的问题

文章目录 1.问题产生2.解决过程3.总结4.参考资料1.问题产生 (1)首先我在场景内添加了红色的球(Sphere)和绿色的面片(Plane),两者都是StaticMeshActor,如下图所示: (2)然后进入二者的静态网格体编辑窗口,将二者的碰撞复杂度都设置为UseComplexCollisionAsSimple。 …

D. Valiant‘s New Map(二分)

Problem - D - Codeforces 游戏工作室 "DbZ Games "想在他们的热门游戏 "Valiant "中引入另一张地图。这一次,名为 "Panvel "的地图将以孟买市为基础。 孟买可以被表示为nm的单元格。网格中的每个单元格(i,j)…

【数据可视化】地理信息可视化的常见算法

1. 地图投影 地理坐标:是用维度、经度表示地面点位置的球面坐标 移动开发:移动端依靠GPS获取位置信息,其获得的是经纬度的信息(WGS84) 互联网开发中,需要将WGS84转换为其他互联网地图平台支持的坐标系统…

QT 九宫格绘图(QSS方式)

什么是九宫格方式绘图? 顾名思义,就是把一个方块分割成 9 个部分,如图所示: 九宫格绘图的原理就是把背景图分割成 9 个部分,绘制时: 四个角(1、3、7、9)的大小不变左右部分&#…

C++11标准模板(STL)- 算法(std::partial_sum)

定义于头文件 <numeric> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 计算范围内元素的部分和 s…

达达盈利新故事,得靠智能化“省”出来?

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文|螳螂观察 作者|叶小安 我们正处于一个最好的时代&#xff0c;不用出门就能享受到叫餐、代买衣物服饰、收发快递甚至是医院排队等服务&#xff0c;“万物皆可到家、万物即到”&#xff0c;正成为时代的潮流。 不…

【信管5.4】进度管理知识点汇总

进度管理知识点汇总在项目进度管理这一块&#xff0c;我们突然一下就接触到了不少的计算操作&#xff0c;而且接触到的工具概念也相比范围管理来说多了很多。因此&#xff0c;我们在这里进行一次小的总结。活动顺序与逻辑关系还记得什么是活动吧&#xff1f;活动就是 WBS 再次分…

NFS And Autofs

NFS&#xff08;network file system&#xff09; 挂载NFS 文件系统。NFS是一个标准的网络协议用在linux与unix之间,版本7默认使用的是NFSV4&#xff0c;NFSv4使用TCP协议&#xff0c;旧版本的NFS使用TCP或者UDP协议。 *手动挂载NFS使用mount. *自动挂载使用/etc/fstab *挂载NF…

FFmpeg常用推流命令

一、FFmpeg推RTMP流准备工作 首先确保自已已经安装了nginx rtmp服务器。 打开配置文件nginx.conf 完成如下配置 如果没有nginx rtmp服务器&#xff0c;请阅读这一篇简书文章 Mac搭建nginxrtmp服务器 二、FFmpeg推流 1.推流MP4文件 视频文件地址&#xff1a;/Users/xu/Desk…

美创DSM数据安全管理平台获华为鲲鹏技术认证!

近期&#xff0c;美创DSM数据安全管理平台通过华为鲲鹏的相互兼容性测试与认证&#xff0c;这标志着数据安全管理平台对国产信创服务器的支持&#xff0c;实现自研、国产化和自主可控。 华为鲲鹏技术认证是华为推出的一项生态合作伙伴计划&#xff0c;要求测试产品自主、可控…

健康体检管理系统源码 运营级PEIS系统源码 PEIS健康体检系统源码 PEIS源码 B/S架构开发

开发语言:ASP.NET C#,数据库:SQLserver2008R2&#xff0c;开发工具:VS2010。 前台工作&#xff1a; 预约、前台登记、照片采集、导检单打印、检验申请单打印、检前签到、检后签到、 团体设置、合并团体&#xff08;逻辑&#xff09; 医生工作&#xff1a; 数据集中录入、数…

国产linux系统使用 PageOffice 在线打开 word 文件

一、客户端环境 1、操作系统 银河麒麟&#xff0c;中标麒麟&#xff0c;统信UOS 2、芯片 芯片&#xff08;CPU)&#xff1a;x86&#xff08;Intel、兆芯&#xff09; &#xff0c;ARM&#xff08;飞腾、鲲鹏&#xff09;&#xff0c;龙芯 3、浏览器 360安全浏览器 奇安信…