ARMV8 trace 32 模拟调试

ARMv8 简介

ARMv8 是首款支持 64 位指令集的 ARM 处理器架构,它兼容了 ARMv7 与之前处理器的技术基础,同样它也兼容现有的 A32(ARM 32bit)指令集,还扩充了基于 64bit 的 AArch64 架构。

下面我们一起来看看 ARMv8 一共定义了哪几种架构,一共有三种。

  • 1、ARMv8-A(Application)架构,支持基于内存管理的虚拟内存系统体系结构(VMSA),支持A64、A32和T32指令集,主打高性能,在我们的移动智能设备中广泛应用。

  • 2、RMv8-R(Real-time)架构,支持基于内存保护的受保护内存系统架构(PMSA),支持 A32 和 T32 指令集,一般用于实时计算系统。

  • 3、ARMv8-M(Microcontroller 架构),是一个压缩成本的嵌入式架构,而且需要极低延迟中断处理。它支持 T32 指令集的变体,主打低功耗,一般用于物联网设备。

寄存器 register

    1. 通用寄存器
    1. 特殊寄存器
    1. 系统寄存器

 

通用寄存器 R0-R30

首先来看通用寄存器(general-purpose registers),通用寄存器一共为 31 个,从 R0 到 R30,这个 31 个寄存器可以作为全 64 位使用,也可以只使用其中的低 32 位。
全 64 位的寄存器以 x0 到 x30 名称进行引用,用于 32 位或者 64 位的整数运算或者 64 位的寻址;低 32 位寄存器以 W0 到 W30 名称进行引用,只能用于 32 位的整数运算或者 32 位的寻址。

通用寄存器中还有 32 个向量寄存器(SIMD),编号从 V0 到 V31。因为向量计算依然是数据运算类的,所以要把它们归纳到通用寄存器中。每个向量寄存器都是 128 位的,但是它们可以单独使用其中的 8 位、16 位、32 位、64 位,它们的访问方式和索引名称如下所示。

  • Q0 到 Q31 为一个 128-bit 的向量寄存器 ;
  • D0 到 D31 为一个 64-bit 的向量寄存器;
  • S0 到 S31 为一个 32-bit 的向量寄存器;
  • H0 到 H31 为一个 16-bit 的向量寄存器;
  • B0 到 B31 为一个 8-bit 的向量寄存器;

特殊寄存器

特殊寄存器(spseical registers)比通用寄存器稍微复杂一些,它还可以细分,包括程序计数寄存器(PC),栈指针寄存器(SP),异常链接寄存器(ELR_ELx),程序状态寄存器(PSTATE、SPSR_ELx)等。

 

ELR_ELx 异常链接寄存器

每个异常状态下都有一个 ELR_EL 寄存器,ELR_ELx 寄存器是异常综合寄存器或者异常状态寄存器 ,负责保存异常进入 Elx 的地址和发生异常的原因等信息。

该寄存器只有 ELR_EL1、ELR_EL2、ELR_EL3 这几种,没用 ELR_EL0 寄存器,因为异常不会 routing(target) 到 EL0。例如:16bit 指令的异常、32bit 指令的异常、simd 浮点运算的异常、MSR/MRS 的异常。
 

PSTATE

PSTATE 不是单独的一个寄存器,而是保存当前 PE(Processing Element)状态的一组寄存器统称,其中可访问寄存器有:NZCV、DAIF、CurrentEL()、SPSel。这些属于 ARMv8 新增内容,在 64bit 下可以代替 CPSR(32 位系统下的 PE 信息)。

 

SPSR_ELx 程序状态寄存器

程序在运行中,处理大量数据,无非是进行各种数学运算,而数学运算的结果往往有各种状态,如进位、结果为 0、结果是负数等,还有程序的运行状态,是否允许中断,CPU 的工作模式,这些信息都保存在程序状态寄存器中,即 PSTATE 中。

但是当 CPU 处理异常时,进程相应的 ELx 状态不同,就要把 PSTATE 状态信息保存在 ELx 状态下对应的 SPSR_ELx 寄存器中。SPSR_ELx 寄存器的格式如下所示。
 

 

SPSR_ELx

 

 

系统寄存器

最后,ARM 的 CPU 上还有一些系统寄存器,用于访问系统配置。

在 EL0 状态下,大多数系统寄存器是不可访问的,但是部分系统寄存器可以在 EL0 状态下进行访问,比如 Cache ID 寄存器(用于 EL0 状态下缓存管理)、调试寄存器(用于代码调试,如 MDCCSR_EL0、DBGDTR_EL0 等)、性能监控寄存器和时钟寄存器等。

ARM-A Arch64 体系下 CPU 的工作模式

其实,AArch64、AArch32 体系都是简称,从严格意义上说,它们应该是处理器的两种执行方式或者状态。AArch64 体系执行 A64 指令集,这个指令集是全 64 位的;AArch32 体系则可以执行 A32 指令集和 T32 指令集(这节课我们不关注这个体系,所以这些指令集暂不深究)。

不管是 AArch64 体系还是 AArch32 体系,ARM CPU 的工作模式并没有差异

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值