ARM VFP寄存器与指令集详解
1. 寄存器文件
ARM芯片的加载和存储架构在VFP(向量浮点单元)中得以延续,为了处理浮点值,它专门提供了一组寄存器。这些寄存器共有32个,前缀为S,编号从S0 - S31,用于保存单精度值,因为它们都是单字宽。对于双精度数的操作,这些寄存器可以成对组合,形成最多16个双字宽的寄存器,用D表示,编号为D0 - D15。
需要明确的是,这些寄存器本质相同,虽然寄存器中的值可以是单精度或双精度,但一次只能包含一个值。例如,S0和S1可以单独用于存储两个单精度值,也可以组合成D0用于存储一个双精度值。如果向D0加载一个值,那么S0和S1的内容将被清除。
这些寄存器根据用途分为标量寄存器(S0 - S7/D0 - D3)和向量寄存器组(S8 - S31/D4 - D15),分组决定了它们的访问方式。
2. 管理与打印
下面的代码展示了如何使用 printf 函数在屏幕上显示浮点值:
/* Printing a floating-point number */
.global main
.func main
main:
LDR R1, addr_value1 @ Get addr of value1
VLDR S14, [R1] @ Move value1 into S14
VCVT.F64.F32 D5, S14 @ Convert to B64
LDR R0, =string @ point R0 to string
VMOV R2, R3, D5 @ Load value
bp:
BL
超级会员免费看
订阅专栏 解锁全文
881

被折叠的 条评论
为什么被折叠?



