A.4 操作数的类型与大小
操作数类型如何指定?最常用的方法,是通过操作码中的编码指出操作数类型。另一种方法是给数据附加由硬件解释的标记;标记说明类型,系统再据此选择操作。不过,带类型标记数据的计算机,如今只能在计算机博物馆中找到。
先看桌面与服务器体系结构。通常,操作数类型——整数、单精度浮点数、字符等——实际上也确定了它的大小。常见类型包括字符(8 位)、半字(16 位)、字(32 位)、单精度浮点数(也是 1 个字)和双精度浮点数(2 个字)。整数几乎一律采用二进制补码表示。字符通常采用 ASCII,但随着计算机的国际化,Java 使用的 16 位 Unicode 日渐普及。 直到 20 世纪 80 年代初,多数计算机厂商仍自行选择浮点表示格式;此后几乎全部计算机都遵循同一标准——IEEE 754。不过,近期某些专用处理器已经不再坚持这种精度水平。附录 J 将详细讨论 IEEE 浮点标准。
有些体系结构提供字符串操作,但通常较为有限,并将字符串中的每个字节视为一个字符。典型支持包括字符串比较与传送。
为支持商业应用,一些体系结构提供十进制格式,通常称为压缩十进制(packed decimal)或二进制编码十进制(binary-coded decimal,BCD):用 4 位编码 0–9,每字节压入两位十进制数字。数字字符串有时称为非压缩十进制;通常还提供称为压缩和展开(packing/unpacking)的操作,在两种表示之间转换。
使用十进制操作数的一个原因,是获得与十进制数精确一致的结果,因为有些十进制小数没有精确的二进制表示。例如, 是简单的十进制小数,却需要无限循环的二进制位表示:。因此,十进制下精确的计算,在二进制下可能只是近似值,这对金融交易可能构成问题。(更精确的算术讨论见附录 J。)
SPEC 基准测试使用字节或字符、半字(短整数)、字(整数和单精度浮点数)、双字(长整数)及浮点数据类型。图 A.11 给出这些程序访问存储器对象时,按对象大小统计的动态分布。不同类型的访问频率,有助于确定哪些类型最需要高效支持。计算机是否应采用 64 位访问通路,还是用两个周期访问一个双字就已足够?前面已经说明,字节访问需要对齐网络:直接支持字节操作到底有多重要?图 A.11 通过存储器引用考察了被访问的数据类型。

图内术语与数值:Byte=字节(8 位),Half word=半字(16 位),Word=字(32 位),Double word=双字(64 位)。依次按字节、半字、字、双字排列,浮点程序平均值为 1%、0%、29%、70%;整数程序平均值为 10%、5%、26%、59%。
某些体系结构允许按字节或半字访问寄存器中的对象,但这种访问很少。在这些程序的 VAX 测量中,它不超过寄存器引用的 12%,约占全部操作数访问的 6%。