飞腾CPU体系结构之位序

本文详细介绍了位序的概念,通过数值0x0A展示了小端和大端位序的区别,并以飞腾CPU为例,阐述了其采用小端位序的特点。同时,解释了LSL和LSR逻辑移位操作,以及飞腾CPU的RBIT指令在32位和64位位序转换中的应用。此外,提供了C语言函数实现RBIT转换的示例代码。
摘要由CSDN通过智能技术生成

位序

描述数值在内存中的每一个位排列顺序。

举例说明,以一个8位字节为例,数值0x0A的小端和大端描述如下:

1. 小端位序为

76543210
数值00001010

2. 大端位序为

01234567
数值00001010

                        或者描述为

76543210
数值01010000

飞腾CPU位序

飞腾CPU采用小端位序。以数值0x0A经过逻辑移位来看

1. LSL逻辑左移3位可以获得0x60

76543210
数值01010000

1. LSR逻辑右移3位可以获得0x01

76543210
数值00000001

飞腾CPU的位序转换指令

飞腾CPU提供一个32位和64位的位序转换指令RBIT,具体操作如下

RBIT <Wd>, <Wn>    //32位位序转换
RBIT <Xd>, <Xn>    //64位位序转换

基于上述指令可以实现8位,16位,32位和64位转换的C语言函数

inline __atrribute_const__ __u8 rbit8(__u8 x)
{
    __asm__("rbit %w0, %w1\n" "lsr %w1, %w1, #24":"=r"(x):"r"(x));
    return x;
}
inline __atrribute_const__ __u16 rbit16(__u16 x)
{
    __asm__("rbit %w0, %w1\n" "lsr %w1, %w1, #16":"=r"(x):"r"(x));
    return x;
}
inline __atrribute_const__ __u32 rbit32(__u32 x)
{
    __asm__("rbit %w0, %w1":"=r"(x):"r"(x));
    return x;
}
inline __atrribute_const__ __u64 rbit64(__u64 x)
{
    __asm__("rbit %x0, %x1":"=r"(x):"r"(x));
    return x;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值