我是ARMv8架构的新手。我在脑海中有以下基本问题:什么是当前执行模式/异常级别等?
如何知道当前执行模式AArch32或AArch64是什么?我应该阅读CPSR还是SPSR来确定?
什么是当前异常级别EL0/1/2/3?
一旦发生异常,我可以读取任何寄存器以确定我是否处于Serror/Synchronous/IRQ/FIQ异常处理程序。
TIA。
我是ARMv8架构的新手。我在脑海中有以下基本问题:什么是当前执行模式/异常级别等?
如何知道当前执行模式AArch32或AArch64是什么?我应该阅读CPSR还是SPSR来确定?
什么是当前异常级别EL0/1/2/3?
一旦发生异常,我可以读取任何寄存器以确定我是否处于Serror/Synchronous/IRQ/FIQ异常处理程序。
TIA。
#ifdef
)通过像由armclang
提供的那些编译器提供的宏完成:__aarch64__
为64位,__arm__
为32位MRS <Rn>, CPSR
将当前状态读入寄存器编号n。然后提取包含当前模式的位3:0。MRS <Xn>, CurrentEL
读取当前EL到寄存器个数n
“我怎么知道当前的执行模式AArch32或AArch64?” - 我想如果代码试图检查模式是编译为64位,模式是64位;如果它编译为32位,则该模式为32位。 – JimmyB