基于ARM v8的汇编语言简介

举报
Jack20 发表于 2021/04/21 15:10:52 2021/04/21
【摘要】 ARM指令集和微架构体系不同指令集之间的指令不同微架构是指指令集实现的方式,比如结合了性能、物理尺寸已经成本等多方面. ARMv7以后统一使用Cortex命名微架构。指令集命名规则:ARMv | n | variants | x ( variants )l    -ARMv --固定字符,即ARM Version    -n--指令集版本号。迄今为之,ARM架构版本发布了8个系列,所以n=[...

ARM指令集和微架构体系

不同指令集之间的指令不同

微架构是指指令集实现的方式,比如结合了性能、物理尺寸已经成本等多方面. ARMv7以后统一使用Cortex命名微架构。

指令集命名规则:ARMv | n | variants | x ( variants )l

    -ARMv --固定字符,即ARM Version

    -n--指令集版本号。迄今为之,ARM架构版本发布了8个系列,所以n=[1:8]。

    -variants --变种。

    -x ( variants)--排除x后指定的变种

微架构命名规则:ARM{xHyHzHTHDHMHIHEHJHFH-S}

    x--处理器系列

    y -- 存储管理/保护单元

    z-- cache

    T --支持Thumb指令集

    D--支持片上调试

    M--支持快速乘法器

    I--支持Embedded lCE,支持嵌入式跟踪调试

    E--支持增强型DSP指令

    J--支持Jazelle

    F--具备向量浮点单元VFP

    -S --可综合版本


ARMv8不同系列及应用场景

ARMv8的运行模式

-AArch64
在本模式下,所有地址保存在64位寄存器中,基本指令集可以使用64位寄存器来处理。AArch64状态下的指令集称为A64。
-AArch32
在本模式下,所有地址保存在32位寄存器中,基本指令集可以使用32位寄存器来处理。AArch32状态下的指令集可分为A32和T32。

ARMv8支持的数据类型

1、整型数据类型:

字节——8位

半字——16位

字——32位

双字——64位

四字——128位


2、浮点型数据类型:半精度、全精度、双精度


ARMv8特权级别划分

ARMv8将特权级别分为4个level,分别是ELO,EL1,EL2,EL3。而每个level的特权不一样的,特权大小ELO<EL1<EL2<EL3。
不同的level之间使用异常( exception)进行切换

1、一次执行必须包括EL0&1,EL2&3非必须但可以进行两者的任意组合,且不要求等级
连续。
2、Normal World代表的是普通世界,比如android手机中linux操作系统就在normal
world
3、Secure World就是安全世界,比如android手机中的高通的QSEE就是运行在Secure
World
4、EL0:普通用户应用程序
5、EL1:操作系统内核通常被描述为特权,在Secure World则就是Trusted os,比如高通的QSEE,开源的OP-TEE,豌豆荚的TEE等
6、EL2:管理程序,如hypervisor,ARM为了支持虚拟化,设计的Hypervisor层,只有在Noraml world使用。
7、EL3:低级固件,包括安全监视器,在应用处理器上,安全固件必须是系统启动的第一个程序。当noraml world想要访问secure world需要发送SMC指令进入SecureMoniter层,然后进入到Secure world

8、. Secure Moniter是安全世界和普通世界的桥梁,二者切换的时候需要通过其来切换。

9、普通世界由以下部分组成:
          (1)应用:运行在普通世界的应用程序。
          (2)GuestOS:这些包括在非安全EL1中运行的Linux或Windows。在虚拟机管理程序下运行时,操作系统内核可以作为客户机或主机运行,                      具体取决于虚拟机管理程序模式。
          (3)Hypervisor:这在EL2上运行。当管理程序出现并启用时,可以在多个客户操作系统之间进行切换操作。
10、安全世界有以下组件:
(1)安全APP:它提供了多种服务,包括平台初始化,可信操作系统的安装以及路由安全监视器的调用。安全固件在EL3上执行。
(2)可信的操作系统:可信的操作系统为普通世界提供安全服务,并为执行安全或受信任的应用程序提供运行时环境。它在EL3使用AArch64时在安全EL1上执行,在EL3使用AArch32时在安全EL3上执行。

ARMv8寄存器

一、ARMv8的通用寄存器

每个特权级别下都有31个通用寄存器

在AArch64运行模式下,寄存器的命名以“x”开头

在AArch32运行模式下,寄存器的命名以“w”开头

(1)在每个安全级别下都有31个通用寄存器. X29/W29为栈指针

(2)x30/W30为程序链接寄存器.W是x的低位

(3)参数寄存器(XO-X7):用作临时寄存器或可以保存的调用者保存的寄存器变量函数内的中间值,调用其他函数之间的值(8个寄存器可用于传递参数)

(4)来电保存的临时寄存器(X9-X15)∶如果调用者要求在任何这些寄存器中保留值调用另一个函数,调用者必须将受影响的寄存器保存在自己的堆栈中帧。它们可以通过被调用的子程序进行修改,而无需保存并在返回调用者之前恢复它们。

(5)被调用者保存的寄存器(X19-x29):这些寄存器保存在被调用者帧中。它们可以被被调用者修改子程序,只要它们在返回之前保存并恢复。

Wn寄存器对应Xn寄存器的低位

对wn寄存器写操作时,Xn寄存器的高位将被置0


二、ARMv8的特殊寄存器

Zero Register:零寄存器,读时返回全为o,写入时会被忽略Stack Pointer:堆指针

Program Counter:计时器

Exception Link Register:保存异常返回地址

Program Status Register:用于保存PSTATE

(1)不同的安全模式共用零寄存器和计数器寄存器,堆指针只有ELo模式下,其他寄存器每种模式都各自的。

(2)和通用寄存器一样,以X开头的特殊寄存器运行在AArch64模式下,以W开头的特殊寄存器运行在AARch32模式下。

(3)PSTATE表示的是保存当前process状态信息的一组寄存器或者一些标志位信息的统称,当异常发生的时候这些信息就会保存到EL所对应的SPSR寄存器当中


ARMv8指令集编码格式


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。