當前位置:首頁 » 編程軟體 » 80386編程

80386編程

發布時間: 2022-06-18 19:09:36

1. 80386的發展史

80386(x32)
1985年春天的時候,英特爾公司已經成為了第一流的晶元公司。但它的8088/8086和80286晶元還沒有佔到壓倒性的優勢—盡管這些晶元非常成功。像Zilog公司和摩托羅拉公司,憑借著自己毫不遜色甚至稍高一籌的晶元產品,成為英特爾公司的強有力競爭者。而藍色巨人IBM正在秘密研究自己的CPU—286,AMD公司也開始涉足到CPU製造領域,他們將正在開發的第一塊晶元稱為386。而這個時候,英特爾公司的主營業務還不是CPU,而是存儲器。
英特爾決心全力開發32位核心的CPU—80386,而逐漸放棄存儲器業務。Intel給80386設計了三個技術要點:使用「類286」結構,開發80387協微處理器增強浮點運算能力,開發配套高速緩存解決內存速度瓶頸。
1985年10月17日,英特爾的劃時代的產品80386DX正式發布了,其內部包含27.5萬個晶體管,時鍾頻率為12.5MHz,後逐步提高到20MHz、25MHz、33MHz,最後還有少量的40MHz產品。80386DX的內部和外部數據匯流排是32位,地址匯流排也是32位,可以定址到4GB內存,並可以管理64TB的虛擬存儲空間。它的運算模式除了具有實模式和保護模式以外,還增加了一種「虛擬86」的工作方式,可以通過同時模擬多個8086微處理器來提供多任務能力。80386DX有比80286更多的指令,頻率為12.5MHz的80386每秒鍾可執行6百萬條指令,比頻率為16MHz的80286快2.2倍。80386最經典的產品為80386DX-33MHz,一般我們說的80386就是指得它。
由於32位微處理器的強大運算能力,PC的應用擴展到很多的領域,如商業辦公和計算、工程設計和計算、數據中心、個人娛樂。80386使32位CPU成為了PC工業的標准。
同時,80386採用「類286」匯流排結構,這樣就可以保持軟硬體的兼容性,可以利用現有技術和配件,降低整機的開發和製造成本。另外,80386有三種工作模式,適應的操作系統比較多,而且對現有的程序兼容性比較好。多任務處理一貫是大中型機的專利,但80386將多任務性能引入,在80386中有個用任務寄存器,用任務寄存器來管理任務的內存段,從而實現任務的切換。多任務使80386以一種廣泛的適應性和一種重要的工具進入了各行各業。
雖然當時80386沒有完善和強大的浮點運算單元,但配上80387協處理器,80386就可以順利完成AutoCAD等需要大量浮點運算的任務,從而順利進入了主流的商用電腦市場。另外,80386還有其他豐富的外圍配件支持,如82258(DMA控制器)、8259A(中斷控制器)、8272(磁碟控制器)、82385(Cache控制器)、82062(硬碟控制器)等。
針對內存的速度瓶頸,英特爾為80386設計了高速緩存(Cache),採取預讀內存的方法來緩解這個速度瓶頸。本來最初的設計,80386將內置L1 Cache,但由於工藝、成本、工期等等方面的限制,80386最後並沒有內置L1 Cache,而是將專門開發的L1 Cache晶元放置在CPU之外的主板上,但從此以後,Cache就和CPU成為了如影隨形的東西。另外,80386的內存管理非常先進,有頁式、段式、段頁式三種管理方式,可以管理巨大的內存空間,從而為應用程序提供足夠的舞台。
80386SX(x32)
1989年英特爾公司又推出准32位微處理器晶元80386SX。這是Intel為了擴大市場份額而推出的一種較便宜的普及型CPU,它的內部數據匯流排為32位,與80386相同,外部數據匯流排為16位。也就是說,80386SX仍然可以使用32位、16位、8位編程,其內部處理速度與80386DX接近,也支持真正的多任務操作,而它又可以接受為80286開發的16位輸入/輸出介面晶元,降低整機成本。80386SX和80386DX的關系,就好像早期的8088和8086的關系,在輸入輸出的位長上的區別,其「S」就表示單(16位數據匯流排),「D」就表示雙(32位數據匯流排)。80386SX使用的協微處理器是80387SX。
80386SL/80386DL(x32)
英特爾在1990年推出了專門用於筆記本電腦的80386SL和80386DL兩種型號的386晶元。這兩個類型的晶元可以說是80386DX/SX的節能型,其中,80386DL是基於80386DX內核,而80386SL是基於80386SX內核的。這兩種類型的晶元,不但耗電少,而且具有電源管理功能,在CPU不工作的時候,自動切斷電源供應。

2. 80386到現在的cpU增加了哪些知識點

先先說8086

在8086的EU--執行單元(Execution Unit)和BIU--匯流排介面單元(Bus Interface Unit)兩部分中包含有一些工作寄存器,這些寄存器用來存放計算過程中的各種信息,如操作數地址、操作數及運算的中間結果等。微處理器從寄存器中存取數據比從存儲器中存取數據要快的多,因此,在計算過程中,合理利用寄存器保存操作數、中間結果或其它信息,能提高程序的運行效率。根據這些寄存器所起的作用,8086寄存器組可以分為通用寄存器、專用寄存器和段寄存器三類
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1. 通用寄存器
通用寄存器包括了8個16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情況下作為通用的數據寄存器,用來暫時存放計算過程中所用到的操作數、結果或其他信息。它們還可分為兩個獨立的8位寄存器使用,命名為AL、AH、BL、BH、CL、CH、DL和DH。這4個通用數據寄存器除通用功能外,還有如下專門用途:

AX作為累加器用,所以它是算術運算的主要寄存器。在乘除指令中指定用來存放操作數。另外,所有的I/O指令都使用AX或AL與外部設備傳送信息。

BX在計算存儲器地址時,可作為基址寄存器使用。

CX常用來保存計數值,如在移位指令、循環指令和串處理指令中用作隱含的計數器。
DX在作雙字長運算時,可把DX和AX組合在一起存放一個雙字長數,DX用來存放高16位數據。此外,對某些I/O操作,DX可用來存放I/O的埠地址。

SP、BP、SI、DI四個16位寄存器可以象數據寄存器一樣在運算過程中存放操作數,但它們只能以字(16位)為單位使用。此外,它們更經常的用途是在存儲器定址時,提供偏移地址。因此,它們可稱為指針或變址寄存器。

SP稱為堆棧指針寄存器,用來指出棧頂的偏移地址。

BP稱為基址指針寄存器,在定址時作為基地址寄存器使用,但它必須與堆棧段寄存器SS聯用來確定堆棧段中的存儲單元地址。

SI為源變址寄存器,在串處理指令中,SI作為隱含的源變址寄存器與DS聯用,以確定數據段中的存儲單元地址,並有自動增量和自動減量的變址功能。

DI為目的變址寄存器,在串處理指令中,DI和附加段寄存器ES聯用,以達到在附加段中定址的目的,然後DI自動增量或減量。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
8086的專用寄存器包括IP、SP和FLAGS三個16位寄存器。

IP為指令指針寄存器,它用來存放將要執行的下一條指令地址的偏移量,它與段寄存器CS聯合形成代碼段中指令的物理地址。在計算機中,控製程序的執行流程就是通過控制IP的值來實現的。

SP為堆棧指針寄存器,它與堆棧段寄存器聯用來確定堆棧段中棧頂的地址,也就是說SP用來存放棧頂的偏移地址。

FLAGS為標志寄存器,這是一個存放條件碼標志、控制標志的16位寄存器。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
8086的標志寄存器
條件碼標志用來記錄程序中運行結果的狀態信息,它們是根據有關指令的運行結果由(CPU)自動設置的。由於這些狀態信息往往作為後續條件轉移指令的轉移控制條件,所以稱為條件碼。
① 進位標志CF,記錄運算時最高有效位產生的進位值。
② 符號標志SF,記錄運算結果的符號。結果為負時置1,否則置0。
③ 零標志ZF,運算結果為0時ZF位置1,否則置0。
④ 溢出標志OF,在運算過程中,如操作數超出了機器可表示數的范圍稱為溢出。溢出時OF位置1,否則置0。
⑤ 輔助進位標志AF,記錄運算時第3位(半個位元組)產生的進位值。
⑥ 奇偶標志PF,用來為機器中傳送信息時可能產生的代碼出錯情況提供檢驗條件。當結果操作數中1的個數為偶數時置1,否則置0。

控制標志位有3位:
① 方向標志DF,在串處理指令中控制處理信息的方向。當DF=1時,串處理從高地址向低地址方向處理。當DF=0時,串處理就從低地址向高地址方向處理。
② 陷阱標志TF,用於調試時的單步方式操作。當TF=1時,每條指令執行完後產生陷阱,由系統控制計算機;當TF=0時,CPU正常工作,不產生陷阱。
③ 中斷標志IF,用於控制可屏蔽硬體中斷。當IF=1時,允許8086微處理器響應中斷請求,否則關閉中斷。

8086提供了設置某些狀態信息的指令。必要時,程序員可使用這些指令來建立狀態信息。
調試程序Debug中提供了測試標志位的手段,它用符號表示某些標志位的值
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
3. 段寄存器

8086微處理器共有4個16位的段寄存器,在定址內存單元時,用它們直接或間接地存放段地址。
代碼段寄存器CS:存放當前執行的程序的段地址。
數據段寄存器DS:存放當前執行的程序所用操作數的段地址。
堆棧段寄存器SS:存放當前執行的程序所用堆棧的段地址。
附加段寄存器ES:存放當前執行程序中一個輔助數據段的段地址。

註:
執行單元(Execution Unit):負責指令的執行,實際是既有控制器的功能,也有運算器的功能。包括:ALU、標志寄存器、暫存器、寄存器組、控制單元 。EU和BIU是組成8086微處理器的兩個基本功能部件,他們相互配合完成指令操作。當EU從指令隊列中去走指令後,指令隊列出現空位元組,BIU就立即自動地從內存中取出後續的指令放入隊列;當EU執行指令需要操作數時,BIU就根據EU給出的操作數有效地址,從指定的內存單元或I/O埠取出數據供EU使用;當EU運算結束後,BIU將運算結果寫入指定的內存單元或I/O埠。EU和BIU這兩個功能部件又是相互獨立的。大多數情況下,EU的執行指令操作與BIU的取指令操作在實踐上可重疊進行,既EU進行某條指令執行操作時,BIU可同時進行後繼指令的取指令操作,這兩個部件並行連續工作可形成指令處理流水線。這樣,可減少CPU取指令的等待時間,加快了CPU的指令執行速度,也提高了系統匯流排的利用率。)

寫這篇文章,完全是因為學習保護模式需要這些知識,讀者完全可以走馬觀花,大致看看有什麼內容,知道需要的時候來查這篇文章就可以了,完全沒有必要抵抗著困意非要把這篇文章認真看完,記住裡面每一個寄存器里每一位的定義,但是以後的文章如果需要,一定要記得回來查查相關的內容。

然後說一下386

80386共提供7種類型的32位寄存器,如下:

通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)
段寄存器(CS、SS、DS、ES、FS、GS)
指令指針寄存器和標志寄存器(EIP、EFLAGS)
系統表寄存器(GDTR、IDTR、LDTR、TR)
控制寄存器(CR0、CR1、CR2、CR3、CR4)
調試寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)
測試寄存器(TR6、TR7)
其中後三類寄存器是80386以後的CPU才有的,以前的CPU完全沒有。

下圖是前四類寄存器的大致示意圖:

本文只對這些寄存器做一個大致的介紹,其中有些特殊且有較大意義的寄存器,會另文介紹。

一、通用寄存器

一組八個通用寄存器是對8086/80286通用寄存器的32位擴展,其用法與在8086/80286中相似,支持8位、16位、32位操作,進行32位操作是,寄存器名稱前面冠以「E」。

這八個寄存器的名稱如下:EAX(累加器)、EBX(基址)、ECX(計數)、EDX(數據)、ESP(棧指針)、EBP(基址指針)、ESI(源變址)、EDI(目的變址)。

ESI EDI變址寄存器
32位CPU有2個32位通用寄存器ESI和EDI。其低16位對應先前CPU中的SI和DI,對低16位數據的存取,不影響高16位的數據。

寄存器ESI、EDI、SI和DI稱為變址寄存器(Index Register),它們主要用於存放存儲單元在段內的偏移量,用它們可實現多種存儲器操作數的定址方式,為以不同的地址形式訪問存儲單元提供方便。變址寄存器不可分割成8位寄存器。作為通用寄存器,也可存儲算術邏輯運算的操作數和運算結果。 它們可作一般的存儲器指針使用。在字元串操作指令的執行過程中,對它們有特定的要求,而且還具有特殊的功能。

SI是源變址寄存器,DI是目的變址寄存器。可以用來存放數據、地址,功能類似、用法類似、一般使用哪個都可以。

二、段寄存器

80386比8086/80286增加了兩個段寄存器FS、GS。

除CS支持代碼段,SS支持堆棧段外,程序員可以利用其它的所有段寄存器支持數據段。

每個段寄存器對應這一個64位高速緩存器(有些資料中說有96位,但值使用其中的64位),這在8086中是沒有的(在80286中為48位),它的具體作用將另文介紹。

三、指令指針寄存器和標志寄存器

指令寄存器EIP是對8086/80286指令指針寄存器的32位擴展,它包含著待執行指令的32位偏移量,該值總是相對CS所代表的段基址而言的。

標志寄存器也是對8086/80286標志寄存器的32位擴展,其定義如下(這張圖截自Intel關於IA32架構的最新文檔):

其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已經存在,請參考相關資料。

IOPL(I/O Privilege Level)是從80286開始出現的,佔2個bit表示I/O特權級,如果當前特權級小於或等於IOPL,則可以執行I/O操作,否則將出現一個保護性異常。IOPL只能由特權級為0的程序或任務來修改。

NT(Nested Task)也是從80286開始出現的,表示嵌套任務,用於控制中斷返回指令IRET,當NT=0時,用堆棧中保存的值恢復EFLAGS、CS和EIP,從而實現返回;若NT=1,則通過任務切換實現中斷返回。

下面的標志位是80386以後的CPU才有的標志。

VM(Virtual-8086 mode)表示虛擬8086模式,如果VM被置位且80386已出於保護模式下,則CPU切換到虛擬8086模式,此時,對段的任何操作又回到了實模式,如同在8086下運行一樣。

RF(Resume flag)表示恢復標志(也叫重啟標志),與調試寄存器一起用於斷點和單步操作,當RF=1 時,下一條指令的任何調試故障將被忽略,不產生異常中斷。當RF=0時,調試故障被接受,並產生異常中斷。用於調試失敗後,強迫程序恢復執行,在成功執行每條指令後,RF自動復位。

AC(Alignment check)表示對齊檢查。這個標志是80486以後的CPU才有的。當AC=1且CR0中的AM=1時,允許存儲器進行地址對齊檢查,若發現地址未對齊,將產生異常中斷。所謂地址對齊,是指當訪問一個字(2位元組長)時,其地址必須是偶數(2的倍數),當訪問雙字(4位元組長)時,其地址必須是4的倍數。

但是只有運行在特權級3的程序才執行地址對齊檢查,特權級0、1、2忽略該標志。

VIF(Virtual interrupt flag)表示虛擬中斷標志。以下的三個標志是Pentium以後的CPU才有的。當VIF=1時,可以使用虛擬中斷,當VIF=0時不能使用虛擬中斷。該標志要和下面的VIP和CR4中的VME配合使用。

VIP(Virtual interrupt pending flag)表示虛擬中斷掛起標志。當VIP=1時,VIF有效,VIP=0時VIF無效。

ID(Identification flag)表示鑒別標志。該標志用來只是Pentium CPU是否支持CPUID的指令。

實際上,如果不編寫操作系統,大部分標志可能很難得用到一次,有個印象就好了,用到了再去查不遲。

四、系統表寄存器

80386 中有4個系統表寄存器,分別是全局描述符表寄存器(GDTR)、中斷描述符表寄存器(IDTR)、局部描述符表寄存器(LDTR)、任務狀態寄存器(TR)。系統表寄存器用於在保護方式下,管理4 個系統表,由於只能在保護方式下使用,因此又稱為保護方式寄存器。有關描述附表的問題,另文介紹。

五、控制寄存器

80386的控制寄存器有4個,其中CR1保留以後使用,從Pentium開始,又增加了一個CR4,CR0的低16位包含了與80286的MSW一致的位定義,保持了和80286的兼容,同時也兼容了從80286開始的兩條指令LMSW/SMSW,其基本定義如下:

CR0中各位含義如下:

PE(Protection Enable)保護模式允許,PE=0表示CPU工作在實模式,PE=1表示CPU工作在保護模式
MP(Monitor Coprocessor)監控協處理器,MP=1表示協處理器在工作,MP=0表示協處理器未工作。
EM(Emulation)協處理器模擬,當MP=0,EM=1時,表示正在使用軟體模擬協處理器工作。
TS(Task Switched)任務轉換,每當進行任務轉換時,TS=1,任務轉換完畢,TS=0。TS=1時不允許協處理器工作。
以上4個定義從80286開始,下面的2個定義從80386開始存在

ET(Extension Type)處理器擴展類型,反映了所擴展的協處理器的類型,ET=0為80287,ET=1為80387。
PG(Paging)頁式管理機制使能,PG=1時頁式管理機制工作,否則不工作。
從80486開始又增加了如下位定義。

NE(Numeric Error)數值異常中斷控制,NE=1時,如果運行協處理器指令發生故障,則用異常中斷處理,NE=0時,則用外部中斷處理。
WP(Write Protect)防寫,當WP=1時,對只讀頁面進行寫操作會產生頁故障。
AM(Alignment Mask)對齊標志,AM=1時,允許對齊檢查,AM=0時不允許,關於對齊,在EFLAGS的AC標志時介紹過,在80486以後的CPU中,CPU進行對齊檢查需要滿足三個條件,AC=1、AM=1並且當前特權級為3。
NW(Not Write-through)和CD(Cache Disable),這兩個標志都是用來控制CPU內部的CACHE的,當NW=0且CD=0時,CACHE使能,其它的組合說起來比較復雜,如果有讀者真的想搞清楚的話,可以參閱《Intel? 64 and IA-32 Architectures》中的「Software Developer』s Manual Volume 3A」這一冊,在第10章對這兩個標志的各種組合有比較詳細的說明。
CR1保留未用;CR2存放引起頁故障的線性地址,只有在PG=1時,CR2才有效,當頁故障處理程序被激活時,壓入頁故障處理程序堆棧中的錯誤碼提供頁故障的狀態信息。
CR3的bit12--bit31存放頁目錄的基地址,因為也目錄總是頁對齊的(一頁為4K),所以頁目錄基地址從bit12開始就可以了。只有當CR0中的PG=1時,CR3的頁目錄基地址才有效。
從80486開始,在CR3的低12位定義了兩個控制位,如下:

PCD(Page-level Cache Disable)頁CACHE禁止,當PCD=0時,頁目錄表進行高速緩存,PCD=1時,不進行高速緩存;該位控制PCD引腳控制外部CACHE工作還是不工作。
PWT(Page-level Writes Transparent),CACHE的寫入分為透寫(Write-Through)和回寫(Write-Back),80486以上的CPU內部的CACHE都是透寫的,但對外部CACHE而言,允許某些頁是回寫的,而另一些頁是透寫的,當PWT=1時,外部CACHE對頁目錄進行透寫,否則進行回寫;此位驅動PWT引腳以控制外部CACHE是透寫還是回寫。
CR4是從Pentium CPU開始出現的。

VME(Virtual-8086 Mode Extensions)虛擬8086方式擴展,VME=1允許使用虛擬8086擴展模式,否則只能使用80386/80486的虛擬8086模式。
PVI(Protected-Mode Virtual Interrupts)保護模式虛擬中斷,PVI=1時,在保護模式下支持虛擬中斷標志VIF(EFLAGS中),PVI=0則不支持虛擬中斷標志。
TSD(Time Stamp Disable)時間戳禁止,TSD=1時,允許在特權級為0的程序中執行RDTSC指令(讀時間戳計數指令),TSD=0時,允許任何特權級執行RDTSC指令。
DE(Debugging Extensions)調試擴展,
PSE(Page Size Extensions)頁大小擴展,PSE=1時,頁大小可以擴展到2M或4M,PSE=0時,頁大小隻能是4K.
PAE(Physical Address Extension)物理地址擴展,PAE=1時,頁物理地址可以擴展到36bits以上,PAE=0時只能用32bits的物理地址。
MCE(Machine-Check Enable)硬體檢查使能,Pentium以後的CPU有一種硬體檢測功能,MCE=1時允許使用該功能。
PGE(Page Global Enable)全局頁使能,PGE=1時,允許使用全局頁,PGE=0時禁止使用全局頁。
PCE(Performance-Monitoring Counter Enable)性能監視計數器使能,當PCE=1時,允許在任何保護級下執行RDPMC指令,PCE=0時,只有特權級0的程序可以執行RDPMC指令。

OSFXSR(Operating System Support for FXSAVE and FXRSTOR instructions)
OSXMMEXCPT(Operating System Support for Unmasked SIMD Floating-Point Exceptions)
VMXE(VMX-Enable Bit)VMX使能位,VMXE=1時,允許VMX操作。
SMXE(SMX-Enable Bit)SMX使能位,SMXE=1時,允許SMX操作。
OSXSAVE(XSAVE and Processor Extended States-Enable Bit)

六、調試寄存器

一共有8個調試寄存器DR0--DR7,DR0-DR3可以分別設置4個斷點的線性地址,DR4-DR5保留未用,DR6是斷點狀態寄存器,DR7是斷點控制寄存器(包括斷點類型、斷點長度,斷點開放/禁止)

七、測試寄存器

一共有8個測試寄存器TR0--TR7,TR0-TR2保留,TR3-TR5用作CACHE測試,TR6為命令測試寄存器,TR7為測試數據寄存器

3. 多線程編程的原理,請圍繞匯編來說

多線程主要是在80286以及以上的處理器中的功能,最早的32位多線程是80386,看了你另外的帖子,你好象懂點匯編語言,不知道你懂不懂80386匯編,他們的指令形式差不多,區別就在於工作機制和32位.如何你想搞多線程,首先要會386下的匯編,比起8086處理器,它了許多功能,如:分頁機制(虛擬存儲器),多線程等..還有很多功能,至於它多線程的工作機制主要是內存查表的方法,將所有程序的地址段地址和偏移地址放入GDT表和IDT表中,再用時鍾頻率的中斷來不斷讀取這張表到cs:eip寄存器中和將cs:eip內容保存如這樣表,就達到了交換代碼地址,當然這當中還牽涉到很徐徐多多的概念,比如各個寄存器的保存,代碼段的保護,各種控制門,描述符,和cpu內的各種寄存器保存表的地址,這是整整一本書的概念,建議起看揚季文的書叫做8086匯編語言程序設計,上半本書是講8086,是基礎,下半本書是80386是386的工作機制和原理和匯編方法,我在這里就引導你一下

可以說8086和80386是有很大區別的,努力 推薦你一個群 簡單bios和內核研究群,67286087

4. 現在學習Intel80386編程手冊有用嗎,可以如果要針對現在的酷睿2TM編程,有何文檔可用來學習參考

當然有用,我最近也剛學,經常編一些小程序,我的處理器是i3,但是也是跟80386沒什麼大的區別。我是用vs調試器觀察到的,寄存器都一樣。我知道一本好書,絕對的好書,叫Intel匯編語言程序設計,你可以看看。

5. 80386的物理地址空間有多大

邏輯地址(Logical Address) 是指由程序產生的與段相關的偏移地址部分。例如,你在進行C語言指針編程中,可以讀取指針變數本身值(&操作),實際上這個值就是邏輯地址,它是相對於你當前進程數據段的地址,不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);邏輯也就是在Intel 保護模式下程序執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全一樣)。應用程序員僅需與邏輯地址打交道,而分段和分頁機制對您來說是完全透明的,僅由系統編程人員涉及。應用程序員雖然自己可以直接操作內存,那也只能在操作系統給你分配的內存段操作。

線性地址(Linear Address) 是邏輯地址到物理地址變換之間的中間層。程序代碼會產生邏輯地址,或者說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。如果啟用了分頁機制,那麼線性地址可以再經變換以產生一個物理地址。若沒有啟用分頁機制,那麼線性地址直接就是物理地址。Intel 80386的線性地址空間容量為4G(2的32次方即32根地址匯流排定址)。

物理地址(Physical Address) 是指出現在CPU外部地址匯流排上的定址物理內存的地址信號,是地址變換的最終結果地址。如果啟用了分頁機制,那麼線性地址會使用頁目錄和頁表中的項變換成物理地址。如果沒有啟用分頁機制,那麼線性地址就直接成為物理地址了。

虛擬內存(Virtual Memory) 是指計算機呈現出要比實際擁有的內存大得多的內存量。因此它允許程序員編制並運行比實際系統擁有的內存大得多的程序。這使得許多大型項目也能夠在具有有限內存資源的系統上實現。一個很恰當的比喻是:你不需要很長的軌道就可以讓一列火車從上海開到北京。你只需要足夠長的鐵軌(比如說3公里)就可以完成這個任務。採取的方法是把後面的鐵軌立刻鋪到火車的前面,只要你的操作足夠快並能滿足要求,列車就能象在一條完整的軌道上運行。這也就是虛擬內存管理需要完成的任務。在Linux 0.11內核中,給每個程序(進程)都劃分了總容量為64MB的虛擬內存空間。因此程序的邏輯地址范圍是0x0000000到0x4000000。

有時我們也把邏輯地址稱為虛擬地址。因為與虛擬內存空間的概念類似,邏輯地址也是與實際物理內存容量無關的。
邏輯地址與物理地址的「差距」是0xC0000000,是由於虛擬地址->線性地址->物理地址映射正好差這個值。這個值是由操作系統指定的。

6. 80x86匯編和win32匯編有什麼區別

現代操作系統說的x86,沒有特別說明都指:「80386以上的新cpu能運行」。但一般國內入門書上說的80x86匯編語言,卻是dos下8086「實模式」的編程。當然這是基礎,不能說落後就不學。

80x86與win32匯編語言最終都是生成80386以上可運行的代碼(廢話)。不過windows編程有它特殊的地方,有它的規矩。例如callback函數,不像dos程序那樣順序執行,程序讓系統來決定何時執行;又例如資源,很多時候可以利用系統或其他庫提供的東西……這些由windows系統的特殊性決定。因此「win32匯編」文本的格式與入門書上的有很多不同。

匯編語言與其他高級語言一樣,都要經過編譯程序編譯,才能生成執行代碼。如果你使用的編譯器不同,文本格式又有些微細差別。

7. 86c186和80386及8086是統一種匯編嗎謝謝!

不是

86c186 --> 沒聽過
80386 --> 用的是x86 的32位匯編,支持實模式和保護模式
8086 --> 用的是x86的 16位匯編,只支持實模式

8. 80386的保護類型有哪些考試題

80386 和 保護模式
___William Liu
Intel CPU 一般可以運行在兩種模式之下,即實模式和保護模式。早期的 Intel CPU ( 8086 , 8088 )只能工作在實模式之下,系統中只能運行單個任務,而且只能使用實地址模式。對於 Intel 80386 以上的晶元則還可以運行在 32 位的保護模式之下。在保護模式之下的 CPU 可以支持多任務;支持 4GB 的物理內存;支持 64TB 的虛擬內存;支持內存的頁式管理和段式管理以及支持特權級。
本文檔將首先介紹 Intel 80386 CPU 的幾個內部寄存器,然後再由淺入深的分別介紹保護模式下的段式管理,頁式管理,虛擬內存,多任務以及特權級管理等幾個方面。
Intel 80386 CPU 的內部寄存器
這一部分先大致介紹一下 386 的內部寄存器,具體細節在後面的幾節中再詳細說明。一般來說, CPU 設計用來系統編程的系統寄存器包括如下幾類:
• 標志寄存器 (EFLAGS)
• 內存管理寄存器 (GDTR , LDTR , IDTR , TR) • 控制寄存器 (CR0 , CR1 , CR2 , CR3 , CR4) • 兼容 8086 通用寄存器( EAX , EBX , ECX , EDX ) • 兼容 8086 段寄存器( CS , DS , ES , SS , FS , GS ) • 兼容 8086 數據寄存器( ESI , EDI , EIP , ESP )

9. 80386以上的32位微處理器有哪三種基本工作方式

1、實地址方式(real mode)
實地址方式的工作原理與8086基本相同,其主要區別是32位微處理器能處理32位數據。
2、保護方式(protected mode)
保護方式下,CPU可訪問232位元組的物理存儲空間,段長為232位元組,而且還可以實施保護功能
32位微處理器為了支持多任務操作系統,以4個特權級來隔離或保護各用戶及操作系統。
3、虛擬8086方式(virtual 8086 mode)
在虛擬方式下,運行8086程序可以盡量利用32位微處理器的保護機構。尤其是32位微處理器允許同時執行8086的操作系統及其應用程序和32位微處理器操作系統的應用程序。

10. 在80386保護模式下如何使用div指令

除數位數, 隱含的被除數, 商, 余數, 舉例

8位, AX, AL, AH, DIV BH

16位, DX-AX, AX, DX, DIV BX

32位, EDX-EAX, EAX, EDX, DIV ECX

⊙﹏⊙b汗,網路這個輸入框做得實在是太爛了

熱點內容
sql存儲過程命令 發布:2025-05-16 13:17:54 瀏覽:145
用紙做解壓小玩具西瓜 發布:2025-05-16 13:04:09 瀏覽:935
區域網xp無法訪問win7 發布:2025-05-16 13:03:58 瀏覽:942
油卡如何修改密碼 發布:2025-05-16 13:00:35 瀏覽:901
安卓手機如何拼照片 發布:2025-05-16 12:58:23 瀏覽:374
深入淺出python 發布:2025-05-16 12:56:52 瀏覽:655
國二c語言vc2010怎麼編譯運行 發布:2025-05-16 12:53:49 瀏覽:424
華為熱點哪裡看密碼 發布:2025-05-16 12:53:44 瀏覽:515
新手如何用java寫安卓app 發布:2025-05-16 12:53:07 瀏覽:402
虛榮掛腳本 發布:2025-05-16 12:50:44 瀏覽:480