ARM处理器共有37个寄存器,其中包括:

  • 31个通用寄存器,包括程序计数器(PC)在内,寄存器都是32位;
  • 6个状态寄存器,这些寄存器都是32位的,目前只使用了其中12位;

通用寄存器

可以分为下面3类:

  • 未备份寄存器,包括R0~R7;

对于每一个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。

  • 备份寄存器,包括R8~R14;

对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器,分别是快速中断模式下的寄存器和其他模式下的寄存器。

对于备份寄存器R13~R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式和系统模式共用。

R13在ARM中常用作栈指针,习惯性用法,没有强制规定。

R14又被称为连接寄存器(LR),在ARM体系中有两种特殊作用:

  1. 每一种处理器模式自己的物理R14中存放着当前子程序的返回地址。
  2. 当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移量,具体返回方式与子程序返回方式基本相同。R14寄存器也可以作为通用寄存器使用。
  • 程序计数器PC,即R15;

由于ARM采用了流水线机制,当正确读取了PC的值时,该值为当前指令地址值加8个字节,也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。由于ARM指令是字对齐的,PC值的第0位和第1位总为0。

需要注意的是:当使用指令STR/STM保存R15时,保存的可能是当前指令地址值加8字节,也可能保存的是当前指令地址加12字节,具体哪种方式,取决于芯片的具体设计。

程序状态寄存器

CPSR(当前程序状态寄存器),可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。

每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器),当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,在异常中断退出时,可以用SPSR中保存的值来恢复CPSR。

由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR,当在用户模式或系统模式中访问SPSR时,将会产生不可预知的结果。

ARM体系结构与编程读书笔记——处理器的寄存器的更多相关文章

  1. ARM体系结构与编程读书笔记——处理器的运行模式

    ARM处理器共有7种运行模式,如下表: 处理器模式 描述 用户模式(User, usr) 正常程序执行的模式 快速中断模式(FIQ, fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ, ir ...

  2. C++Windows核心编程读书笔记

    转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...

  3. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  4. Node.js高级编程读书笔记Outline

    Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...

  5. python高级编程读书笔记(一)

    python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...

  6. unix环境高级编程-读书笔记与习题解答-第一篇

    从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...

  7. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  8. MacTalk·人生元编程 - 读书笔记

    简介 <MacTalk·人生元编程>是一本随笔文集,主要内容来自作者的微信公众平台"MacTalk By 池建强".本书撰写于2013年,书中时间线却不止于此.作者以一 ...

  9. JavaScript 函数式编程读书笔记2

    概述 这是我读<javascript函数式编程>的读书笔记,供以后开发时参考,相信对其他人也有用. 说明:虽然本书是基于underscore.js库写的,但是其中的理念和思考方式都讲的很好 ...

随机推荐

  1. idea-配置文件提示红色

    Idea建立spring配置文件首行红色 提示URI is not registered 复制出现红色字体的路径...File -  Settings  - schemas and DtDs 点击加号 ...

  2. 【计算机视觉】opencv读取多个摄像头

    [计算机视觉]opencv读取多个摄像头 标签(空格分隔): [图像处理] 说明:今天蹭了机器视觉课程,讲到了stereopsis,立体视觉,讲到了关于通过多个摄像头获取object的depth信息的 ...

  3. Linux下配置APUE的编译 报错之后如何处理

    APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢? 官方地址:http://www.apuebook.com/apue3e.html 1 ...

  4. 算法详解之Tarjan

    "tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往"----<膜你抄> 一.tarjan求强连通分量 什么是强连通分量? 引用来自 ...

  5. 六扇门团队作业 ——《DorMi宿舍管理系统需求分析》

    团队作业 --<需求分析> 一.格式描述 这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 六扇门 这个作业的目标 通过对用户 ...

  6. Cent7.2单用户模式

      1. 在进入系统时选择内核启动. 2. 按'e'进入编辑模式,找到带有内核的那一行. 3. 将ro(read only)改为rw init=/sysboot/bin/sh. 4. 按下ctrl+x ...

  7. HanLP-朴素贝叶斯分类预测缺陷

    文章整理自 baiziyu 的知乎专栏,感兴趣的朋友可以去关注下这位大神的专栏,很多关于自然语言处理的文章写的很不错.昨天看到他的分享的两篇关于朴素贝叶斯分类预测的文章,整理了一下分享给给大家,文章已 ...

  8. html中'disabled'与'readonly'的区别

    html中'disabled'与'readonly'的区别 此随笔增量编辑 disabled 在提交表单的时候 值不会带入表单中, 而readonly则可以将值带入表单中.

  9. 【AtCoder】AGC008

    AGC008 A - Simple Calculator 如果符号相同,那么如果y比x大直接走,否则需要两次反号 如果符号不同,需要绝对值的差加一次反号 如果有一个是0,且y比x要小,那只需要一次反号 ...

  10. POJ3046ANT_COUNTING

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...