彙編語言——80x86 CPU的3種工作模式

***80x86 CPU的3種工作模式***
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):跟蹤標誌
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章