1.實模式
與8086兼容的工作模式,只有低20位地址線起作用,僅能尋址第一個1MB的內存空間。MS DOS運行在實模式下。
2.保護模式
32位80x86 CPU的主要工作模式,提供對程序和數據進行安全檢查的保護機制。Windows 9x/NT/2000運行在保護模式下。
3.虛擬8086模式
在Windows 9x下,若打開一個MS DOS窗口,運行一個DOS應用程序,那麼該程序就運行在虛擬8086模式下。
實模式
1. 內存分段
80x86採用分段內存管理機制,主要包括下列幾種類型的段:
代碼段:用來存放程序的指令序列。
數據段:用來存放程序的數據。
堆棧段:作爲堆棧使用的內存區域,用來存放過程返回地址、過程參數等。
一個程序可以擁有多個代碼段、多個數據段甚至多個堆棧段。
2. 物理地址與邏輯地址
物理地址:內存單元的實際地址,也就是出現在地址總線上的地址。
邏輯地址:或稱分段地址,記作
段地址: 段內偏移地址
段地址表示段在內存中的起始位置,通常被保存在某個段寄存器中。段內偏移地址表示內存單元相對於段起始位置的位移,簡稱偏移地址,也叫有效地址EA。
段地址與偏移地址都是16位。
系統採用下列方法將邏輯地址自動轉換爲20位的物理地址:
物理地址 = 段地址 × 16 + 偏移地址
每個內存單元具有唯一的物理地址,但可由不同的邏輯地址描述。
3. 實模式的編程要點
採用16位段,段地址與偏移地址均爲16位,即使32位80x86 CPU(80386及更高)也只能尋址1MB的內存空間。
CPU總是從地址CS:IP處取指令,EIP的高16位爲0。
SS:SP指向堆棧段的棧頂地址,ESP的高16位爲0。
在32位80x86 CPU下,程序可以使用32位寄存器和32位操作數,但採用32位寄存器表示偏移地址時,只使用低16位,高16位爲0。
狀態標誌 狀態標誌通常由CPU根據指令執行結果自動設置,以反映指令執行結果的特徵。
80x86 CPU將狀態標誌作爲條件判斷的依據,以控制程序的執行流程。
最常用的狀態標誌是CF、OF、SF和ZF,應熟練掌握。
1. 狀態標誌取值的一般規則
ZF(Zero Flag):零標誌。若運算結果爲0,則ZF = 1,否則ZF = 0。
SF(Sign Flag):符號標誌。若運算結果爲負數,則SF = 1,否則SF = 0。
CF(Carry Flag):進位標誌。若加法時結果最高位向前有進位或減法時最高位向前有借位,則CF = 1,否則CF = 0。
OF(Overflow Flag):溢出標誌。若帶符號數的運算結果超出了補碼錶示的範圍,則OF = 1,否則OF = 0。
AF(Auxiliary Carry Flag):輔助進位標誌。若加法時結果低4位向前有進位或減法時結果低4位向前有借位,則AF = 1,否則AF = 0。
PF(Parity Flag):奇偶標誌。若結果最低字節中1的個數爲偶數,則PF = 1,否則PF = 0。
2. 深入認識CF和OF
CF和OF本質上均表示溢出。
CF表示無符號溢出,即運算結果超出了無符號數的表示範圍。對於n位二進制數來說,無符號數表示範圍爲0~2n -1,例如,n = 8和16時分別爲0~255和0~65535。
OF表示帶符號溢出,即運算結果超出了帶符號數的表示範圍。對於n位二進制數來說,帶符號數表示範圍爲-2n-1~2n-1-1,例如,n = 8和16時,分別爲-128~127和-32768~32767。
控制標誌 控制標誌是由程序根據需要用指令來設置的,以控制某些指令的執行方式。
控制標誌包括:
DF(Direction Flag):方向標誌
IF(Interrupt Flag):中斷標誌
TF(Trace Flag):跟蹤標誌