历史上的今天
返回首页

历史上的今天

今天是:2024年12月22日(星期日)

2021年12月22日 | ARMv8-A笔记三 ARMv8的寄存器

2021-12-22 来源:eefocus

一 通用寄存器

AArch64执行状态有31个64位的通用寄存器,这些寄存器在所有ELn中均可使用,命名为X0-X30:

在这里插入图片描述

每个AArch64 64位通用寄存器X0-X30都有一个对应的32位寄存器,Wn寄存器是Xn寄存器的底32位:

在这里插入图片描述

读Wn寄存器时会保持Xn寄存器的高32位不变,如果写W寄存器时,会将X寄存器的高32位设为0


二 AArch64 特殊寄存器

除了以上31个通用寄存器外,还有几个特殊寄存器:

在这里插入图片描述

注意:没有叫做X31/W31的寄存器,一些指令会将31号寄存器编译为zero 寄存器WZR/XZR,极少情况下会将31号指为栈指针SP


特殊寄存器命令如下,注意AArch64下的SP没有前缀:

在这里插入图片描述

zero register

写操作被忽略,读操作都返回0

在这里插入图片描述

SP/WSP

当前栈指针


PC program counter

ARMv7指令集使用通用寄存器R15作为PC,直接操作PC可以做一些机智的编程操作,但是ARMv8不能直接进入PC,这使返回更好预测,并且使ABI规范更加简单。


ELR / SPSR

当armV8执行在AArch64,每个ELn异常返回状态取决于ELR和SPSR

ELR exception link register 保存exception返回地址

SPSR saved processor state register 执行exception前保存当前的processor state, 执行exception完返回时restore

在ARMv8中,如果异常发生在EL1,就使用SPSR_EL1,如果发生在EL2, 使用SPSR_EL2,如果发生在EL3, SPSR_EL3使用

ELR 和SPSR时成对的,其和对应的ELn相关

在这里插入图片描述

SP 每个 exception level 都有对应的 SP:

在这里插入图片描述

大多数指令不会涉及SP寄存器,但是一些术指令会操作SP,比如:

ADD SP, SP, #0x10 // adjust SP to be 0x10 bytes before its current value


三 processor state

AArch64中没有像ARMv7中的CPSR,但有一个类似的PSTATE.

当执行指令ERET从一个异常返回时,会将SPSR_ELn拷贝到PSTATE。

在这里插入图片描述

四 system register 系统寄存器

在AArch64中,控制system configuration是通过 system register的,使用MSR 和 MRS指令进入system register。

相比于ARMv7中,ARMv7使用CP15协处理器进入这些寄存器

这些寄存器的名字告诉了你最低的可以访问的异常级别,比如:

TTBR0_EL1, 可以被EL1 EL2 EL3访问

TTBR0_EL2, 可以被EL2 EL3访问

几乎没有system register可以从EL0访问,但是 cache type register CTR_EL0是个例外


代码通过如下方式进入system register :

MRS x0, TTBR0_EL1 // move TTBR0_EL1 into x0

MSR TTBR0_EL1, x0 //move x0 into TTBR0_EL1


ARMv8之前的版本使用协处理器来做system configuration,但是AArch64不支持协处理器


system registers 具体有哪些寄存器,请看4.3章


比如system registers 中的系统控制寄存器SCTLR:SCTLR_ELn


五 大小端

六 改变执行状态

笔记二中描述AArch64和AArch32直接的转换是从ELn角度,这里从寄存器角度

当一个运行AArch32的exception level进入到运行AArch64的exception level时:


对于运行AArch32的较低exception level可以访问的高32位寄存器值是未知的

AArch32执行时不能进入的寄存器值依然保留其执行AArch32前的值

EL2处于AArch32状态,异常进入EL3时, ELR_EL2寄存器的高32位未知

  1. 在这里插入图片描述

在AArch32状态下的寄存器:

v8向后兼容,ARMv7有16个32位通用寄存器R0-R15, R15作为PC, 软件也可以访问CPSR, 发生异常时将CPSR的值可以保存到SPSR

ARMv7寄存器如下:

在这里插入图片描述

AArch64有31个在任何时间任何exception level都可以访问的64位寄存器, 所以在AArch64和AArch32之间转换时,AArch64的寄存器要映射到AArch32下的寄存器:

在这里插入图片描述

七 NEON和浮点寄存器

armV8有32个 128bit的浮点寄存器 V0-V31. 这32个寄存器用来处理标量浮点预算和NEON指令指令

推荐阅读

史海拾趣

GigPeak公司的发展小趣事

面对日益激烈的市场竞争和技术变革的挑战,GigPeak始终保持着对创新的执着追求。公司不断加大研发投入,积极探索新技术、新应用和新市场。在2020年,GigPeak成功研发出了一款基于人工智能技术的智能网络优化解决方案。该方案能够实时监测网络流量、分析数据特征并自动调整网络配置,从而显著提升网络性能和用户体验。这一创新成果不仅巩固了GigPeak在业界的领先地位,还为其未来的发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在反映电子行业公司可能经历的成长历程。关于GigPeak公司的具体发展故事,建议直接访问其官方网站或查阅相关新闻报道以获取准确信息。

Chino-Excel公司的发展小趣事

面对日益严峻的环境问题,Chino-Excel公司积极倡导环保理念,将绿色生产贯穿于整个产业链。公司采用环保材料和节能技术,降低产品生产和运营过程中的能耗和排放。同时,公司还积极参与环保公益活动,推动整个行业向更加环保、可持续的方向发展。

AMI [American Megatrends Inc]公司的发展小趣事

在发展过程中,Chino-Excel公司注重品牌建设和市场推广。公司投入大量资金进行品牌宣传和推广活动,提升品牌知名度和美誉度。同时,公司积极参加国际电子展会和行业交流活动,与国内外客户建立广泛的联系和合作,为公司的快速发展奠定了坚实基础。

Hi-Tron Semiconductor Corp公司的发展小趣事

面对日益严峻的环境问题,Chino-Excel公司积极倡导环保理念,将绿色生产贯穿于整个产业链。公司采用环保材料和节能技术,降低产品生产和运营过程中的能耗和排放。同时,公司还积极参与环保公益活动,推动整个行业向更加环保、可持续的方向发展。

Abundance Enterprise Company公司的发展小趣事

随着国内市场的逐渐饱和,Abundance Enterprise Company开始积极拓展国际市场。公司积极参与国际电子展览和交流活动,与全球知名电子企业建立了广泛的合作关系。同时,公司还在海外设立了多个分支机构,进一步拓展国际业务。这些举措不仅提升了公司的国际影响力,也为公司的长期发展奠定了坚实基础。

Block USA Inc.公司的发展小趣事

在发展过程中,Block USA Inc.也面临着来自竞争对手和行业变化的挑战。然而,公司始终保持着创新精神,不断调整和优化产品与服务,以适应市场的变化。例如,面对数据安全和隐私保护的日益严格要求,Block加强了其数据保护措施,并公开承认了数据泄露事件并积极采取措施进行补救。同时,公司还继续拓展其业务边界,探索新的增长点,以保持其在电子行业中的竞争优势。

这些故事只是Block USA Inc.在电子行业发展历程中的一部分,它们展示了公司如何通过不断创新和拓展业务领域,逐步成为一家具有影响力的综合性电子企业。然而,随着市场的不断变化和竞争的加剧,Block仍需保持警惕并持续努力,以应对未来的挑战和机遇。

问答坊 | AI 解惑

仪器仪表

本帖最后由 paulhyde 于 2014-9-15 09:20 编辑 各位大哥们,本人现在要弄一个简易数字频率计,1997年的题目,谁有相关资料(最好有些程序),谢谢了!  …

查看全部问答>

下班前的那段时间大家都在干什么

是忙着上厕所、关电脑、喝水?发呆,等着时间到?简单总结当天的工作,想想明天的计划?不管别人什么时候走,自己做完手里的事再走? 还是抓紧时间来EEWORLD灌灌水? 简直就是办公室百态图啊…

查看全部问答>

心电监护仪 介绍

(一)监测内容   监护仪是重症监护病房( ICU )的最重要、最基本的设备之一。每一个心脏手术的病人术毕返回 ICU 后必须进行循环、呼吸检测以确保全身组织的灌注压及氧的供应,维持血液动力学稳定,及早诊断及处理各种术后并发症,因此监护仪是 I ...…

查看全部问答>

高分求:VCS 或 Vera 的中文教程

我是一个新手,想要学习VCS  或 Vera ,在网上找了好久也没有找到中文版教程,不知那问高手有VCS  或 Vera  中文版教程?我的邮箱是: 403976434@qq.com 谢谢了!…

查看全部问答>

学习嵌入式LINUX的好地方,嵌入式LINUX论文免费读

学习嵌入式LINUX的好地方,嵌入式LINUX论文免费读 http://www.docin.com/mydoc-10414446-1.html&folderId=66866…

查看全部问答>

实现低功耗有哪些常用方法

我在做一个智能电子体温计,要求实现低功耗,系统电流小于0.3毫安。不能用贴片元件,我知道的方法就是所有三极管全用mos管,还有其他方法么?!…

查看全部问答>

sqlce数据库问题

我用的sqlce数据库 生成sqlcecommand = sqlceconnection.creatCommand() 总是说InvalidOperationException是怎么回事?…

查看全部问答>

FPGA心得体会-时序是设计出来的

我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来的。&n ...…

查看全部问答>

MSP430单片机通用系统研制和应用

MSP430单片机通用系统研制和应用…

查看全部问答>

上位机软件终于搞定了

经过连续几天的上位机软件编写,终于搞定了上位机软件,感觉要做好一个稳定性比较强的软件还是不容易的,在其中碰到过好多问题,尤其是编写串口这块,我不仅仅是完成接受数据和发送数据的功能还考虑了如果接受海量数据,软件假死如何解决的问题。还 ...…

查看全部问答>