当前位置: 星创客 > 学习资源 > 讲师博文 > ARM-v8架构分析
ARM-v8架构分析 时间:2018-02-02     来源:星创客

2011年11月,ARM公司发布了新一代处理器架构ARMv8的部分技术细节。这是ARM公司的首款支持64位指令集的处理器架构。由于ARM处理器的授权内核被广泛用于手机等诸多电子产品,故ARMv8架构作为下一代处理器的核心技术而受到普遍关注。ARM将在2012年间推出基于ARMv8架构的处理器内核并开始授权,而面向消费者和企业的样机于2013年由苹果的A7处理器上首次运用。

ARM-v8是在32位ARM架构上进行开发的,将被首先用于对扩展虚拟地址和64位数据处理技术有更高要求的产品领域,如企业应用、高档消费电子产品。

ARMv8架构包含两个执行状态:AArch64和AArch32。AArch64执行状态针对64位处理技术,引入了一个全新指令集A64;而AArch32执行状态将支持现有的ARM指令集。目前的ARMv7架构的主要特性都将在ARMv8架构中得以保留或进一步拓展,如:TrustZone技术、虚拟化技术及NEON advanced SIMD技术,等。

配合ARMv8架构的推出,ARM正在努力确保一个强大的设计生态系统来支持64位指令集。ARM的主要合作伙伴已经能够获得支持ARM-v8架构的ARM编译器和快速模型(Fast Model)。在新架构的支持下,对一系列开源操作系统、应用程序和第三方工具的初始开发已经在开展中。通过合作,ARM合作伙伴们共同加速64位生态系统的开发,在许多情况下,这可视为是对现有支持基于ARMv7架构产品的广泛生态系统的自然延伸。

ARM-v8架构属于64位架构,向下兼容ARM-v7架构。ARM-v8架构支持两种类型的ARM指令集,一种是Aarch64位指令集,一种是Aarch32位指令集。不管是那种类型的指令集,每条指令依然都是字(4字节)对齐。两种类型指令集的本质区别是工作寄存器的位数不同,Aarch32位指令集使用32bit工作寄存器,而Aarch64位指令集使用64bit工作寄存器。

ARMv8 提供AArch32 state和 AArch64 state 两种Execution State,下面是两种Execution State对比.

Execution State Note

 

 

 

AArch32 提供13个32bit通用寄存器R0-R12,一个32bit PC指针 (R15)、堆栈指针SP (R13)、链接寄存器LR (R14)

提供一个32bit异常链接寄存器ELR, 用于Hyp mode下的异常返回

提供32个64bit SIMD向量和标量floating-point支持

提供两个指令集A32(32bit)、T32(16/32bit)

兼容ARMv7的异常模型

协处理器只支持CP10\CP11\CP14\CP15

 

 

 

 

AArch64 提供31个64bit通用寄存器X0-X30(W0-W30),其中X30是程序链接寄存器LR

提供一个64bit PC指针、堆栈指针SPx 、异常链接寄存器ELRx

提供32个128bit SIMD向量和标量floating-point支持

定义ARMv8异常等级ELx(x<4),x越大等级越高,权限越大

定义一组PE state寄存器PSTATE(NZCV/DAIF/CurrentEL/SPSel等),用于保存PE当前的状态信息

没有协处理器概念

 

AArch32重要寄存器

寄存器类型 Bit 描述

R0-R14 32bit 通用寄存器,但是ARM不建议使用有特殊功能的R13,R14,R15当做通用寄存器使用.

SP_x 32bit 通常称R13为堆栈指针,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/irq/fiq/hyp/mon}

LR_x 32bit 称R14为链接寄存器,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/svc/irq/fiq/mon},用于保存程序返回链接信息地址,AArch32环境下,也用于保存异常返回地址,也就说LR和ELR是公用一个,AArch64下是独立的.

ELR_hyp 32bit Hyp mode下特有的异常链接寄存器,保存异常进入Hyp mode时的异常地址

PC 32bit 通常称R15为程序计算器PC指针,AArch32 中PC指向取指地址,是执行指令地址+8,AArch64中PC读取时指向当前指令地址.

CPSR 32bit 记录当前PE的运行状态数据,CPSR.M[4:0]记录运行模式,AArch64下使用PSTATE代替

APSR 32bit 应用程序状态寄存器,EL0下可以使用APSR访问部分PSTATE值

SPSR_x 32bit 是CPSR的备份,除了User和Sys模式外,其他各种模式下都有对应的SPSR_x寄存器:x ={ und/svc/abt/irq/fiq/hpy/mon},注意:这些模式只适用于32bit运行环境

HCR 32bit EL2特有,HCR.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由

SCR 32bit EL3特有,SCR.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由,注意EL3始终不会路由

VBAR 32bit 保存任意异常进入非Hyp mode & 非Monitor mode的跳转向量基地址

HVBAR 32bit 保存任意异常进入Hyp mode的跳转向量基地址

MVBAR 32bit 保存任意异常进入Monitor mode的跳转向量基地址

ESR_ELx 32bit 保存异常进入ELx时的异常综合信息,包含异常类型EC等,可以通过EC值判断异常class

PSTATE 不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,主要用于64bit环境下

 

A32状态下寄存器组织

 

• 所谓的banked register 是指一个寄存器在不同模式下有对应不同的寄存器,比如SP,在abort模式下是SP_bat,在Und模式是SP_und,在iqr模式下是SP_irq等,进入各种模式后会自动切换映射到各个模式下对应的寄存器.

• R0-R7是所谓的非banked register,R8-R14是所谓的banked register

4.1.1 T32状态下寄存器组织

A32使用

Rd/Rn编码位宽4位 T32-32bit使用

Rd/Rn编码位宽4位 T32-16bit使用

Rd/Rn编码位宽3位

R0 R0 R0

R1 R1 R1

R2 R2 R2

R3 R3 R3

R4 R4 R4

R5 R5 R5

R6 R6 R6

R7 R7 R7

R8 R8 并不是说T32-16bit下没有R8~R12,而是有限的指令才能访问到,16bit指令的Rd/Rn编码位只有3位,所以Rx范围是R0-R7

R9 R9

R10 R10

R11 R11

R12 R12

SP (R13) SP (R13) SP (R13)

LR (R14) LR (R14) //M LR (R14) //M

PC (R15) PC (R15) //P PC (R15) //P

CPSR CPSR CPSR

SPSR SPSR SPSR

 

AArch64重要寄存器

寄存器类型 Bit 描述

X0-X30 64bit 通用寄存器,如果有需要可以当做32bit使用:WO-W30

LR (X30) 64bit 通常称X30为程序链接寄存器,保存跳转返回信息地址

SP_ELx 64bit 若PSTATE.M[0] ==1,则每个ELx选择SP_ELx,否则选择同一个SP_EL0

ELR_ELx 64bit 异常链接寄存器,保存异常进入ELx的异常地址(x={0,1,2,3})

PC 64bit 程序计数器,俗称PC指针,总是指向即将要执行的下一条指令

SPSR_ELx 32bit 寄存器,保存进入ELx的PSTATE状态信息

NZCV 32bit 允许访问的符号标志位

DIAF 32bit 中断使能位:D-Debug,I-IRQ,A-SError,F-FIQ ,逻辑0允许

CurrentEL 32bit 记录当前处于哪个Exception level

SPSel 32bit 记录当前使用SP_EL0还是SP_ELx,x= {1,2,3}

HCR_EL2 32bit HCR_EL2.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由 逻辑1允许

SCR_EL3 32bit SCR_EL3.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由  逻辑1允许

ESR_ELx 32bit 保存异常进入ELx时的异常综合信息,包含异常类型EC等.

VBAR_ELx 64bit 保存任意异常进入ELx的跳转向量基地址 x={0,1,2,3}

PSTATE 不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,64bit下代替CPSR

 

64、32位寄存器的映射关系

64-bit 32-bit

 

 

 

 

 

 

 

 

64-bit OS

Runing

AArch32 App 64-bit 32-bit

X0 R0 X20 LR_adt

X1 R1 X21 SP_abt

X2 R2 X22 LR_und

X3 R3 X23 SP_und

X4 R4 X24 R8_fiq

X5 R5 X25 R9_fiq

X6 R6 X26 R10_fiq

X7 R7 X27 R11_fiq

X8 R8_usr X28 R12_fiq

X9 R9_usr X29 SP_fiq

X10 R10_usr X30(LR) LR_fiq

X11 R11_usr SCR_EL3 SCR

X12 R12_usr HCR_EL2 HCR

X13 SP_usr VBAR_EL1 VBAR

X14 LR_usr VBAR_EL2 HVBAR

X15 SP_hyp VBAR_EL3 MVBAR

X16 LR_irq ESR_EL1 DFSR

X17 SP_irq ESR_EL2 HSR

X18 LR_svc

X19 SP_svc

ARMv8指令集

• A64指令集

• A32 & T32指令集

• 指令编码基本格式

<Opcode>{<Cond>}<S>  <Rd>, <Rn> {,<Opcode2>}

 

• 其中尖括号是必须的,花括号是可选的

• A32: Rd => {R0–R14}  

• A64: Rd =>Xt => {X0–X30}

 

标识符 Note

Opcode 操作码,也就是助记符,说明指令需要执行的操作类型

Cond 指令执行条件码,在编码中占4bit,0b0000 -0b1110

S 条件码设置项,决定本次指令执行是否影响PSTATE寄存器响应状态位值

Rd/Xt 目标寄存器,A32指令可以选择R0-R14,T32指令大部分只能选择RO-R7,A64指令可以选择X0-X30 or W0-W30

Rn/Xn 第一个操作数的寄存器,和Rd一样,不同指令有不同要求

Opcode2 第二个操作数,可以是立即数,寄存器Rm和寄存器移位方式(Rm,#shit)

 

指令分类

类型 Note

• 跳转指令 条件跳转、无条件跳转(#imm、register)指令

• 异常产生指令 系统调用类指令(SVC、HVC、SMC)

• 系统寄存器指令 读写系统寄存器,如 :MRS、MSR指令 可操作PSTATE的位段寄存器

• 数据处理指令 包括各种算数运算、逻辑运算、位操作、移位(shift)指令

• load/store

内存访问指令 load/store {批量寄存器、单个寄存器、一对寄存器、非-暂存、非特权、独占}以及load-Acquire、store-Release指令 (A64没有LDM/STM指令)

• 协处理指令 A64没有协处理器指令

 

A64指令集

• A64指令编码宽度固定32bit

• 31个(X0-X30)个64bit通用用途寄存器(用作32bit时是W0-W30),寄存器名使用5bit编码

• PC指针不能作为数据处理指或load指令的目的寄存器,X30通常用作LR

• 移除了批量加载寄存器指令 LDM/STM, PUSH/POP, 使用STP/LDP 一对加载寄存器指令代替

• 增加支持未对齐的load/store指令立即数偏移寻址,提供非-暂存LDNP/STNP指令,不需要hold数据到cache中

• 没有提供访问CPSR的单一寄存器,但是提供访问PSTATE的状态域寄存器

• 相比A32少了很多条件执行指令,只有条件跳转和少数数据处理这类指令才有条件执行.

• 支持48bit虚拟寻址空间

• 大部分A64指令都有32/64位两种形式

• A64没有协处理器的概念

 

指令助记符

整型

W/R 32bit整数

X 64bit整数

加载/存储、符号-0扩展

B 无符号8bit字节

SB 带符号8bit字节

H 无符号16bit半字

SH 带符号16bit半字

W 无符号32bit字

SW 带符号32bit字

P Pair(一对)

寄存器宽度改变

H 高位(dst gets top half)

N 有限位(dst < src)

L Long (dst > src)

W Wide (dst==src1,src1>src2) ?

 

指令条件码

编码 助记符 描述 标记

0000 EQ 运算结果相等为1 Z==1

0001 NE 运算结果不等为0 Z==0

0010 HS/CS 无符号高或者相同进位,发生进位为1 C==1

0011 LO/CC 无符号低清零,发生借位为0 C==0

0100 MI 负数为1 N==1

0101 PL 非负数0 N==0

0110 VS 有符号溢出为1 V==1

0111 VC 没用溢出为0 V==0

1000 HI 无符号 > C==1 && Z==0

1001 LS 无符号 <= !(C==1 && Z==0)

1010 GE 带符号 >= N==V

1011 LT 带符号 < N!=V

1100 GT 带符号 > Z==0 && N==V

1101 LE 带符号 <= !( Z==0 && N==V)

1110 AL

无条件执行

Any

具体指令的使用后续会继续更新。

前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号
返回

讲师博文

星创客 - 华清远见旗下高端IT培训品牌

当前位置: 星创客 > 学习资源 > 讲师博文 >

ARM-v8架构分析
来源: 星创客 作者: 星创客 时间:2018-02-02

2011年11月,ARM公司发布了新一代处理器架构ARMv8的部分技术细节。这是ARM公司的首款支持64位指令集的处理器架构。由于ARM处理器的授权内核被广泛用于手机等诸多电子产品,故ARMv8架构作为下一代处理器的核心技术而...

2011年11月,ARM公司发布了新一代处理器架构ARMv8的部分技术细节。这是ARM公司的首款支持64位指令集的处理器架构。由于ARM处理器的授权内核被广泛用于手机等诸多电子产品,故ARMv8架构作为下一代处理器的核心技术而受到普遍关注。ARM将在2012年间推出基于ARMv8架构的处理器内核并开始授权,而面向消费者和企业的样机于2013年由苹果的A7处理器上首次运用。

ARM-v8是在32位ARM架构上进行开发的,将被首先用于对扩展虚拟地址和64位数据处理技术有更高要求的产品领域,如企业应用、高档消费电子产品。

ARMv8架构包含两个执行状态:AArch64和AArch32。AArch64执行状态针对64位处理技术,引入了一个全新指令集A64;而AArch32执行状态将支持现有的ARM指令集。目前的ARMv7架构的主要特性都将在ARMv8架构中得以保留或进一步拓展,如:TrustZone技术、虚拟化技术及NEON advanced SIMD技术,等。

配合ARMv8架构的推出,ARM正在努力确保一个强大的设计生态系统来支持64位指令集。ARM的主要合作伙伴已经能够获得支持ARM-v8架构的ARM编译器和快速模型(Fast Model)。在新架构的支持下,对一系列开源操作系统、应用程序和第三方工具的初始开发已经在开展中。通过合作,ARM合作伙伴们共同加速64位生态系统的开发,在许多情况下,这可视为是对现有支持基于ARMv7架构产品的广泛生态系统的自然延伸。

ARM-v8架构属于64位架构,向下兼容ARM-v7架构。ARM-v8架构支持两种类型的ARM指令集,一种是Aarch64位指令集,一种是Aarch32位指令集。不管是那种类型的指令集,每条指令依然都是字(4字节)对齐。两种类型指令集的本质区别是工作寄存器的位数不同,Aarch32位指令集使用32bit工作寄存器,而Aarch64位指令集使用64bit工作寄存器。

ARMv8 提供AArch32 state和 AArch64 state 两种Execution State,下面是两种Execution State对比.

Execution State Note

 

 

 

AArch32 提供13个32bit通用寄存器R0-R12,一个32bit PC指针 (R15)、堆栈指针SP (R13)、链接寄存器LR (R14)

提供一个32bit异常链接寄存器ELR, 用于Hyp mode下的异常返回

提供32个64bit SIMD向量和标量floating-point支持

提供两个指令集A32(32bit)、T32(16/32bit)

兼容ARMv7的异常模型

协处理器只支持CP10\CP11\CP14\CP15

 

 

 

 

AArch64 提供31个64bit通用寄存器X0-X30(W0-W30),其中X30是程序链接寄存器LR

提供一个64bit PC指针、堆栈指针SPx 、异常链接寄存器ELRx

提供32个128bit SIMD向量和标量floating-point支持

定义ARMv8异常等级ELx(x<4),x越大等级越高,权限越大

定义一组PE state寄存器PSTATE(NZCV/DAIF/CurrentEL/SPSel等),用于保存PE当前的状态信息

没有协处理器概念

 

AArch32重要寄存器

寄存器类型 Bit 描述

R0-R14 32bit 通用寄存器,但是ARM不建议使用有特殊功能的R13,R14,R15当做通用寄存器使用.

SP_x 32bit 通常称R13为堆栈指针,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/irq/fiq/hyp/mon}

LR_x 32bit 称R14为链接寄存器,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/svc/irq/fiq/mon},用于保存程序返回链接信息地址,AArch32环境下,也用于保存异常返回地址,也就说LR和ELR是公用一个,AArch64下是独立的.

ELR_hyp 32bit Hyp mode下特有的异常链接寄存器,保存异常进入Hyp mode时的异常地址

PC 32bit 通常称R15为程序计算器PC指针,AArch32 中PC指向取指地址,是执行指令地址+8,AArch64中PC读取时指向当前指令地址.

CPSR 32bit 记录当前PE的运行状态数据,CPSR.M[4:0]记录运行模式,AArch64下使用PSTATE代替

APSR 32bit 应用程序状态寄存器,EL0下可以使用APSR访问部分PSTATE值

SPSR_x 32bit 是CPSR的备份,除了User和Sys模式外,其他各种模式下都有对应的SPSR_x寄存器:x ={ und/svc/abt/irq/fiq/hpy/mon},注意:这些模式只适用于32bit运行环境

HCR 32bit EL2特有,HCR.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由

SCR 32bit EL3特有,SCR.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由,注意EL3始终不会路由

VBAR 32bit 保存任意异常进入非Hyp mode & 非Monitor mode的跳转向量基地址

HVBAR 32bit 保存任意异常进入Hyp mode的跳转向量基地址

MVBAR 32bit 保存任意异常进入Monitor mode的跳转向量基地址

ESR_ELx 32bit 保存异常进入ELx时的异常综合信息,包含异常类型EC等,可以通过EC值判断异常class

PSTATE 不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,主要用于64bit环境下

 

A32状态下寄存器组织

 

• 所谓的banked register 是指一个寄存器在不同模式下有对应不同的寄存器,比如SP,在abort模式下是SP_bat,在Und模式是SP_und,在iqr模式下是SP_irq等,进入各种模式后会自动切换映射到各个模式下对应的寄存器.

• R0-R7是所谓的非banked register,R8-R14是所谓的banked register

4.1.1 T32状态下寄存器组织

A32使用

Rd/Rn编码位宽4位 T32-32bit使用

Rd/Rn编码位宽4位 T32-16bit使用

Rd/Rn编码位宽3位

R0 R0 R0

R1 R1 R1

R2 R2 R2

R3 R3 R3

R4 R4 R4

R5 R5 R5

R6 R6 R6

R7 R7 R7

R8 R8 并不是说T32-16bit下没有R8~R12,而是有限的指令才能访问到,16bit指令的Rd/Rn编码位只有3位,所以Rx范围是R0-R7

R9 R9

R10 R10

R11 R11

R12 R12

SP (R13) SP (R13) SP (R13)

LR (R14) LR (R14) //M LR (R14) //M

PC (R15) PC (R15) //P PC (R15) //P

CPSR CPSR CPSR

SPSR SPSR SPSR

 

AArch64重要寄存器

寄存器类型 Bit 描述

X0-X30 64bit 通用寄存器,如果有需要可以当做32bit使用:WO-W30

LR (X30) 64bit 通常称X30为程序链接寄存器,保存跳转返回信息地址

SP_ELx 64bit 若PSTATE.M[0] ==1,则每个ELx选择SP_ELx,否则选择同一个SP_EL0

ELR_ELx 64bit 异常链接寄存器,保存异常进入ELx的异常地址(x={0,1,2,3})

PC 64bit 程序计数器,俗称PC指针,总是指向即将要执行的下一条指令

SPSR_ELx 32bit 寄存器,保存进入ELx的PSTATE状态信息

NZCV 32bit 允许访问的符号标志位

DIAF 32bit 中断使能位:D-Debug,I-IRQ,A-SError,F-FIQ ,逻辑0允许

CurrentEL 32bit 记录当前处于哪个Exception level

SPSel 32bit 记录当前使用SP_EL0还是SP_ELx,x= {1,2,3}

HCR_EL2 32bit HCR_EL2.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由 逻辑1允许

SCR_EL3 32bit SCR_EL3.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由  逻辑1允许

ESR_ELx 32bit 保存异常进入ELx时的异常综合信息,包含异常类型EC等.

VBAR_ELx 64bit 保存任意异常进入ELx的跳转向量基地址 x={0,1,2,3}

PSTATE 不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,64bit下代替CPSR

 

64、32位寄存器的映射关系

64-bit 32-bit

 

 

 

 

 

 

 

 

64-bit OS

Runing

AArch32 App 64-bit 32-bit

X0 R0 X20 LR_adt

X1 R1 X21 SP_abt

X2 R2 X22 LR_und

X3 R3 X23 SP_und

X4 R4 X24 R8_fiq

X5 R5 X25 R9_fiq

X6 R6 X26 R10_fiq

X7 R7 X27 R11_fiq

X8 R8_usr X28 R12_fiq

X9 R9_usr X29 SP_fiq

X10 R10_usr X30(LR) LR_fiq

X11 R11_usr SCR_EL3 SCR

X12 R12_usr HCR_EL2 HCR

X13 SP_usr VBAR_EL1 VBAR

X14 LR_usr VBAR_EL2 HVBAR

X15 SP_hyp VBAR_EL3 MVBAR

X16 LR_irq ESR_EL1 DFSR

X17 SP_irq ESR_EL2 HSR

X18 LR_svc

X19 SP_svc

ARMv8指令集

• A64指令集

• A32 & T32指令集

• 指令编码基本格式

<Opcode>{<Cond>}<S>  <Rd>, <Rn> {,<Opcode2>}

 

• 其中尖括号是必须的,花括号是可选的

• A32: Rd => {R0–R14}  

• A64: Rd =>Xt => {X0–X30}

 

标识符 Note

Opcode 操作码,也就是助记符,说明指令需要执行的操作类型

Cond 指令执行条件码,在编码中占4bit,0b0000 -0b1110

S 条件码设置项,决定本次指令执行是否影响PSTATE寄存器响应状态位值

Rd/Xt 目标寄存器,A32指令可以选择R0-R14,T32指令大部分只能选择RO-R7,A64指令可以选择X0-X30 or W0-W30

Rn/Xn 第一个操作数的寄存器,和Rd一样,不同指令有不同要求

Opcode2 第二个操作数,可以是立即数,寄存器Rm和寄存器移位方式(Rm,#shit)

 

指令分类

类型 Note

• 跳转指令 条件跳转、无条件跳转(#imm、register)指令

• 异常产生指令 系统调用类指令(SVC、HVC、SMC)

• 系统寄存器指令 读写系统寄存器,如 :MRS、MSR指令 可操作PSTATE的位段寄存器

• 数据处理指令 包括各种算数运算、逻辑运算、位操作、移位(shift)指令

• load/store

内存访问指令 load/store {批量寄存器、单个寄存器、一对寄存器、非-暂存、非特权、独占}以及load-Acquire、store-Release指令 (A64没有LDM/STM指令)

• 协处理指令 A64没有协处理器指令

 

A64指令集

• A64指令编码宽度固定32bit

• 31个(X0-X30)个64bit通用用途寄存器(用作32bit时是W0-W30),寄存器名使用5bit编码

• PC指针不能作为数据处理指或load指令的目的寄存器,X30通常用作LR

• 移除了批量加载寄存器指令 LDM/STM, PUSH/POP, 使用STP/LDP 一对加载寄存器指令代替

• 增加支持未对齐的load/store指令立即数偏移寻址,提供非-暂存LDNP/STNP指令,不需要hold数据到cache中

• 没有提供访问CPSR的单一寄存器,但是提供访问PSTATE的状态域寄存器

• 相比A32少了很多条件执行指令,只有条件跳转和少数数据处理这类指令才有条件执行.

• 支持48bit虚拟寻址空间

• 大部分A64指令都有32/64位两种形式

• A64没有协处理器的概念

 

指令助记符

整型

W/R 32bit整数

X 64bit整数

加载/存储、符号-0扩展

B 无符号8bit字节

SB 带符号8bit字节

H 无符号16bit半字

SH 带符号16bit半字

W 无符号32bit字

SW 带符号32bit字

P Pair(一对)

寄存器宽度改变

H 高位(dst gets top half)

N 有限位(dst < src)

L Long (dst > src)

W Wide (dst==src1,src1>src2) ?

 

指令条件码

编码 助记符 描述 标记

0000 EQ 运算结果相等为1 Z==1

0001 NE 运算结果不等为0 Z==0

0010 HS/CS 无符号高或者相同进位,发生进位为1 C==1

0011 LO/CC 无符号低清零,发生借位为0 C==0

0100 MI 负数为1 N==1

0101 PL 非负数0 N==0

0110 VS 有符号溢出为1 V==1

0111 VC 没用溢出为0 V==0

1000 HI 无符号 > C==1 && Z==0

1001 LS 无符号 <= !(C==1 && Z==0)

1010 GE 带符号 >= N==V

1011 LT 带符号 < N!=V

1100 GT 带符号 > Z==0 && N==V

1101 LE 带符号 <= !( Z==0 && N==V)

1110 AL

无条件执行

Any

具体指令的使用后续会继续更新。

相关推荐

全国咨询热线:400-611-6270

?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号