为了能到远方,脚下的每一步都不能少|

LZHMS

园龄:2年6个月粉丝:1关注:7

2023-10-30 21:56阅读: 105评论: 0推荐: 0

关于 ARM 指令体系中立即数范围的扩散机制

ARM 指令体系特点

ARM作为一款嵌入式微处理器或者一种嵌入式微处理架构,具有非常规整的指令体系,其精简指令集中共计 30 条指令,并且每条指令均为 32 位宽。

ARM 立即数的表示

ARM 中一条指令有 32 比特,但是立即数不能占用 32 位指令编码空间的全部比特位,留给立即数的编码空间只有 12 位。此外,因为 ARM 指令为单周期指令,当遇到操作数非常大的情形时,也不可能再取指一次。
因此,不得不对指令中立即数表示进行特殊的设计。

扩散数据表示范围

ARM 处理器指令系统将 12 比特位分成 8 比特位的常数和 4 比特位的循环右移偶数位两部分。
我们知道,8 位比特位能够表示的数据范围为 (无符号数) Immed_8=0255,而 4 位循环移位能够表示范围为 Rotate_Imm=015, 因此设计立即数表示为:

Immed = Immed_8 >> (2×Rotate_Imm)
  • 循环右移偶数位数
2×(015)={0,2,4,,30}

因此,一个 8 比特的数据,有 16 种不同的循环右移方式,那么可以表示的数据范围为:

28×16=256×16=4096B=4KB=212

上式表明,循环右移偶数位并没有使得数据表示个数有任何改变;

I.有效数据位

在进一步阐述数据表示的扩散机制前,先要明确有效数据位的含义。
在循环移位中,有效数据位指的是最长非零二进制串,即 000101000100 中有效数据位为 1010001, 长度为 7

II.扩散机制

循环右移偶数位使得立即数在数据表示上有效数据位范围从原来的 012 位变为了 08 位,并且可以表示在第 1232 比特位上。
注:最高移位是 8 位常数位,循环右移 30 位,最长可以表示为 38 位的长度,为什么不尽最大长度扩散数据范围呢?可以考虑指令的执行过程,ARM 指令中的立即数会被送往 ALU 中,而 ARM 的 ALU 最高处理 32 位数据,因此只扩散到 32 位编码空间。
【扩散效应】——数据本源并没有发生变化,而是将数据扩展散开分布。

概括来讲,循环右移偶数位不能改变原有数据表示个数,只是将数据离散分布到 32 位编码空间,因此称为扩散数据表示。但是这种方式,就要保证立即数是合法的,即满足有效位数小于等于 8 位,能够通过循环右移偶数位后表示该数据。

posted @   LZHMS  阅读(105)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Windy Hill 羽肿
Windy Hill - 羽肿
00:00 / 00:00
An audio error has occurred.

暂无歌词