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 来决定是否可以处理。

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

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

相关文章

基于大模型的智慧零售教育科研平台——技术方案

一、概述 1.1背景 随着数字经济的快速发展和全社会数字化水平的升级,人工智能的积极作用越来越凸显,人工智能与各个行业的深度融合已成为促进传统产业转型升级的重要方式之一。ChatGPT的出现掀起了又一波人工智能发展热潮,人工智能行业发展势…

法线方程实现最小二乘拟合(Matlab)

一、问题描述 利用法线方程实现最小二乘拟合。 二、实验目的 掌握法线方程方法的原理,能够利用法线方程完成去一组离散数据点的拟合。 三、实验内容及要求 对于下面的不一致系统,构造法线方程,计算最小二乘以及2-范数误差。 [ 3 − 1 2 …

国产飞腾/龙芯/瑞芯微芯片在信创行业应用:金融行业、教育行业、党政机关

党政机构 方案背景: 在国家提出信息技术应用创新发展战略的大环境下,政务大厅需要基于国家科技自主技术深入推进“互联网政务服务”。加快建设全国一体化在线政务服务平台,进一步落实创新驱动发展战略,提升政务网络安全保障能力…

Java筑基—String类

这里写目录标题 一、字符串的拼接二、获取字符串长度三、字符串转换四、去除前后空白字符五、比较字符串是否相等六、比较字符串是否包含七、字符串是否以某些开始、结尾八、字符串的替换九、字符串的转换十、空串和NULL串 一、字符串的拼接 Java语言允许使用 号拼接两个字符…

内网不能访问域名怎么办?

在网络应用中,我们常常遇到内网不能访问域名的问题。这是由于内网环境限制导致的,内网无法直接连接到公网,因而无法访问互联网上的域名。我们可以利用一些特殊技术和工具来解决这个问题。 天联组网技术的应用 天联组网是一种非常受欢迎的解决…

IDEA启动jsp项目

1、背景 有个老项目的前端需要修改,整来源码之后发现是比较古老的jsp项目,需要在idea中启动下试试 2、代码配置流程 常规的配置流程网上都有 2.1 首先找到Project Structure 2.2 配置web.xml 注意下方的 web resource directory, web.xml中的写的相对…

如何选择软件开发服务商

在当今数字化快速发展的时代,软件已经成为企业运营不可或缺的一部分。然而,对于许多非技术背景的企业来说,如何选择一个合适的软件开发服务商却是一个不小的挑战。本文将从需求分析、服务商评估、合同条款以及后期维护等方面,详细…

FastDFS分布式文件系统——上传本地文件

目录 安装FastDFS FastDFS 使用Java客户端上传本地文件到FastDFS服务器上 pom.xml fastdfs_conf配置文件 FastDFS 测试 安装FastDFS 1、用FastDFS一步步搭建文件管理系统 - bojiangzhou - 博客园 (cnblogs.com)2、FastDFS文件上传功能封装 - 动力节点 (bjpowernode.com)…

Nginx 1.26.0 爆 HTTP/3 QUIC 漏洞,建议升级更新到 1.27.0

据悉,Nginx 1.25.0-1.26.0 主线版本中涉及四个与 NGINX HTTP/3 QUIC 模块相关的中级数据面 CVE 漏洞,其中三个为 DoS 攻击类型风险,一个为随机信息泄漏风险,影响皆为允许未经身份认证的用户通过构造请求实施攻击。目前已经紧急发布…

BurpSuite2024.5

1 工具介绍 本版本更新介绍 此版本引入了Burp Scanner对WebSockets的支持、对记录登录编辑器的改进、WebSocket 匹配和替换规则以及许多性能改进。 Burp Scanner 支持 WebSockets 我们已更新内部代理的配置以允许 WebSocket 流量。这使 Burp Scanner 现在可以抓取依赖 WebSo…

【漯河市人才交流中心_登录安全分析报告-Ajax泄漏滑动距离导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

可视化小波频率如何影响地震纵向分辨率(MATLAB R2018A)

地震勘探主要通过地表接收的地震波场来识别地下的地质结构和物性参数等,获取地震数据的质量直接决定着反演地下信息的精确度和准确性。地震数据的分辨率是评价地震数据品质的重要标准之一,高分辨率的地震数据包含丰富的地质信息,更有利于进行…

快蜗牛OZON数据分析,OZON快蜗牛数据

在当今电商行业蓬勃发展的背景下,OZON作为俄罗斯及东欧市场的重要电商平台,其数据背后蕴藏着巨大的商业价值。快蜗牛,作为专注于OZON平台的数据分析工具,为卖家提供了深入的市场洞察和策略指导。接下来看看快蜗牛OZON数据分析&…

c基础 - 输入输出

目录 一.scanf() 和 printf() 函数 1.printf 2.scanf 二 . getchar() & putchar() 函数 1.int getchar(void) 2.int putchar(int c) 三. gets() & puts() 函数 一.scanf() 和 printf() 函数 #include <stdio.h> 需要引入头文件,stdio.h 1.printf print…

Nginx实战:日志打印自定义请求头

nginx的日志可以打印很多内容&#xff0c;但是有时候自定义的请求头该怎么打印呢&#xff1f;像下面这种场景&#xff1a; 其实很简单&#xff0c;设置日志打印格式log_format的时候&#xff0c;自定义的请求头用 【$http_自定义请求头名】 的格式就可以打印出来 例如你的自定义…

[机器学习] 低代码机器学习工具PyCaret库使用指北

PyCaret是一个开源、低代码Python机器学习库&#xff0c;能够自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具&#xff0c;极大地加快了实验周期&#xff0c;提高了工作效率。PyCaret本质上是围绕几个机器学习库和框架&#xff08;如scikit-learn、XGBoost、L…

文件夹损坏0字节:原因、恢复方案与预防措施

在使用电脑或移动设备时&#xff0c;我们有时会遇到文件夹突然损坏并显示为0字节的情况。这种故障不仅令人困惑&#xff0c;更可能导致重要数据的丢失。本文将深入探讨文件夹损坏0字节的现象&#xff0c;分析其产生的原因&#xff0c;并给出两种有效的数据恢复方案&#xff0c;…

2023年亚太杯A题:果园采摘机器人的图像识别,一二题

问题一&#xff1a;基于附件1中提供的可收获苹果的图像数据集&#xff0c;提取图像特征&#xff0c;建立数学模型&#xff0c;计算每幅图像中的苹果的数量&#xff0c;并绘制附件1中所有苹果的分布直方图。 对于自动采摘机器人&#xff0c;首要的能力就是识别出苹果对象&#…

CrossOver支持M4新品吗?苹果M4芯片对游戏支持的怎么样?

CrossOver是一款可以在不同平台之间无缝切换的软件&#xff0c;它可以让你在MacOS或者Linux操作系统上运行Windows应用程序&#xff0c;无需安装双系统或虚拟机。CrossOver是基于Wine项目开发的&#xff0c;Wine是一个可以在非Windows平台上运行Windows应用程序的兼容层。 那么…

doris实战处理(一)doris表的建表规范、查询

感谢原文&#xff1a;https://mp.weixin.qq.com/s/tGbdkF62WU6qbAH0mqtXuA 第一部分&#xff1a;字符集规范 【强制】数据库字符集指定utf-8&#xff0c;并且只支持utf-8。 命令规范 【建议】库名统一使用小写方式&#xff0c;中间用下划线&#xff08;_&#xff09;分割&a…