ARM 运算中的MSB(最高有效位)

ARM 运算中的MSB(最高有效位)

在ARM架构(以及所有二进制计算系统)中,MSBMost Significant Bit 的缩写,中文通常译为 最高有效位

它指的是一个二进制数中权重最大的那一位,也就是位于最左边的位。

核心要点详解:

  1. 位置与权重

    • 对于一个N位的二进制数(例如32位的ARM寄存器),其位的编号通常从右到左为0到N-1。
    • LSBBit 0 ,是最右边的位,权重为 2⁰ = 1,即最低有效位
    • MSBBit N-1 ,是最左边的位。对于一个32位数,MSB是 Bit 31,权重为 2³¹。
  2. 在ARM运算中的关键作用

    MSB远不止是一个位置标识,它在运算和数据处理中扮演着至关重要的角色:

    • 符号判断(有符号数)

      • 有符号整数 的补码表示中,MSB专门用作符号位
      • MSB = 0 :表示该数为正数或零
      • MSB = 1 :表示该数为负数
      • 例如,0b1000 0001(作为8位有符号数)的MSB是1,因此它表示负数 -127。
    • 溢出检测

      • 在进行算术运算(如加法、减法)时,处理器会检查MSB的变化来判断是否发生溢出。
      • 有符号溢出:当两个正数相加结果MSB变为1(看起来像负数),或两个负数相加结果MSB变为0(看起来像正数)时发生。
      • ARM的程序状态寄存器 中的 V(溢出)标志位 就是基于MSB等位的运算结果来设置的。
    • 移位与扩展操作

      • 算术右移 :当指令将数值向右移位时,空出的左边位会用MSB的原始值来填充,目的是保持有符号数的符号不变。
      • 符号扩展 :将一个较短位宽的有符号数(如16位)扩展到更长位宽(如32位)时,所有新扩展的高位都填充原数的MSB值
    • 大小端序

      • 在内存存取中,MSB的概念与字节顺序相关。在大端序中,数据的MSB存储在最低的内存地址;在小端序(ARM常用模式)中,数据的LSB存储在最低的内存地址。
    • 比较与条件判断

      • 比较两个有符号数的大小时,本质上是比较它们MSB所代表的符号以及其后的数值部分。

举例说明(8位数):

取一个8位二进制数:0b1011 0010

  • MSB :最左边的 1(Bit 7)。
  • LSB :最右边的 0(Bit 0)。
Bit 7 (MSB) Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 (LSB)
1 0 1 1 0 0 1 0

作为无符号数 :它的值是 2⁷ + 2⁵ + 2⁴ + 2¹ = 178
作为有符号数 :MSB=1,所以它是负数。需要取反加一得到其绝对值,值为 -78

注意与CPSR中MSB的区别

在ARM的当前程序状态寄存器 中,也有一组被称为"标志位"的MSB,它们特指NZCV四个条件标志位的最高位(例如,N标志位于Bit 31)。但更常见、更通用的"MSB"概念是指一个数据字本身的最高位,而非CPSR的位。

总结

在ARM运算中,MSB(最高有效位) 是理解有符号数表示、溢出、移位操作和比较逻辑的基石。它不仅标志着数值中权重最大的位,更是符号信息的承载者和多种运算状态的关键判断依据。

相关推荐
斑马1396 小时前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
ARM&开发(Haidong)1 天前
ADRV9026 Linux驱动文档详解
arm开发
斑马1391 天前
ARM学习笔记(一)——基本概念
arm开发·arm
斑马1391 天前
ARM学习笔记(三)——i.MX6ULL—LED点灯
arm开发
Awh-1 天前
ARM 裸机开发 day02 学习笔记
linux·arm开发·arm
M78佐菲1 天前
ARM学习笔记(四)
linux·arm开发·笔记·嵌入式硬件·学习
昌原的儿子LEO1 天前
i.MX6ULL 裸机开发 C 语言驱动与 BSP 工程管理学习总结
linux·arm开发·学习
AAA代码批发商2 天前
Days 46 i.MX6ULL 裸机开发|从内核切入外设,汇编点亮 LED(补充)
arm开发·嵌入式·裸机开发
xx~t2 天前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
M78佐菲2 天前
ARM学习笔记(三)
linux·arm开发·笔记·嵌入式硬件·学习