C语言面试之旅:掌握基础,探索深度(面试实战之ARM架构一)

        从前不会回头,往后不会将就。

                                                                                                                                          ----小新

一.ARM采用32位架构                                                                    

        ARM约定一个Byte8 bits,一个Halfword是16 bits (2 byte),一个Word32 bits (4 byte)。大部分ARM core 提供ARM 指令集(32 bit,每条指令都是4个字节),Thumb 指令集(16bit),Thumb2指令集(16 & 32bit)。

二.ARM的7种基本工作模式

ARM处理器存在七种基本工作模式,分别是:

  1. 用户模式(usr):这是正常的用户模式,也是ARM处理器正常的程序执行状态
  2. 快速中断模式(fiq):这种模式用于处理快速中断,对高速数据传输或通道进行处理
  3. 外部中断模式(irq):这种模式用于对一般情况下的中断进行处理。
  4. 管理模式(svc):这种模式属于操作系统使用的保护模式,主要用于处理软件中断swi reset
  5. 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于处理存储器故障、实现虚拟存储器和存储器保护。
  6. 系统模式(sys):这种模式运行具有特权的操作系统任务。
  7. 未定义指令中止模式(und):这种模式用于处理未定义的指令陷阱,当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真

三.ARM的37个通用寄存器

       (1)通用寄存器

         ARM微处理器共有37个32位寄存器,其中30个为通用寄存器,1个固定用作PC,6个位状态寄存器(1个固定用作CPSR,5个固固定用作5种模式下的SPSR)。这些寄存器在ARM体系结构中有着不同的用途和功能,可以用于保存程序状态、处理数据、控制指令执行等。

     (2)特殊功能寄存器

         特殊功能寄存器,属于外设硬件的组成部分。使用软件编程控制某一硬件,其实就是编程读写这个硬件的特殊功能寄存器。

(1)影子式设计

        上图中除了Abort模式列出所有的寄存器外,其他模式只列出对应位置该模式下特有的寄存器,没有列出的寄存器,则说明和Abort模式共用。比如User模式下有自己的r13和r14寄存器,其他寄存器和Abort模式相同。这样算下来,ARM总共有 37 个寄存器,但最多只能同时存在18个寄存器。有些寄存器虽然名字相同,但是在当前模式是不可见的。比如在ARM中有6个名叫r13的寄存器,但在特定处理器模式下,只有一个r13是当前可见的,其他的r13必须切换到对应的模式才能看到。这种设计叫影子寄存器。

        这样设计的好处是,当各种异常发生的时候,每种异常模式都可以保存一些重要的数据,异常处理程序完成之后返回异常前的程序时,不会破坏原有的寄存器或状态。

(2)重要的寄存器 

         这37个寄存器都是32位长度,值得重点理解的寄存器有以下几个。

        1.程序控制寄存器(PC,Program Control Register)

        这个寄存器存放着将要执行的指令的地址,它指向哪里,CPU就会执行哪条指令,所以程序跳转时把目标代码的地址放到PC寄存器中。注意,整个CPU只有一个PC寄存器。

        2.程序状态寄存器(CPSR,Current Program Status Register)

        这个寄存器用来记录CPU的当前状态。注意,整个CPU只有一个CPSR寄存器。

        3.程序状态保存寄存器(SPSR,Saved Program Status Register)

        用来保存CPSR的,子程序返回时将SPSR赋给CPSR。注意,整个CPU有5个SPSR寄存器。

        4.链接寄存器(LR,Link Register)

  这个寄存器的主要作用如下:

        一是调用子程序时,用来保存子程序返回地址(子程序返回时返回到哪个地址)。当通过bl或blx指令调用子程序时,硬件会自动将子程序返回地址保存在LR寄存器中。在子程序返回时,把LR的值复制到PC即可实现子程序返回。比如可以使用mov pc,lr完成子程序返回。

        二是当异常发生时,LR中保存的值等于异常发生时PC的值减4,因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。

 四.程序状态寄存器(CPSR)

        程序状态寄存器(CPSR)是ARM处理器中的重要寄存器之一,用于存储程序状态信息。CPSR包含了条件码标志、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。在任何处理器模式下,CPSR都可以被访问。它是一个32位的寄存器,用于存储当前程序的状态信息。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。

        CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和汇编指令息息相关(比如BLE指令中的E就和CPSR中的Z标志位有关)。CPSR中的I、F位和开中断、关中断有关。CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。

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

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

相关文章

华清远见嵌入式学习——C++——作业3

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;class Per { private:string name;int age;double *high;double *weight; public://有参构造函数Per(string n,int a,double h,double w):name(n),age(a),high(new double(h)),weight(ne…

Vue3.x 中 hooks 函数封装和使用

一、hooks 是什么 vue3 中的 hooks 就是函数的一种写法&#xff0c;就是将文件的一些单独功能的 js 代码进行抽离出来进行封装使用。 它的主要作用是 Vue3 借鉴了 React 的一种机制&#xff0c;用于在函数组件中共享状态逻辑和副作用&#xff0c;从而实现代码的可复用性。 注…

Python类型注解必备利器:typing模块解读指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。本文将深入探讨typing模块&#xff0c;介绍其基本概念、常用类型注解以及使用示例&am…

Web前端 ---- 【vue】vue 组件传值(props、全局事件总线、消息的订阅与发布)

目录 前言 父子组件 父传子 子传父 全局事件总线 什么叫全局事件总线 如何创建全局事件总线 如何在组件上获取到这个全局vc对象 最常用的创建全局事件总线 兄弟组件 消息订阅与发布 安装 使用 爷孙组件 前言 在上篇文章我们介绍了父子组件之间的传值通信&#xff…

写 SVG 动画必看!SVG系列文章3-动画标签

1、SMIL animation概览 SMIL不是指「水蜜梨」&#xff0c;而是Synchronized Multimedia Integration Language&#xff08;同步多媒体集成语言&#xff09;的首字母缩写简称&#xff0c;是有标准的。本文所要介绍的SVG动画就是基于这种语言。 SMIL允许你做下面这些事情&#…

单基因也可以这么做,经典生信文章思路,简单易复现更可升级

今天给同学们分享一篇生信文章“High Expression of PSRC1 Predicts Poor Prognosis in Lung Adenocarcinoma”&#xff0c;这篇文章发表在J Cancer期刊上&#xff0c;影响因子为3.9。 结果解读&#xff1a; LUAD和LUSC中PSRC1表达高 从TCGA数据集中&#xff0c;有535名LUAD患…

Redis实战篇笔记(最终篇)

Redis实战篇笔记&#xff08;七&#xff09; 文章目录 Redis实战篇笔记&#xff08;七&#xff09;前言达人探店发布和查看探店笔记点赞点赞排行榜 好友关注关注和取关共同关注关注推送关注推荐的实现 总结 前言 本系列文章是Redis实战篇笔记的最后一篇&#xff0c;那么到这里…

集成开发环境PyCharm的使用【侯小啾python基础领航计划 系列(三)】

集成开发环境 PyCharm 的使用【侯小啾python基础领航计划 系列(三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

从零开始实现神经网络(二)_CNN卷积神经网络

参考文章: 介绍卷积神经网络1 介绍卷积神经网络2 在过去的几年里&#xff0c;关于卷积神经网络&#xff08;CNN&#xff09;的讨论很多&#xff0c;特别是因为它们彻底改变了计算机视觉领域。在这篇文章中&#xff0c;我们将建立在神经网络的基本背景知识的基础上&#xff0c;探…

2023/12/4JAVAmysql

流程控制函数 部门不存在,这个不存在交集,所有没出现

【Docker实操】创建一个Node服务

一、安装node 请查看阿里云官网教程&#xff1a;如何快速部署Node.js项目。&#xff08;注意要在根目录操作&#xff09;apt install nodejs、apt install npm执行上面两个命名来安装 安装完成后&#xff0c;执行node -v、npm -v&#xff0c;如果出现版本&#xff0c;就是安装…

你好!斐波那契查找【JAVA】

1.有幸遇见 斐波那契查找算法&#xff0c;也称黄金分割查找算法&#xff0c;是一种基于斐波那契数列的查找算法。与二分查找类似&#xff0c;斐波那契查找也是一种有序查找算法&#xff0c;但它的查找点不是中间位置&#xff0c;而是根据斐波那契数列来确定&#xff0c;因此又称…

工程师业余生活之制作蔬菜盆景

工程师业余生活陶冶情操之制作蔬菜盆景 &#xff08;蔬 果 盆 景 裝 點 家 居&#xff09; 市場上好多蔬菜瓜果,稍用一些心思,將一些價廉的蔬果製成別致的盆景, 便能使家居充滿自然氣息&#xff0c;增添生活情趣。以下介紹幾種製作方法&#xff1a; 【番薯盆景】 (番薯又名地…

4K-Resolution Photo Exposure Correction at 125 FPS with ~8K Parameters

MSLTNet开源 | 4K分辨率125FPS8K的参数量&#xff0c;怎养才可以拒绝这样的模型呢&#xff1f; 错误的曝光照片的校正已经被广泛使用深度卷积神经网络或Transformer进行广泛修正。尽管这些方法具有令人鼓舞的表现&#xff0c;但它们通常在高分辨率照片上具有大量的参数数量和沉…

avue页面布局 api 引用

展示 index.vue <template><basic-container><avue-crud :option"option":table-loading"loading":data"data":page"page":permission"permissionList":search.sync"search":before-closebefore…

GitHub项目推荐-Deoldify

有小伙伴推荐了一个老照片上色的GitHub项目&#xff0c;看了简介&#xff0c;还不错&#xff0c;推荐给大家。 项目地址 GitHub - SpenserCai/sd-webui-deoldify: DeOldify for Stable Diffusion WebUI&#xff1a;This is an extension for StableDiffusions AUTOMATIC1111 w…

多多情报通:助力拼多多商家选品运营的数据分析工具

多多情报通&#xff08;原名多多参谋&#xff09;是一款专为拼多多商家设计的数据分析工具&#xff0c;旨在帮助商家进行选品、运营优化和提高销售业绩。通过多多情报通&#xff0c;商家可以更好地了解市场趋势、消费者需求和竞争对手状况&#xff0c;从而制定有效的运营策略。…

RH850P1X芯片学习笔记-Pin Functions

文章目录 Pin Connection Diagrams术语定义 Pin ListPort OverviewIntroductionFunctional OverviewPort CategoryOperation Mode运行模式 Port Function寄存器地址映射 Port寄存器描述Pn/JP0 — Port RegisterPPRn/JPPR0 — Port Pin Read RegisterPMn/JPM0 — Port Mode Regi…

VSCode 开发C/C++实用插件分享——koroFileHeader

相关文章 VSCode 开发C/C实用插件分享——codegeex VSCode 开发C/C实用插件分享——koroFileHeader 一、koroFileHeader二、使用步骤1.安装2.头文件注释配置3.函数注释配置 一、koroFileHeader 在有些场景下&#xff0c;我们需要在文件头添加一些作者、文件描述、时间和版权描述…

Redis主从复制实现RCE

文章目录 前置知识概念redis常用命令redis module 利用条件利用工具思路例题 [网鼎杯 2020 玄武组]SSRFMe方法一方法二 总结 前置知识 概念 背景是多台服务器要保存同一份数据&#xff0c;如何实现其一致性呢&#xff1f;数据的读写操作是否每台服务器都可以处理&#xff1f;这…