完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
A64架构,寄存器,分为通用寄存器和向量寄存器。 通用寄存器 通用寄存器,用于定点指令。 对于通用寄存器,总共有31个,R0到R30。但是寄存器分为64位和32位版本,分别用X和W表示。不管是64位还是32位去访问一个寄存器,访问的都是同一个寄存器,只是访问数据位宽不一样而已。 还有另外两个寄存器,zero寄存器和栈寄存器。zero寄存器值固定为0,编号是31号。栈寄存器保存当前的栈顶,编号也是31号寄存器。因为这两个寄存器编号都是31号,因此会根据指令的类别,从而决定该31号编号,是用zero寄存器,还是栈寄存器。 因为同一个寄存器分为32位和64位版本,如果64位访问32位,会将32位的第32位赋值给64位的低32,然后将高32位清零。 比如如下指令: 第一条指令,执行后,w5结果为88。 第二条指令,此时用的x5,64位,88赋值给x5的低32位,高32位补零。最后x6的值就为88。 比如如下指令: 第一条指令,执行后,x5结果为0x86_00000088。 第二条指令,此时用的w5,32位,88赋值给x5的低32位,高32位清零。最后w6的值就为88。 对于X30寄存器,是link寄存器。当执行BL,BLR指令,会将下一条指令的地址,保存在X30寄存器中,当执行RET指令,会将X30寄存器中存的值,赋值给PC,实现返回。 A64中,取消了A32中的PC寄存器。因为A64,不能像A32一样,读取PC寄存器,获取到当前的PC。 向量寄存器 向量寄存器,用于浮点指令,或者SIMD指令。总共有31个,V0-V31。分为8位,16位,32bit,64位,128位版本。分别用B,H,S,D,Q表示。不管以多少位去访问一个寄存器,访问的都是同一个寄存器,只是访问数据位宽不一样而已。 A64中,提供按下标访问访问向量寄存器。 比如: ◾V0.B[1],表示访问 V0寄存器的 [15:8] bit数据。 ◾V0.S[2], 表示访问V0寄存器的 [95:64] bit数据。 对V寄存器,还提供了分组方式。 前面的bits,表示一个lanes,包含多少个bit,也就是多少位为一组。后面的bits,表示分成多少个组。 因此V寄存器,是128bit。可以分成64bit(低64bit有效)或者128bit两种模式。 ◾如果按照8位为一个组,那么可以分为8组(64bit)或者16组(128bit)。 ◾如果按照16位为一个组,那么可以分为4组(64bit)或者8组(128bit)。 ◾如果按照32位为一个组,那么可以分为2组(64bit)或者4组(128bit)。 ◾如果按照64位为一个组,那么可以分为1组(64bit)或者2组(128bit)。 还可以结合下标访问,从而对寄存器的指定bit位域进行访问。 比如: ◾V0.8B[1], 将V按照8bit分组,分成8组。取第1组,也就是 [15:8] 位域数据。 ◾V0.16B[1],将V按照8bit分组,分成16组。取第1组,也就是 [15:8] 位域数据。 |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
852 浏览 0 评论
1128 浏览 1 评论
如何配置Linux操作系统设备树让我的开发板可以将板子上的GPIO接口用作 I2S输出??
2018 浏览 1 评论
1556 浏览 0 评论
2100 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-23 18:02 , Processed in 0.614364 second(s), Total 70, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号