## 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支持的數據類型。






- 第一章 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實地址模式的不同