ARC学习(2)基本编程模型认识(二)

news2024/11/20 3:29:01

笔者继续来学习一下arc的编程模型的寄存器信息。

1、core寄存器深入

在这里插入图片描述
在这里插入图片描述

  • 参数寄存器:r0-r7,8个参数,
  • 暂存器:r10-r15
  • 保存寄存器:r16-r25 调用函数需要保存的寄存器
  • 指针寄存器:gp(全局指针)、fp(栈顶指针)、sp(栈底指针)
  • 链接寄存器:ilink(异常链接寄存器)、blink(分支链接寄存器)
  • 通用目的寄存器:genaral purpose reg,不是暂存器也不是保存寄存器
  • 程序寄存器:PCL = PC & 0xFFFF FFFC ,PC 在arc里面是辅助寄存器,反应的时候实际的指令地址,其是只读半字对齐的寄存器。

1.1、指针寄存器

指针寄存器有三个,分别为gp(全局指针)、fp(栈顶指针)、sp(栈底指针),分别使用r26,r27,28寄存器来表示。

  • gp(全局指针):指向一些贯穿整个程序执行的时候的共享数据,(暂时没用到过)。
  • fp(栈顶指针):指向当前栈帧的基地址,
  • sp(栈底指针):指向当前帧的实时地址,(向下递减)
    具体可参考寄存器的理解 ===》FP、SP、LR寄存器。

只要关注一下sp指针即可,其他不常用,例如是否栈溢出等等。
在这里插入图片描述

1.2 链接寄存器

链接寄存器有两个,ilink(异常链接寄存器 r29)、blink(分支链接寄存器 r31)

  • ilink(异常链接寄存器):进入中断或者异常时,该值会被修改成返回的地址,所以其不能一直保持该值,除非在某种中断下面一直执行程序。且用户模式下不能获取其值,否则会进入异常。
  • blink(分支链接寄存器):常规的链接寄存器,当进行函数跳转时,会保存下一条指令的地址到blink。
    在这里插入图片描述

1.3 PC寄存器

程序寄存器:PCL = PC & 0xFFFF FFFC ,PC 在arc里面是辅助寄存器,反应的时候实际的指令地址,PCL 是只读字对齐(4字节)的寄存器。
在这里插入图片描述

1.4 其他寄存器

r30:存储 长(long 类型)的立即数,便于高位操作指令
r60:循环寄存器,记录循环次数寄存器,
在这里插入图片描述
同时由两个辅助寄存器LP_START和LP_END来完成循环,指示循环体。
LP_START:循环开始的地址
LP_END:循环结束的地址

总的流程如下图所示(下图1):

  1. 从LP_START开始,判断下一条指令是否是LP_END,如果不是,PC继续指向下一条指令,
  2. 如果是最后一条指令,则判断LP_COUNT是否为1,不为1,则PC执行LP_START,然后LP_OUNT 减1,然后继续循环
  3. 如果是最后一条指令,且LP_COUNT为1,则PC=LP_END,同时LP_COUNT=LP_COUNT-1,则为0
  4. 因为是先循环,然后再减1,所以到1时,循环结束
  5. 如果LP_COUNT开始的时候为0,则会进行2^32-1次,下图3
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、辅助寄存器介绍

2.1 status32状态寄存器

主要功能:使能或者禁止处理器内部的一些行为,包括一指示结果的flag。

  • 用户模式:只能读ZNCV这些Flag bits,其他读出来都是0
  • 内核模式:所有位均可以读出来。
    在这里插入图片描述

介绍一下相对比较关心的BIT:

  • IE(31Bit):处理器的中断是否使能,0:禁止中断,1:使能中断,且在中断优先级之上E[3:0+ ]的中断。如果处理器没有中断,配置位(HAS_INTERRUPT),则该位无效。

  • AD(20Bit):Disable Align Checking:1:禁止数据对齐检查,默认是0。如果为0,进行常规的对齐,否则会进入EV_Misaligned,数据访问非对齐。

    • 64位和32位按照:32位对齐
    • 16位:16位对齐,
    • 8位:没有对齐要求
  • SC(14Bit):Enable stack checking exception:使能栈检查异常,通过栈基地址和顶地址,可确认是否栈溢出,如果溢出,则进入异常。栈检查异常:EV_ProtV,异常向量:0x6,偏移:0x18,异常code:根据错误类型决定,para:0x2
    在这里插入图片描述
    异常类型:内存读异常,内存写异常,内存读改写异常(有点像某些外设寄存器读清零等)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • DZ(13Bit):DivZero exception Enbale,除0异常使能,EV_DivZero,但是没有硬件除法器时,该位被忽略。

  • U(7Bit):User Mode,1为用户模式,限制一些特权机制特权指令的执行。

  • AE(5Bit):状态代表进入异常,ERET 寄存器有效,代表异常返回的地址,

  • E[3:0](1-4Bit):代表处理器优先级门限,在大于该门限时才有效中断。从0-15,0最高优先级。如果每个中断一个优先级,则16个中断向量每个中断对应一个优先级,通过中断选择select和中断使能去配置。看上图的例子,优先级阈值为2。

寄存器如下图所示:
在这里插入图片描述
status32_P0:快速中断时,会使用该备份寄存器。进入和退出时,会拷贝和返回。

2.2 中断相关寄存器

  • 中断向量基地址寄存器:低10位无效,高22位有效,即按2^10 = 1024对齐,可以动态修改。
    在这里插入图片描述
    复位时,会从中断基地址config去加载值(Interrupt Vector Base Addres Configuration),
    在这里插入图片描述

  • 中断选择寄存器:选择一个中断去配置,比如优先级之类,会选择到对应的bank 寄存器。
    在这里插入图片描述

  • 中断优先级寄存器:每个中断都由一个优先级寄存器,可以通过select去选择。
    在这里插入图片描述

  • 中断触发寄存器:备份寄存器,设置是脉冲触发或者电平触发,通过脉冲取消寄存器消除。
    在这里插入图片描述

  • 中断使能寄存器:备份寄存器,每个中断都有一个,使能或者禁止中断。
    在这里插入图片描述

  • 中断脉冲取消寄存器:脉冲触发中断会被自动清除。
    在这里插入图片描述

  • 中断缓存寄存器:备份寄存器,指示当前哪个中断处于等待状态,通过select去查看,只读寄存器
    在这里插入图片描述

  • 中断状态寄存器:备份寄存器,查看select选择的寄存器的状态信息。
    在这里插入图片描述

  • 软件中断触发寄存器:写对应的中断号可以软件触发中断。
    在这里插入图片描述

2.4 异常相关寄存器

  • 异常返回寄存器:当异常发生时,会将异常的返回地址保存到该地址处,最低位为0,2byte对齐。
    在这里插入图片描述

  • 异常状态寄存器:异常发生时,保存status32到estatus里面,退出时,再恢复。
    在这里插入图片描述

  • 异常原因寄存器:表明当前发生异常的向量号,异常原因,以及参数信息。有些异常共享同一个向量地址,所以需要触发原因来区分。
    在这里插入图片描述
    在这里插入图片描述

  • 异常错误地址寄存器:表明异常发生时的地址。
    在这里插入图片描述
    在这里插入图片描述

3、操作权限介绍

操作权限决定了是否一个任务可以有权限执行特权指令或者获取一个保护状态。
arc V2 指令集里面规定只有两种操作模式:特权模式用户模式

一些特权说明如下框图所示:
在这里插入图片描述
一些场景下面必须是特权模式,所有会从用户模式切到特权模式,或者从特权模式切回用户模式。
用户模式切到异常模式

  • 中断
  • 异常
  • Reset 或者机制检查异常
  • trap、swi等

异常模式切回用户模式

  • 中断返回
  • 异常返回

中断或者异常会调整一些寄存器来讲进入特权模式,包括ERET、ILINK、BLINK 、ERSTATUS、STATUS_P0和AUX_IRQ_ACT。

  • ERET:异常返回的地址exception return address
  • ERSTATUS:exception status,从status32 copy
  • STATUS_P0:P0级别的status32 备份寄存器
  • AUX_IRQ_ACT:记录当前操作中断的优先级,指示处理器是否能处理嵌套一些中断事件(用来表示当前中断的优先级,指示已经触发的中断能否嵌套处理)。同时也要结合Status32 E 来决定是否可以处理。

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

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

相关文章

HackTheBox-Machines--Nineveh

Nineveh测试过程 1 信息收集 NMAP 端口扫描 80 端口 80端口是服务器的默认页面,无可利用功能点,源代码没有可利用的敏感信息 目录扫描 1.http://10.129.25.123/department 访问/department目录跳转到登录页面,尝试暴力破解,获取…

深入分析 Android Service (四)

文章目录 深入分析 Android Service (四)1. 使用 Messenger 进行通信2. 详细示例:使用 Messenger 进行通信2.1 创建 MessengerService2.2 在 Activity 中绑定服务并发送消息 3. 使用 AIDL 进行进程间通信3.1 定义 AIDL 接口3.2 实现 AIDL 接口3.3 在客户端绑定 AIDL…

【设计模式深度剖析】【7】【结构型】【享元模式】| 以高脚杯重复使用、GUI中的按钮为例说明,并对比Java类库设计加深理解

👈️上一篇:外观模式 | 下一篇:结构型设计模式对比👉️ 设计模式-专栏👈️ 目录 享元模式定义英文原话直译如何理解?字面理解例子:高脚杯的重复使用例子:GUI中的按钮传统方式使用享元模式 4个角色1. …

api网关kong对高频的慢接口进行熔断

一、背景 在生产环境,后端服务的接口响应非常慢,是因为数据库未创建索引导致。 如果QPS低的时候,因为后端服务有6个高配置的节点,虽然接口慢,还未影响到服务的正常运行。 但是,当QPS很高的时候&#xff0c…

.NET IoC 容器(三)Autofac

目录 .NET IoC 容器(三)AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文…

07-操作元素(键盘和鼠标事件)

在前面的文章中重点介绍了一些元素的定位方法,定位到元素后,就需要操作元素了。本篇总结了web页面常用的一些操作元素方法,可以统称为行为事件。 一、简单操作 点击按钮(鼠标左键):click()清空输入框&…

Linux静态库与动态库加载

了解库: 关于库相比大家之前肯定使用过,比如C/C里面的标准库,STL里面的各种库,我们在调用STL里的容器时都需要使用库,那么库到底是什么呢? 库的本质就是可执行程序的"半成品" 我们先来回顾一下代…

原生APP开发和Flutter开发的比较

原生APP开发和Flutter开发各有优缺点,适用于不同的场景和需求。下面是两者的详细比较,从开发语言、性能、开发效率、维护和更新、社区和支持等多个方面进行分析。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。…

工业安全智勇较量,赛宁网安工业靶场决胜工业网络攻防对抗新战场

2024年1月30日,工信部发布《工业控制系统网络安全防护指南》(工信部网安〔2024〕14号),围绕安全管理、技术防护、安全运营、责任落实四方面提出安全防护要求,强调聚焦安全薄弱关键环节,强化技术应对策略&am…

C语言序列化和反序列化--TPL中的API(三)

tpl_map 创建tpl的唯一方法是调用tpl_map()。第一个参数是格式字符串。后面是格式字符串中特定字符所需的参数列表。例如, tpl_node *tn; int i; tn tpl_map( "A(i)", &i );该函数在格式字符串中的项和给定地址的C程序变量之间创建映射。稍后,C变量…

C. Turtle and an Incomplete Sequence

思路:首先如果都是-1的话,我们可以输出1 2循环,否则。 首先处理首尾的连续-1串,这个也很好处理,最后我们处理两个非-1之间的-1串。 对于左边的数a[l]和右边的数a[r]: 如果a[l] > a[r],那么…

python移动文件

测试1(直接把B文件夹移动到了A里,成为了A的子文件夹) import os import shutil# 移动文件夹,B文件夹在当前目录没有了,跑到了A的子文件里 ## shutil.move(./example1/B/, ./example1/A/)测试2(B文件不动,将B文件里的所有的子文件夹移动到A内…

【算法】模拟算法——提莫攻击(easy)

题解&#xff1a;提莫攻击(模拟算法) 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接&#xff1a;LINK 2.题解 举例&#xff1a; 3.参考代码 class Solution { public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int n timeSeri…

Java设计模式 _行为型模式_访问者模式

一、访问者模式 1、访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型模式。它允许在不修改已有类结构的情况下&#xff0c;向类中添加新的操作。访问者模式通过将操作封装在一个访问者对象中&#xff0c;使得可以在不改变各个元素类的前提下&#x…

thinkphp6 queue队列的maxTries自定义

前景需求&#xff1a;在我们用队列的时候发现maxtries的个数时255次&#xff0c;这个太影响其他队列任务 我目前使用的thinkphp版本是6.1 第一部定义一个新的类 CustomDataBase&#xff08;我用的mysql数据库存放的队列&#xff09; 重写__make 和createPlainPayload方法 …

《面试笔记》——MySQL终结篇30

三大范式&#xff1f; 第一范式&#xff1a;字段具有原子性&#xff0c;不可再分&#xff08;字段单一职责&#xff09; 第二范式&#xff1a;满足第一范式&#xff0c;每行应该被唯一区分&#xff0c;加一列存放每行的唯一标识符&#xff0c;称为主键&#xff08;都要依赖主…

VB.net进行CAD二次开发(四)

netload不能弹出对话框&#xff0c;参考文献2 参考文献1说明了自定义菜单的问题&#xff0c;用的是cad的系统命令 只要加载了dll&#xff0c;自定义的命令与cad的命令同等地位。 这时&#xff0c;可以将自定义菜单的系统命令替换为自定义命令。 <CommandMethod("Add…

Linux主机安全可视化运维(免费方案)

本文介绍如何使用免费的主机安全软件,在自有机房或企业网络实现对Linux系统进行可视化“主机安全”管理。 一、适用对象 本文适用于个人或企业内的Linux服务器运维场景,实现免费、高效、可视化的主机安全管理。提前发现主机存在的安全风险,全方位实时监控主机运行时入侵事…

如何设置eclipse中web.xml 文件的地址

新学了一个项目 &#xff0c;项目结构与平常自己构建的web项目不同 &#xff0c;用eclipse打开之后&#xff0c;eclipse竟然自己创建了一个web.xml 而项目里面原本的web.xml 文件eclipse没有识别出来&#xff0c;导致后来浏览器访问任何路径都报错404 一、修改项目中web.xml的…

Centos7.9环境下安装Keepalived(亲测版)

目录 一、在线安装 二、离线安装 (1)、 下载 (2)、安装依赖包 (3)、解压文件 (4)、编译 (4.1)、进入 keepalived-2.2.8 目录中 (4.2)、安装Keepalived (5)、配置文件修改 (6)、启动 (7)、检查启动状态 (8)、 设置开机自启 (9)、配置从节点 (10)、启动从节点keepalived…