assembly - 如何在ARMv8中ERET到相同的异常级别?

标签 assembly arm

已知如何从异常级别返回到上一个异常级别(set elr_el3 -> set spsr_el3 ->execute eret),但是如何从 EL3 ERET 到同一个 EL3?在 ARM 的官方文档中,我发现了这样一句话: “从异常返回可以停留在相同的异常级别或进入较低的异常级别。它不能移动到更高的异常级别。”。

最佳答案

ERET 指令可用于返回到 CPU 支持的相同或任何较低的异常级别。如果存储在 SPSR_EL3.M[4:0] 中的已保存模式字段设置为 0b011010b01100,其中位 M[ 3:2]编码异常级别为3,那么在EL3执行的ERET指令将返回到EL3。

请参阅 ARM Architecture Reference Manual -- ARMv8, for ARMv8-A architecture profile 中的“D1.6.4 保存的程序状态寄存器 (SPSR)”部分了解有关 SPSR_ELx 寄存器如何布局的更多详细信息。

关于assembly - 如何在ARMv8中ERET到相同的异常级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45878436/

相关文章:

assembly - 什么是 Irvine32 库,我们为什么要使用它?

c - 读取 GPIOB_IDR 寄存器时的值不正确

c - 如何强制链接器将字符串数组的 const 数组存储到闪存中(而不是 RAM)

c++ - movl多数据指令与汇编优化比较

c - 将字段中的位扩展到掩码中所有(重叠+相邻)设置位的最快方法?

c++ - 目标代码可以转换回 LLVM IR 吗?

assembly - 如何在 NASM 中使用 scanf?

用 C 调用 Lua 字符串

arm - 有没有办法将数据从应用程序直接发送到 JTAG 端口? (皮质-M3)

arm - 平台相关的 Docker 镜像 - 如何?