2.2 数据类型

字节,字和双字是基本数据类型(参考图2-2)。字节开始于任何逻辑地址,由8位连续位组成。位被从0到7编号;位0是最低有效位。

字开始于任何逻辑地址,由连续的2个字节组成。因此字含有16位。位编号从0到15;位0是最低有效位。包含位0的字节称为低位字节;包含位15的字节为高位字节。

字中的每个字节都有自己的地址,较小的地址为字的起始地址。低位地址包含字的低8位,高位地址包含高8位。

双字开始于任何逻辑地址,由连续的2个字组成。因此字含有32位。位编号从0到31;位0是最低有效位。包含位0的字称为低位字;包含位31的字节为高位字。

双字中的每个字节都有自己的地址,最小的地址为双字的起始地址。含有最低位地址的字节包含8位最低位,位于最高地址处的字节包含8位最高位。图2-3展示了字和双字的布局。

注意:字不必分配在偶数地址,双字也不用在被4整除的地址上。这允许数据结构(例如,混合包含了字节,字和双字)在存储器的使用上可以有更多的自由和更高的效率。在32位总线配置下,双字在处理器和存储器之间的实际传输发生在被4整除的地址处;然而,处理器会将未对齐的字和双字转换为存储器接口可以接受的合适的请求序列。这种未对齐数据的传输会因为额外的存储器指令周期而降低性能。为了获得最高性能,数据结构(包括堆栈)应该以下面的方式来设计:无论何时,只要有可能,将字对齐在偶数地址处,双字对齐在被4整数的地址处。由于指令预取和队列,不要求指令在字和双字边界上。(不过,如果传输控制的目标地址能够被4整除将导致速度的微小提升。)

尽管字节,字和双字是操作数的基本类型,处理器同样也支持对其他操作数的解释。依赖于和操作数有关的指令,下面附加的数据类型可以被识别:

整型:

包含在32位双字,16位字,或8位字节中的有符号二进制数值。所有的操作数等于2的幂。符号位位于字节的位7,字的位15,双字的位31。符号位0为正值,1为负值。由于最高位用于符号位,8位整数的取值范围从-128到+127;16位整数从-32,768到+32,767;32位整数从-3231到+231-1。零的符号位为正。

序数:

包含在32位双字,16位字,或8位字节中的无符号二进制数值。所有位都被视为确定数字的量级。8位序数的取值范围从0-255;16位序数从0-65,536;32位序数从0-232 -1。

短指针:

32位逻辑地址。短指针是段内偏移。短指针用于平坦模式或段模式。

长指针:

48位的逻辑地址:16位段选择符和32位的偏移量。长指针只有系统设计者选择了段模式时才能使用。

字符串:

连续的字节,字或双字序列。字符串包含0-232 -1(4G)个字节。

位域:

连续的位序列。位域可以开始于字节的任何位置,最多32位。

位字符串:

连续的位序列。位域可以开始于字节的任何位置,最多232 -1位。

BCD码:

一个字节(未压缩),代表从0-9的十进制数。未压缩十进制数被存储为无符号字节数。每个字节存一个数。数字的大小由字节的低4位决定;十六进制值0-9是合法值,被解释为十进制数。高4位在乘法和除法中必须为零;加法和减法中可以含有任何值。

压缩BCD码:

一个字节(已压缩),代表两位十进制数,每位从0-9。每个十进制数存在字节的高/低4位中。高4位中数字为高数量级。0-9为合法值。压缩十进制字节取值范围从0-99。

图2-4用图形总结了80386支持的数据类型。