首页 > 编程知识 正文

arm汇编,arm处理器架构

时间:2023-05-06 20:06:22 阅读:130460 作者:2214

AArch64 state的寄存器分为一般寄存器和特殊寄存器,也有只能在特权执行模式下使用的寄存器。

31个64位一般寄存器X0-X30通过W0-W30连接到其中低32位. 4个堆栈指针的寄存器SP_EL0、SP_EL1、SP_EL2、SP_EL3个异常链路寄存器Elr

没有W31或X31寄存器。 根据指令,寄存器31通常是堆栈寄存器或零寄存器。 用作堆栈寄存器时用SP表示,用作零寄存器时用wzr(32位)或xzr (64位)表示。

Exception levels、异常等级Armv8有4个异常等级,从EL0到EL3,EL3是最高的异常等级,具有最高的执行权限。

El 0: APP应用程序. EL1:操作系统内核. El2:虚拟机管理程序、虚拟机监视器. El:安全模式、TrustZone .出现异常且处于更高的异常级别时

如果返回到较低异常水平,则执行状态可以保持不变,也可以从AArch64变更为AArch32。

异常等级仅在发生异常或从异常返回时变更。

可以认为Link registers、链接寄存器是AArch64状态、Link Register(LR是存储返回地址,即使实际映射到寄存器30,只要返回地址存储在堆栈中,通常的寄存器就可以认为是返回地址LR与exceptionlinkregisters(eLRs )的不同之处在于LR未分组。 除EL0外,每个异常级别都有一个ELR。

ELR_EL[1-3]分别对应于相应的异常等级。 发生异常时,ELR寄存器中保存中断代码的返回地址。 异常来自AArch32状态时,ELR的前32位均为0。 异常级别相同的跳转使用LR保存返回地址。

例如,当异常电平从EL0改变为EL1时,将返回地址存储在ELR_EL1中。

进入某个异常级别时,如果打开了相同异常级别的中断,则必须确保ELR存储在堆栈中。 这是因为在发生中断时,ELR会被新的返回地址复盖。

堆栈指针寄存器register,堆栈寄存器SP_EL0是SP的别名,SP实际上使用寄存器31。

SP只能在以下命令中用作操作数:

作为加载和存储的基本寄存器,在这种情况下,在添加偏移之前必须对齐4个字。 Arm体系结构的一个字必须为32位,四个字必须为128位,即十六进制地址的最低有效位必须为0。 否则,将发生堆栈对齐异常。 用作算术指令的源或目标,但不能在设置条件标志" condition flags "的指令中用作目标。 在逻辑命令中,例如对其。 这三个异常级别都有自己的堆栈指针SP_EL[1-3],每个异常级别都可以使用自己的堆栈寄存器和SP_EL0。 可以使用SPSel寄存器选择要在当前异常级别使用的堆栈指针。

堆栈指针的选择由异常级别名称后面的小写字母t或h指定,例如EL0t或EL3h。 后缀t表示使用SP_EL0,后缀h表示使用SP_ELx,x表示异常级别的数字。 EL0只使用SP_EL0,因此没有h后缀。

程序计数(PC、程序计数器) in AArch64 state PC )当前正在执行的指令的地址。 根据要执行的指令的大小而递增,通常为4字节。

在AArch64的状态下,不能直接访问PC。 以下命令隐式访问:

计算PC相对地址的命令PC相对地址的load直接分支(跳转)为PC相对标签branchandlink(bl )跳转命令,保存可以从PC写入lr.PC的命令。

条件分支和非条件分支的异常发生和异常恢复分支指令将目标地址加载到PC中。

conditionalexecutioninaarch 64 stateconditionflagsn :操作结果为负值集1,否则为清0Z :操作结果为零集1,否则为清0C :操作结果导致进位,或者为减法结果否则清0V:overflow溢出1 NZCV寄存器保存n、z、c、v条件标志的副本,保存在bits[31:28]中,处理器用他们来决定是否执行条件指令。

可以在任何异常级别访问条件标志,并使用Mrs (读)和MSR (写)。

处理状态

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。