## 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支持的数据类型。
![](https://box.kancloud.cn/2016-03-06_56dbfdac41859.png)
![](https://box.kancloud.cn/2016-03-06_56dbfdac57101.png)
![](https://box.kancloud.cn/2016-03-06_56dbfdac6a533.png)
![](https://box.kancloud.cn/2016-03-06_56dbfdac7ffdc.png)
![](https://box.kancloud.cn/2016-03-06_56dbfdac981ae.png)
![](https://box.kancloud.cn/2016-03-06_56dbfdacb57fb.png)
- 第一章 80386介绍
- 1.1 该手册的组织结构
- 1.2 其他文献
- 第二章 编程基本模型
- 2.1 存储器组织和段
- 2.2 数据类型
- 2.3 寄存器
- 2.4 指令格式
- 2.5 操作数选择
- 2.6 中断和异常
- 第4章 系统寄存器
- 4.1 系统寄存器 (System Registers)
- 4.2 系统指令 (System Instructions)
- 第五章 内存管理
- 5.1 分段地址转换(Segment Translation)
- 5.2 分页地址转换(Page Translation)
- 5.3 混合分段和分页地址转换(Combining Segment and Page Translation)
- 第六章 内存管理
- 6.1 为什么要保护(Why Protection?)
- 6.2 80386保护机制概述(Overview of 80386 Protection Mechnaisms)
- 6.3 段级保护(Segment-Level Protection)
- 6.4 页级保护(Page-Level Protection)
- 6.5 混合分页和分段保护(Combining Page and Segment Protection)
- 第7章 多任务(Multitasking)
- 8.1 I/O 寻址(I/O Addressing)
- 7.1 任务状态段(Task State Segment)
- 7.3 任务寄存器(Task Register)
- 7.4 任务门描述符(Task Gate Descriptor)
- 7.5 任务切换(Task Switching)
- 7.6 任务链(Task Linking)
- 7.7 任务寻址空间(Task Address Space)
- 第8章 输入 输出
- 8.2 I/O 指令(I/O Instructions)
- 8.3 保护和I/O(Protection and I/O)
- 第9章 异常和中断(Exceptions and Interrupts)
- 9.1 识别中断(Identifying Interrupts)
- 9.2 允许和禁止中断(Enabling and Disabling Interrupts)
- 9.3 同时发生的中断和异常的优先级(Priority Among Simultaneous Interrupts and Exceptions)
- 9.4 中断描述符表(Interrupt Descriptor Table)
- 9.5 IDT 描述符(IDT Descriptors)
- 9.6 中断任务和中断子程序(Interrupt Tasks and Interrupt Procedures)
- 9.7 出错码(Error Code)
- 9.8 异常条件(Exception Conditions)
- 9.9 异常总结(Exception Summary)
- 9.10 出错码总结(Error Code Summary)
- 第10章 初始化(Initialization)
- 10.1 复位后处理器状态(Processor State After Reset)
- 10.2 实模式初始化(Software Initialization for Real-Address Mode)
- 10.3 切换到保护模式(Switching to Protected Mode)
- 10.4 保护模式初始化(Software Initialization for Protected Mode)
- 10.5 初始化示例
- 10.6 TLB测试
- 第十四章 80386实地址模式
- 14.1 物理地址构成
- 14.2 寄存器和指令
- 14.3 中断和异常处理
- 14.4 进入和离开实地址模式
- 14.6 实地址模式异常
- 14.7 与8086的不同
- 14.8 与80286实地址模式的不同