8086是intel系列的的16位微處理器,有16根資料線和20根位址線。因為可用20位位址,所以可定址的位址空間達220位元組即1mb。
幾乎在推出8086微處理器的同時,為了與當時已有的一整套intel外圍裝置介面晶元直接相容,intel公司還推出了準16位微處理器8088。8088的內部暫存器、內部運算部件以及內部操作都是16位的,但對外的資料匯流排只有8位。
程式設計結構,就是指從程式設計師和使用者的角度看到的結構,當然,這種結構與cpu內部的物理結構和實際布局是有區別的。在程式設計結構圖中可看到,從功能上,8086分為兩部分,即匯流排介面部件biu和執行部件eu。
如下圖為8086的程式設計結構
匯流排介面部件的功能是負責與儲存器、i/o埠傳送資料。具體講,匯流排介面部件要從記憶體取指令送到指令佇列;cpu執行指令時,匯流排介面部件要配合執行部件從指定的記憶體單元或者外設埠中取資料,將資料傳送給執行部件,或者把執行部件的操作結果傳送到指定的記憶體單元或外設埠中。
8086的匯流排介面部件由下列各部分組成:
①4個段位址暫存器
cs:16位的**段暫存器 ;
ds:16位的資料段暫存器 ;
es:16位的附加段暫存器 ;
ss:16位的堆疊段暫存器 。
②16位的指令指標暫存器ip
③20位的位址加法器
④6位元組的指令佇列緩衝器
對匯流排介面部件,下面需要注意兩點:
①8086的指令隊列為6個位元組。cpu在執行指令的同時,從記憶體中取下面1條指或幾條指令放在指令佇列中。這樣,一般情況下,8086執行完一條指令就可以立即執行一條指令,而不像以往的計算機那樣輪番地進行取指令和執行指令的操作,從而提高cpu的效率。
②位址加法器用來產生20位位址。8086可用20位位址定址1mb的記憶體空間,但8086內部暫存器都是16位的,所以需要乙個附加機構來根據16位暫存器提供的資訊計算出20位的實體地址,這個機構就是20位的位址加法器。
比如,一條指令的實體地址就是根據**段暫存器cs和指令指標暫存器ip的內容得到的。具體計算時,要將cs的內容左移4位,然後再與ip的內容相加。假設cs=fe00h,ip=0200h,此時指令的實體地址為fe200h。
執行部件的功能就是負責指令的執行。
從程式設計結構圖可見到,執行部件由下列幾個部分組成:
①4個通用暫存器,即ax、bx、cx、dx。
②4個專用暫存器,即基數指標暫存器bp,堆疊指標暫存器sp,源變址暫存器si,目的變址暫存器di。
③標誌暫存器fr。
④算術邏輯部件alu。
對執行部件,有以下4點說明:
①4個通用暫存器既可作為16位暫存器使用,也可作為8位暫存器使用。比如,bx暫存器作為8位暫存器時,分別稱為bh和bl,bh為高8位,bl為低8位。
②ax暫存器也稱為累加器,指令系統中有許多指令都是利用累加器來執行的。
③算術邏輯部件實現算術運算和邏輯運算。
④8086的標誌暫存器共有16位,其中7位未用,所用的各位含義如下:
根據功能,8086的標誌可以分為兩類:一類叫狀態標誌,另一類叫控制標誌。狀態標誌表示前面的操作執行後,算術邏輯部件處在怎樣一種狀態,這種狀態會像某種先決條件一樣影響後面的操作。控制標誌是人為設定的,指令系統中有專門的指令用於控制標誌的設定和清除,每個控制標誌都對某一種特定的功能起控制作用。
狀態標誌有6個,即sf、zf、pf、cf、af和of。
①符號標誌sf它和運算結果的最高位相同。當資料用補碼表示時,負數的最高位為1,所以符號標誌指出了運算結果是正還是負。
②零標誌zf如運算結果為零,則zf為1;如運算結果為非零,則zf
為0。③奇/偶標誌pf如運算結果的低8位中所含的1的個數為偶數,則pf為1,否則為0。
④進製標誌cf當加法運算使最高位產生進製時,或者減法運算引起最高位產生借位時,則cf為1。除此之外,移位指令也會影響這一標誌。
⑤輔助進製標誌af當加法運算時,如果第3位往第4位有進製,或者當減法運算時,如果第3位從第4位有借位,則af為1。此處的第3位是指從0開始計數的。
⑥溢位標誌of當運算過程中產生溢位時,會使of為1。當位元組運算的結果超出了範圍-128+127,或者當字運算的結果超出了範圍-32768+32767時,稱為溢位。
比如,執行下面兩個數的加法:
0010001101000101
+0011001000011001
0101010101011110
由於運算結果的最高位為0,所以,sf=0;而運算結果本身不為0,所以,zf=0;低8位所含的1的個數為5個,即有奇數個1,所以,pf=0;最高位沒有產生進製,所以,cf=0;又由於第3位沒有往第4位產生進製,所以,af=0;由於運算結果沒有超出有效範圍,所以,of=0。
當然,在絕大多數情況下,一次運算後,並不對所有標誌進行改變,程式也並不需要對所有的標誌作全面的關注,一般只是在某些操作之後,對其中某個標誌進行檢測。
控制標誌有3個,即df、if、tf。
①方向標誌df這是控制串操作指令用的標誌。如果df為0,則串操作過程中位址會不斷增值;反之,如果df為1,則串操作過程中位址不斷減值。
②中斷允許標誌if這是控制可遮蔽中斷的標誌。如if為0,則cpu不能響應可遮蔽中斷請求;如if為1,則cpu可接受可遮蔽中斷請求。
③跟蹤標誌tf也稱為單步標誌,如果tf為1,則cpu按跟蹤方式執行指令。
為了取得指令或傳送資料,就需要cpu的匯流排介面部件執行乙個匯流排週期。
在8086中,乙個最基本的匯流排週期由4個時鐘週期組成,時鐘週期是cpu的基本時間計量單位,它由計算機主頻決定。比如,8086的主額為10mhz,1個時鐘週期就是100ns。在1個最基本的匯流排週期中,習慣上將4個時鐘週期分別稱為4個狀態,即t1狀態、t2狀態、t3狀態和t4狀態。
①在t1狀態,cpu往多路復用匯流排上發出位址資訊,以指出要定址的儲存單元或外設埠的位址。
②在t2狀態,cpu從匯流排上撤銷位址,使匯流排的低16位浮置成高阻狀態,為傳輸資料作準備。匯流排的最高4位(ais~aig)用來輸出本匯流排週期狀態資訊。這些狀態資訊用來表示中斷允許狀態、當前正在使用的段暫存器名等。
③在t3狀態,多路匯流排的高4位繼續提供狀態資訊,而匯流排的低16位上出現由cpu寫出的資料或者cpu從儲存器或埠讀入的資料。
④由於外設或儲存器速度較慢,常常不能及時配合cpu傳送資料。這時,外設或儲存器會通過ready訊號線在t,狀態啟動之前向cpu發乙個「資料未準備好」訊號,於是cpu會在t3之後插入1個或多個附加的時鐘週期tw。tw也叫等待狀態,在tw狀態,匯流排上的資訊情況和t,狀態的資訊情況一樣。當指定的儲存器或外設完成資料傳送時,便在ready線上發出「準備好」訊號,cpu接收到這一訊號後,會自動脫離tw狀態而進入t4狀態。
③在t4狀態,匯流排週期結束。
需要指出,只有在cpu和記憶體或i/o介面之間傳輸資料,以及填充指令佇列時,cpu才執行匯流排週期。如果在1個匯流排週期之後,不立即執行下乙個匯流排週期,那麼,系統匯流排就處在空閒狀態,此時,執行空閒週期。
8086暫存器結構
知道有點老,但對電腦的的學習有好處,可以看看。8086暫存器和標誌位如下 通用暫存器 高8位 低8位 暫存器為16位,可按位元組 8位 操作 7 0 7 0 ax ah al 累加器 bx bh bl 基址暫存器 cx ch cl 計數暫存器 dx dh dl 資料暫存器 段暫存器 15 16位 0...
8086CPU學習筆記 8086的定址方式
認真寫好一篇文章 計算機的指令通常包含操作碼和運算元兩部分。指令有單運算元 雙運算元和無運算元三種,其中雙運算元的兩個運算元要用逗號隔開,逗號左邊是目的運算元,逗號右邊是源運算元。例如 mov ax,cx 該指令將cx暫存器中的數值放到ax暫存器中,其中mov為操作碼,ax為目的運算元,cx為源運算...
匯程式設計序練習emu8086
連續輸入三個字母 不限大小寫 將三個字母的ascii碼相加後將所得的結果以十六進製制數的形式顯示到螢幕上 data segment buff db 200 db 0 db 200dup 0 xle0 db 0 xle1 db 0 xle2 db 0 val1 db 0 val2 db 0 endd ...