ARMv8
文章平均质量分 95
差不太多先生
这个作者很懒,什么都没留下…
展开
-
ARMv8内存模型
内核空间和用户空间有单独的转换表,这意味着它们的映射可以分开保存。EL0/EL1 使用左边的地址空间,EL2/EL3使用右边的。两者 的空间范围如图所示,是可伸缩的。任何超出配置范围的地址在被访问时都会生成异常作为转换错误原创 2023-07-16 17:27:06 · 2321 阅读 · 0 评论 -
ARMv8 异常模型
例如,EL1 的操作系统内核可能会禁用 EL0 的浮点指令,以节省应用程序之间上下文切换的时间。ARM v8有4个异常级别,每一个异常级别对应一个 VBAR(Vector Base Address Register) 寄存器,用来指向异常向量表的基地址,同时每一个异常向量表会分为4组,每一组包含4 种异常,导致无效指令的原因有很多,包括未定义的指令、当前异常级别不允许的指令或已被禁用的指令。复杂的系统可能有许多具有不同优先级的中断源,包括嵌套中断处理的能力,其中较高优先级的中断可以中断较低优先级的中断。原创 2023-07-16 17:23:24 · 1657 阅读 · 0 评论 -
ARMv8指令集架构
load的值0x1F的最高位是空的。此处被编译为LDR(literal)指令(将label的链接地址编码进imm19),加载到x0寄存器中的是label的链接地址。基址寄存器是一个X寄存器,它包含被访问数据的完整的或绝对的虚拟地址,如下图所示,LDR指令把X1寄存器中的值作为内存地址,读出其中的数值到W0寄存器中。说明3:标号(label)本质上是一个数值,即符号地址(链接地址),相当于PC+编码偏移值=label(目标地址)(具体在编码中可体现),并且默认情况下,标号只在定义它的源文件中可见。原创 2023-07-16 17:19:06 · 1193 阅读 · 0 评论 -
ARMv8寄存器
该架构提供了 31 个通用寄存器。每个寄存器都可以用作 64 位 X 寄存器 (X0…X30),或用作 32 位 W 寄存器 (W0…W30)。这是查看同一寄存器的两种不同方式。比如这张寄存器图,W0是X0的低32位,W1是X1的低32位:图 1.寄存器图对于数据处理指令,选择X或W决定操作的大小。使用X寄存器将导致 64 位计算,使用 W 寄存器将导致 32 位计算。此示例执行 32 位整数加法:ADD W0, W1, W2此示例执行 64 位整数加法:ADD X0, X1, X2。原创 2023-07-16 17:09:44 · 1423 阅读 · 0 评论