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

笔者继续来学习一下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.mzph.cn/web/20625.shtml

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

相关文章

functional函数对象库学习

类模板 std::function 是一种通用多态函数包装器。std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——函数(通过其指针)、lambda 表达式、bind 表达式或其他函数对象,以及成员函数指针…

FPGA基于DE2-115开发板驱动HC_SR04超声波测距模块|集成蜂鸣器,led和vga提示功能

文章目录 前言一、实验原理二、Verilog文件2.1 时钟分频2.2 超声波测距2.3 超声波驱动 三、实现过程3.1 模块说明3.2 引脚分配 三、演示视频总结参考 前言 环境 硬件 DE2-115 HC-SR04超声波传感器 软件 Quartus 18.1 目标结果 使用DE2-115开发板驱动HC-SR04模块&#xff0…

Windows 下 PostgreSQL 图形化界面安装、配置详解

相信大家对PostgreSQL都不陌生吧,自从MySQL被Oracle所控制后,PostgreSQL就成为了国内去O的首选数据库了,并且PostgreSQL目前不受任何商业公司控制,所以国内很多厂商都是基于PostgreSQL做二次开发来实现数据库自主可控的目标(国内很…

简单模拟实现shell(Linux)

目录​​​​​​​ 前言 展示效果 实现代码 前言 该代码模拟了shell的实现,也就是解析类似于“ls -a -l"的命令,当我们启动我们自己写的shell的可执行程序时,我们输入"ls"的命令,也可以展示出在shell中输入&…

学习笔记——网络参考模型——TCP/IP模型(物理层)

一、TCP/IP模型-物理层 1、数据传输(交换)的形式 (1)电路交换 特点:通信双方独占通信链路。 优点:数据传输时延小,适用于实时通信;数据按序发送,不存在失序问题;适合模拟信号和数字信号传输。 缺点&am…

【前缀和】42. 接雨水

本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入&am…

IDEA+MyBatisX根据mapper方法自动添加注解和生成xml方法结构

前提:确保IDEA已安装并启用了MyBatisX插件 在service层写dao或mapper的方法结构,反向生成dao层方法声明,如下: void updateStock(Long skuId, Long wareId, Integer skuNum); 由于该方法传递多个参数,为了让MyBatis识…

心链6----开发主页以及后端数据插入(多线程并发)定时任务

心链 — 伙伴匹配系统 开发主页 信息搜索页修改 主页开发&#xff08;直接list用户&#xff09; 在后端controller层编写接口去实现显示推荐页面的功能 /*** 推荐页面* param request* return*/GetMapping("/recommend")public BaseResponse<List<User>&…

Go-知识并发控制WaitGroup

Go-知识并发控制WaitGroup 1. 认识 WaitGroup2. 基本原理2.1 信号量2.2 数据结构2.3 Add2.4 Wait2.5 Done 3. 小例子3.1 主协程等待子协程执行完成3.2 子协程等待主协程信号3.3 GetFirst 4. 总结 gitio: https://a18792721831.github.io/ 1. 认识 WaitGroup WaitGroup 是Go 应…

公网IP地址如何查询?

公网IP地址是指在互联网中可以被全球范围内的设备访问的IP地址。在网络通信中&#xff0c;公网IP地址扮演着重要的角色&#xff0c;它可以标识设备在互联网中的位置。查询公网IP地址是一种常见的网络管理需求&#xff0c;因为它能够提供网络设备的准确位置信息&#xff0c;方便…

AI 绘画爆火背后:扩散模型原理及实现

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Java进阶学习笔记34——Arrays类

Arrays&#xff1a; 用来操作数组的工具类。 解释说明&#xff1a; 只要知道代码这么写就可以了。 package cn.ensource.d5_arrays;import java.util.Arrays; import java.util.function.IntToDoubleFunction;public class ArraysTest1 {public static void main(String[] arg…

LTspice仿真中设置电阻随时间变化的方法

背景&#xff1a; 笔者找了很多资料都没有看到如何设置电阻、电容等参数随时间变化。但在实际模拟中&#xff0c;总会遇到需要模拟这些量的变化。故撰写此文&#xff0c;供大家参考。 除了模拟随时间变化外&#xff0c;同样的思路也可以模拟随其他变量变化 效果展示 设置电…

32【Aseprite 作图】石头——拆解

1 石头先画轮廓&#xff0c;还是2 4 1 1 2 2 2&#xff0c;这样画一个圆的轮廓 或者2 1 1 3 5 1 1 1 1 2 4 &#xff0c; 2 最暗一层的黑色&#xff0c;做阴影部分&#xff0c;就是7 4 3 2 做最深的部分 各个地方画一些浅色的&#xff0c;做高光部分&#xff0c;上面的高光偏圆…

015、列表_应用场景

1.消息队列 如图所示,Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。 2.文章列表 每个用户有属于自己的文章列表,现…

收银系统源码-千呼新零售2.0【智慧供应链】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看下…

FinalShell 配置SSH密钥登陆

转载请标明出处&#xff1a;http://blog.csdn.net/donkor_/article/details/139355489 文章目录 前言生成密钥服务器配置公钥本地配置私钥存储私钥FinalShell配置 总结 前言 本机FinalShell 配置SSH密钥登陆服务器&#xff0c;这样就不再需要使用密码进行登陆了。由于FinalSh…

【StableDiffusion秋叶包反斜杠问题】Failed to find xxx\sd-webui-aki-v4.8\...\xxx.pth

一、问题发生 1.在我额外安装预处理器时报错 意思是没办法找到有这么一个包&#xff08;但我已经把这个包扔进去了&#xff09; 完整报错&#xff1a; Failed to find S:\app_AI\stableDiffusion-webui-aki\sd-webui-aki-v4.8\extensions\sd-webui-controlnet\annotator\dow…

电机测试方法的介绍与功能实现(T测试方法)

目录 概述 1 理论介绍 2 实现原理 2.1 旋转式编码器原理 2.2 系统实现框图 2.3 测速原理 2.4 计算速度值 3 STM32Cube配置项目 3.1 软件版本信息 3.2 配置项目 4 代码实现 4.1 电机速度控制 4.2 速度计算函数 4.3 功能实现 5 测试 概述 本文主要介绍测试电机速…

Vue项目运行页面禁止缩放【移动端和PC端都禁止缩放】解决方案

Vue项目运行页面禁止缩放【移动端和PC端都禁止缩放】解决方案&#xff0c;有的人手很J,总喜欢放大缩小&#xff0c;从而会导致页面错乱&#xff0c;以下是解决方案&#xff0c;简单有效 效果图PC&#xff1a;滚轮缩放和其他缩放都会禁止 移动端效果图&#xff1a;各种手机平板…