8088/8086的功能結構

http://mcit.xjtu.edu.cn/wlkj/wykj/ch2/ch2_2_4.htm

 

2.2.4 8088/8086的功能結構

 

一、8088/8086的結構

    8086與8088在結構上都是由執行單元EU總線接口單元BIU兩大部分構成。 以下是8088/8086的內部結構框圖。

  

 

    l 執行單元EU負責執行指令。EU在工作時不斷地從指令隊列取出指令代碼,並完成指令 所要求的操作。它由算術邏輯單元ALU通用寄存器REGs標誌寄存器FLAGSEU控制部件組成。 各部件的功能如下:

    ALU:即運算器,進行算術、邏輯、移位、偏移地址計算等各種運算。

    FLAGS:存放運算結果的特徵,如進借位、是否爲零、奇偶性、溢出等。

    REGs:臨時存放操作數、運算結果以及操作數地址等。

    EU控制部件:接收指令隊列中的指令,進行指令譯碼、分析,形成各種控制信號,實現EU各個部件完成規定動作的控制。

    l 總線接口單元BIU負責CPU與存儲器、I/O接口之間的信息 (包括數據、地址、控制命令等)傳送。 包括生成訪問存儲器所需的20位的物理地址、不斷從內存中取指令並送到指令隊列、以及配合EU對指定的內存單元或者外設端口進行數據存取操作。BIU由段寄存器指令指針寄存器IP指令隊列地址加法器以及總線控制邏輯組成。 各部件的功能如下:

    總線控制邏輯CPU與外總線之間的接口,實現指令、數據以及其他外部信息的存取。

    段寄存器:存放存儲器段的段基地址。

    指令指針寄存器:存放當前要讀取的指令的地址。它相當於前面介紹過的指令計數器PC

    指令隊列:8088和8086的指令 隊列長度分別爲4字節和6字節,爲FIFO(先進先出)結構。當EU從指令隊列中取走指令,指令隊列出現空字節時,BIU就自動執行一次取指令週期,從內 存中取出後續的指令代碼放入隊列中。當EU需要數據時,BIU根據EU給出的地址,從指定的內存單元或外設中取出數據供EU使用。當運算結束時,BIU將 運算結果送入指定的內存單元或外設。當指令隊列空時,EU就等待,直到有指令爲止。若BIU正在取指令,EU發出訪問總線的請求,則必須等BIU取指令完 畢後,該請求才能得到響應。一般情況下,程序順序執行,當遇到跳轉指令時,BIU就使指令隊列復位,從新地址取出指令,並立即傳給EU去執行。指令隊列在 EU和BIU之間起到了“橋樑”的作用(或者說是一個指令“傳送帶”,源源不斷地把指令從BIU送到EU),使BIU和EU可以並行工作。

    地址加法器用來產生20位的物理地址。8086/8088的寄存器都是16位的,無法裝載20位的物理地址。爲了解決這個問題,8088/8086採用了將地址空間分段的方法,即將220(1MB) 的地址空間分爲若干個64KB的段,然後用段基址加上段內偏移來訪問物理存儲器。8088/8086規定,分段總是從以16字節爲單位的邊界處開始,所以 段的起始地址最低四位總是0,即XXXX0H,這樣每個段的基地址只需用16位便可表示。在不嚴格的情況下,也可以說段基址是段起始地址的高16位(若段 是以64KB爲邊界,則這種說法就是完全正確的)。由於段基址的這個特點,BIU在計算存儲器的物理地址時,即是將段基址左移4位然後與段內偏移相加獲 得。如下圖所示。

    top

二、8088/8086的內部寄存器

    8088/8086內部有14個16位的寄存器。按其功能可分爲三大類:通用寄存器(8個),段寄存器(4個)和控制寄存器(2個),如下圖。

    1. 通用寄存器

    通用寄存器包括數據寄存器地址指針寄存器變址寄存器

    (1)數據寄存器(AX、BX、CX、DX)
    數據寄存器一般用於存放參與運算的數據或運算的結果。每一個數據寄存器都是16位寄存器,但又可將高、低8位分別作爲兩個獨立的8位寄存器使用。它們的高 8位記作AH、BH、CH、DH,低8位記作AL、BL、CL、DL。這種靈活的使用方法給編程帶來極大的方便,既可以處理16位數據,也能處理8位數 據。

    數據寄存器除了作爲通用寄存器使用外,它們還有各自的習慣用法。

    l AX(Accumulator)稱爲累加器,常用於存放算術邏輯運算中的操作數和結果,另外所有的I/O指令都使用AX與外設接口傳送信息。

    l BX(Base)稱爲基址寄存器,常用來存放訪問內存時的基地址。

    l CX(Counter)稱爲計數寄存器,在循環和串操作指令中用作計數器。

    l DX(Data)稱爲數據寄存器,在寄存器間接尋址的輸入輸出指令中存放I/O地址。另外,在做雙字長乘除法運算時,DX與AX聯合起來存放一個雙字長數(32位),DX存放高16位,AX存放低16位。

    (2)地址指針寄存器(SP、BP)
    l SP(Stack Pointer)稱爲堆棧指針寄存器,它在堆棧操作中存放棧頂的偏移地址,壓棧或出棧操作時,SP會自動調整指向新的棧頂。

    l BP(Base Pointer)稱爲基址指針寄存器。一般也常用來存放訪問內存時的基地址。但它通常是與SS寄存器配對使用。
    作爲通用寄存器,SP和BP也可以存放普通操作數。但實際上,它們更經常更重要的用途是存放內存單元的偏移地址,特別是在訪問堆棧時作爲指向堆棧的指針(因爲它們的默認段寄存器都是SS)。

    (3)變址寄存器(SI、DI)
    l SI(Source Index)稱爲源變址寄存器,常常在變址尋址方式中作爲源操作數的索引指針。

    l DI(Destination Index)稱爲目的變址寄存器,常常在變址尋址方式中作爲目的操作數的索引指針。

    作爲通用寄存器,SI和DI也可以存放普通操作數。但大多數情況下都是用來存放內存單元的偏移地址。

    2. 段寄存器(CS、SS、DS、ES)
    4個16位段寄存器用來存放當前可尋址的四個段的段基地址。

    l CS(Code Segment Register)稱爲代碼段寄存器,指示當前執行程序所在存儲器段。用戶程序不能直接對CS進行操作。

    l SS(Stack Segment Register)稱爲堆棧段寄存器,指示當前程序使用的堆棧所在的存儲器段。

    l DS(Data Segment Register)稱爲數據段寄存器,指示當前程序使用的數據所在的存儲器段。

    l ES(Extra Segment Register)稱爲附加段寄存器,指示當前程序使用的數據所在的另外一個存儲器段。

    3. 控制寄存器(IP、FLAGS)
    l IP(Instruction Pointer)稱爲指令指針寄存器,用以存放預取指令的偏移地址。CPU取指令時總是以CS爲段基址,以IP爲偏移地址。每取一條指令,IP都會自動指向下一條指令。用戶程序不能直接對IP進行操作。

    l FLAGS稱爲標誌寄存器,它是16位寄存器,但只使用其中的9位(包括6個狀態標誌和3個控制標誌),如下圖所示。

    狀態標誌位記錄了算術和邏輯運算結果的一些特徵。如結果是否爲零,是否有進借位,結果是否溢出等。

    CF 進位標誌位。當進行加(減)法運算時,若最高位有進(借)位時CF=1,否則CF=0。

    PF 奇偶標誌位。當運算結果中“1”的個數爲偶數時PF=1,否則PF=0。

    AF 輔助進位位。在加(減)法操作中,Bit3向Bit4有進位(借位)時AF=1,否則AF=0。

    ZF 零標誌位。當運算結果爲零時ZF=1,否則ZF=0。

    SF 符號標誌位。當運算結果的最高位爲1時SF=l,否則SF=0。

    OF 溢出標誌位。當算術運算的結果超出了帶符號數的範圍時OF=l,否則OF=0。

    控制標誌位用於設置控制條件。控制標誌被設置後便對其後的操作產生控制作用。

    TF 跟蹤標誌位。TF=1使CPU處於單步執行指令的工作方式,即每執行一條指令,就自動產生一次單步中斷,從而能夠逐條指令地跟蹤程序的運行。

    IF 中斷允許標誌位。IF=1使CPU可以響應可屏蔽中斷請求。IF=0禁止響應可屏蔽中斷請求。IF的狀態對非屏蔽中斷及內部中斷沒有影響。

    DF 方向標誌位。DF=1使串操作按減地址方式進行。DF=0使串操作按增地址方式進行。

    【例】8088/8086 ALU執行完以下加法操作後,各狀態標誌位的內容是什麼?

          8234H + 9BCDH

    解:把上述16進制數加法寫成二進制數加法

            1000 0010 0011 0100

         +  1001 1011 1100 1101

          1 0001 1110 0000 0001

        ·最高位有進位,所以CF=1;

        ·結果中包含5個“1”,1的個數爲奇數,所以PF=0;

        ·bit3向bit4有進位,所以AF=1;

        ·結果不爲零,所以ZF=0;

        ·結果的符號位爲0,所以SF=0;

        ·結果超出了16位有符號數的範圍,所以OF=1。(從兩個負數相加結果爲正數也可以看出結果溢出)

    top 上節 下節

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章