第二周 微處理器與總線
大家好,又是我,沉迷學(xué)習(xí)無法自拔的小笨蛋康sir。 這個(gè)文集將會(huì)同步更新我觀看吳寧老師的《微機(jī)原理與接口技術(shù)》教學(xué)視頻寫的筆記,學(xué)習(xí)筆記,大概每周一章。 有問題大家可以在評(píng)論下面留言討論,歡迎糾錯(cuò)! 歡迎收藏閱讀,動(dòng)動(dòng)小手給個(gè)硬幣點(diǎn)個(gè)贊。 ????????????????????????????????????????????????????????????????——@正能量的康sir?
也可移步我的博客(https://blog.csdn.net/qq_33956508)獲得更好的閱讀體驗(yàn),也會(huì)更新一些其它技術(shù)類文章。

第9講 8088微處理器
8088/8086屬于第三代處理器的典型代表。內(nèi)部都是16位(二代8位)
8086對(duì)外總線16位。8088對(duì)外總線8位以兼容以前的設(shè)備。
關(guān)注點(diǎn):
8088/8086CPU能夠?qū)崿F(xiàn)指令并行流水工作的原因
實(shí)地址模式下的存儲(chǔ)器地址變換原理
如何知道CPU當(dāng)前工作狀態(tài)及指令運(yùn)算結(jié)果的特征
8088/8086CPU的特點(diǎn)(相對(duì)于以前):
采用并行流水線工作方式(通過設(shè)置指令領(lǐng)取隊(duì)列實(shí)現(xiàn))(CPU內(nèi)部結(jié)構(gòu))
對(duì)內(nèi)存空間實(shí)行分段管理(將內(nèi)存分為4個(gè)邏輯段并設(shè)置地址段寄存器,以實(shí)現(xiàn)對(duì)1MB空間的尋址)(實(shí)模式存儲(chǔ)器尋址)
支持協(xié)處理器(工作模式)
8088/8086CPU的兩種工作模式
最小模式:為單處理器模式,所有控制信號(hào)由微處理器產(chǎn)生
最大模式:為多處理器模式,部分控制信號(hào)由外部總線控制器產(chǎn)生。用于包含協(xié)處理器的情況下。
最小模式下的總線連接示意圖

地址信息——>控制信息——>數(shù)據(jù)信息
ALE把地址信息鎖到地址鎖存器中
最大模式下的總線連接示意圖

兩種工作模式的選擇方式
8088是工作在最小還是最大模式由MN/MX引線的狀態(tài)決定。
(上橫杠表示這條引線上低電平時(shí)為最大模式)
MN/MX-0:工作于最大模式
MN/MX-1:工作于最小模式
第10講 8088 CPU主要引線和內(nèi)部結(jié)構(gòu)
一、8088CPU主要引線
總體分為4組
完成一次訪問內(nèi)存或接口所需要的主要信號(hào)
? 與外部同步控制信號(hào)
? 中斷請(qǐng)求和響應(yīng)信號(hào)
? 總線保持和響應(yīng)信號(hào)
回顧“微機(jī)讀取一條指令的工作過程“

1. 發(fā)出讀取數(shù)據(jù)所在的目標(biāo)地址(地址信號(hào))
? 內(nèi)存儲(chǔ)器單元地址
? I/O接口地址
2. 發(fā)出讀控制信號(hào)(控制信號(hào))
3. 送出傳輸?shù)臄?shù)據(jù)(數(shù)據(jù)信號(hào))
8088 CPU最小模式下的主要引腳信號(hào)
地址線和數(shù)據(jù)線:
AD0—AD7:低8位地址和低8位數(shù)據(jù)信號(hào)分時(shí)復(fù)用。在傳送地址信號(hào)時(shí)為單向,傳送數(shù)據(jù)信號(hào)時(shí)為雙向。
A16--A19:高4位地址信號(hào),與狀態(tài)信號(hào)分時(shí)復(fù)用。
A8—A15 :8位地址信號(hào)
20位地址信號(hào) 可產(chǎn)生220=1M個(gè)編碼
8位數(shù)據(jù)信號(hào) 可同時(shí)傳輸8bit二進(jìn)制碼
(1)主要控制信號(hào)
(#號(hào)作用相當(dāng)于上橫線,代表低電位時(shí)有效)
#WR: 寫信號(hào);
#RD: 讀信號(hào);
IO/#M:為“0”表示訪問內(nèi)存,為“1”表示訪問接口;
#DEN: 低電平有效時(shí),允許進(jìn)行讀/寫操作;
DT/#R:數(shù)據(jù)收發(fā)器的傳送方向控制;
ALE: 地址鎖存信號(hào);
RESET:復(fù)位信號(hào)。
例如:當(dāng)#WR=1,#RD=0,IO/#M=0時(shí),
表示CPU當(dāng)前正在進(jìn)行讀存儲(chǔ)器操作
(2)READY信號(hào)——外部同步控制信號(hào)
4個(gè)時(shí)鐘周期(0.2s)為一個(gè)總線周期
若T3周期后檢測(cè)引腳,ready引腳若為低電平就插入一個(gè)等待周期Twait,然后再檢測(cè),若低電平再插入…直到檢測(cè)到高電平再插入T4個(gè)周期。(4個(gè)周期完成不了的情況)

(3) 中斷請(qǐng)求和響應(yīng)信號(hào)
? INTR:可屏蔽中斷請(qǐng)求輸入端
? NMI: 非屏蔽中斷請(qǐng)求輸入端
? INTA:中斷響應(yīng)輸出端
(4) 總線保持信號(hào)
? HOLD:總線保持請(qǐng)求信號(hào)輸入端。當(dāng)CPU以外的其他設(shè)備要求占用總線時(shí),通過該引腳向CPU發(fā)出請(qǐng)求。
? HLDA:總線保持響應(yīng)信號(hào)輸出端。CPU對(duì)HOLD信號(hào)的響應(yīng)信號(hào)。
8088和8086CPU引線功能比較
數(shù)據(jù)總線寬度不同:8088的外部總線寬度是8位,8086為16位。
訪問存儲(chǔ)器和輸入輸出控制信號(hào)含義不同:8088——IO/M=0表示訪問內(nèi)存; 8086——IO/M=1表示訪問內(nèi)存。
其他部分引線功能的區(qū)別。
二、8088CPU的內(nèi)部結(jié)構(gòu)
微處理器:運(yùn)算器、控制器、寄存器。
執(zhí)行單元(EU)
總線接口單元(BIU)

圖片說明:
FLAGS:標(biāo)志寄存器,保留運(yùn)算結(jié)果的特征、執(zhí)行單元的控制邏輯
執(zhí)行單元EU
構(gòu)成:運(yùn)算器、8個(gè)通用寄存器、1個(gè)標(biāo)志寄存器,EU部分控制電路
功能:指令譯碼、指令執(zhí)行、暫存中間運(yùn)算結(jié)果、保存運(yùn)算結(jié)果特征。
總線接口單元BIU
功能:
從內(nèi)存中取指令到指令預(yù)取隊(duì)列。指令預(yù)取隊(duì)列是并行流水線工作的基礎(chǔ)。
負(fù)責(zé)與內(nèi)存或輸入/輸出接口之間的數(shù)據(jù)傳送
在執(zhí)行轉(zhuǎn)移程序時(shí),BIU使指令預(yù)取隊(duì)列復(fù)位,從指定的新地址取指令,并立即傳給執(zhí)行單元執(zhí)行
結(jié)論
指令預(yù)取隊(duì)列的存在使EU和BIU兩個(gè)部分可同時(shí)進(jìn)行工作。實(shí)現(xiàn)指令的并行執(zhí)行
提高了CPU的效率
降低了對(duì)存儲(chǔ)器存取速度的要求
第11講 8088 CPU內(nèi)部寄存器
含14個(gè)16位寄存器,按功能分三類:
8個(gè)通用寄存器
4個(gè)段寄存器
2個(gè)控制寄存器
深入理解每個(gè)寄存器中數(shù)據(jù)的作用
16位二進(jìn)制碼的含義
通用寄存器
數(shù)據(jù)寄存器(AX,BX,CX,DX)
地址指針寄存器(SP,BP)
變址寄存器(SI,DI)
數(shù)據(jù)寄存器
8088/8086含4個(gè)16位數(shù)據(jù)寄存器,它們又可分為8個(gè)8位寄存器,即:
AX——AH,AL
BX——BH,BL
CX——CH,CL
DX——DH,DL
?數(shù)據(jù)寄存器特有的習(xí)慣用法
AX:累加器。所有I/O指令都通過AX與接口傳送信息,中間運(yùn)算結(jié)果也多放于AX中.
BX:基址寄存器。在間接尋址中用于存放基地址.
CX:計(jì)數(shù)寄存器。用于在循環(huán)或串操作指令中存放計(jì)數(shù)值.
DX:數(shù)據(jù)寄存器。在間接尋址的I/O指令中存放I/O端口地址(除了輸入輸出指令中,DX存放的地址一定是數(shù)據(jù)地址);在32位乘除法運(yùn)算時(shí),存放
高16位數(shù)。
地址指針寄存器
SP:堆棧指針寄存器,其內(nèi)容為棧頂?shù)钠频刂?/p>
BP:基址指針寄存器,常用于在訪問內(nèi)存時(shí)存放內(nèi)存單元的偏移地址。
BX和BP應(yīng)用上的區(qū)別:
作為通用寄存器,二者均可用于存放數(shù)據(jù);
作為基址寄存器,用BX表示所尋找的數(shù)據(jù)在數(shù)據(jù)段;用BP則表示數(shù)據(jù)在堆棧段。
變址寄存器
SI:源變址寄存器
DI:目標(biāo)變址寄存器
變址寄存器在指令中常用于存放數(shù)據(jù)在內(nèi)存中的地址
除了AX、CX之外 其它六個(gè)寄存器里都可能存放的是地址。但是作為8位寄存器AH、AL、BH、BL…里一定存放的是數(shù)據(jù)
2.控制寄存器
IP:指令指針寄存器,其內(nèi)容為下一條要取的指令的偏移地址。Instruction Pointer Register

FLAGS:標(biāo)志寄存器,存放運(yùn)算結(jié)果的特征 。16位只有9位有意義,7位空閑。
6個(gè)狀態(tài)標(biāo)志位(CF,SF,AF,PF,OF,ZF)
3個(gè)控制標(biāo)志位(IF,TF,DF)
(1)狀態(tài)標(biāo)志位
CF(Carry Flag): 進(jìn)位標(biāo)志位。加(減)法運(yùn)算時(shí),若最高位有進(jìn)(借)位則CF=1
OF(Overflow Flag): 溢出標(biāo)志位。當(dāng)算術(shù)運(yùn)算的結(jié)果超出了有符號(hào)數(shù)的可表達(dá)范圍時(shí), OF=1
ZF(Zero Flag): 零標(biāo)志位。當(dāng)運(yùn)算結(jié)果為零時(shí)ZF=1
SF(Sign Flag): 符號(hào)標(biāo)志位。當(dāng)運(yùn)算結(jié)果的最高位為1時(shí),SF=1。
下面這兩個(gè)標(biāo)志位只對(duì)8位有效:
PF(Parity Flag):奇偶標(biāo)志位。運(yùn)算結(jié)果的低8位中“1”的個(gè)數(shù)為偶數(shù)時(shí)PF=1。
AF(Auxiliary Carry Flag):輔助進(jìn)位標(biāo)志位。加(減)操作中,若Bit3向Bit4有進(jìn)位(借位)(注意位是從0開始的,所以是右數(shù)第四個(gè)數(shù)的位置向右數(shù)第5個(gè)數(shù)位置進(jìn)位), AF=1
?例題
給出以下運(yùn)算結(jié)果及運(yùn)算后各狀態(tài)標(biāo)志位的狀態(tài):10110110+11110100
10110110 + 11110100= 1 10101010
CF=1, OF=0(最高位進(jìn)位狀態(tài) 異或 次高位進(jìn)位狀態(tài)=1,則結(jié)果溢出.這里最高位有進(jìn)位,次高位有進(jìn)位), AF=0, PF=1, SF=1, ZF=0
(2)控制標(biāo)志位
TF(Trap Flag): 陷井標(biāo)志位,也叫跟蹤標(biāo)志位。TF=1時(shí),使CPU處于單步執(zhí)行指 令的工作方式。
IF(Interrupt Enable Flag): 中斷允許標(biāo)志位。IF=1使CPU可以響應(yīng)可屏蔽中斷請(qǐng)求。
? DF(Direction Flag): 方向標(biāo)志位。在數(shù)據(jù)串操作時(shí)確定操作的方向。
段寄存器
作用:用于存放相應(yīng)邏輯段的段基地址
8086/8088內(nèi)存中邏輯段的類型:
代碼段——存放指令代碼
數(shù)據(jù)段——存放操作的數(shù)據(jù)
附加段——存放操作的數(shù)據(jù)
堆棧段——存放暫時(shí)不用但需保存的數(shù)據(jù)
段寄存
CS:代碼段寄存器,存放代碼段的段基地址
DS:數(shù)據(jù)段寄存器,存放數(shù)據(jù)段的段基地址
ES附加段寄存器,存放數(shù)據(jù)段的段基地址
SS堆棧段寄存器,存放堆棧段的段基地址
段寄存器的值表明相應(yīng)邏輯段在內(nèi)存中的位置
什么是邏輯段?為什么要分段?下一講會(huì)說到
第12講 實(shí)模式下的存儲(chǔ)器尋址(很重要)
本講提要:
內(nèi)存分段管理思想
實(shí)模式下的內(nèi)存地址變換
段寄存器的應(yīng)用
堆棧的概念
內(nèi)存儲(chǔ)器管理
8088CPU是16位體系結(jié)構(gòu)的微處理器
可以同時(shí)處理(產(chǎn)生)16位二進(jìn)制碼(可以產(chǎn)生64K個(gè)編碼,直接管理64K個(gè)內(nèi)存單元)
8088CPU需要管理1MB內(nèi)存:需要能夠產(chǎn)生1M個(gè)地址編碼

前面有個(gè)“區(qū)域號(hào)”(紅色X)
如何實(shí)現(xiàn)呢?下面來看內(nèi)存分段管理方式
內(nèi)存地址變換
欲實(shí)現(xiàn)對(duì)1MB內(nèi)存空間的正確訪問, 每個(gè)內(nèi)存單元在整個(gè)內(nèi)存空間中必須 具備惟一地址——物理地址

內(nèi)存地址變換:如何將直接產(chǎn)生的16位編碼變換為20位物理地址
1、內(nèi)存單元的編址(1)
內(nèi)存每個(gè)單元的地址在邏輯上都由兩部分組成:
段(基)地址:指示存儲(chǔ)單元在整個(gè)內(nèi)存空間中處于哪個(gè)區(qū)域(即“段”)
段內(nèi)地址(相對(duì)地址/偏移地址):指示存儲(chǔ)單元在段中的相對(duì)位置(與段中第1個(gè)單元的距離)

存儲(chǔ)器的編址
段基地址:決定存儲(chǔ)單元在內(nèi)存中的位置
相對(duì)地址(偏移地址):該存儲(chǔ)單元相對(duì)段內(nèi)第一個(gè)單元的距離
邏輯段的起始地址稱為段首:每個(gè)邏輯段內(nèi)的第一個(gè)單元

由偏移地址的定義得,段首的偏移地址=0
存儲(chǔ)器的編址(3)
內(nèi)存單元地址:

段首的偏移地址:
0000H

存儲(chǔ)器的編址(4)
物理地址:內(nèi)存單元在整個(gè)內(nèi)存空間中的惟一地址
例:段基地址=6000H
段首地=60000H
偏移地址=0009H
物理地址=60009H

2.實(shí)地址模式下的存儲(chǔ)器地址變換
內(nèi)存物理地址由段基地址和偏移地址組成

物理地址=段基地址x16+偏移地址
因?yàn)?6進(jìn)制一位相當(dāng)于4位二進(jìn)制,二進(jìn)制乘一個(gè)2的n次方就是左移n位,所以這里乘16的話,16進(jìn)制左移一位即可(相當(dāng)于二進(jìn)制左移4位)
3. 段寄存器
作用:用于存放相應(yīng)邏輯段的段基地址
8086/8088內(nèi)存中邏輯段的類型
代碼段——存放指令代碼
數(shù)據(jù)段——存放操作的數(shù)據(jù)
附加段——存放操作的數(shù)據(jù)
堆棧段——存放暫時(shí)不用但需保存的數(shù)據(jù)
8086/8088內(nèi)存中每類邏輯段的數(shù)量
最多為64K個(gè)
段寄存器的分類
CS:代碼段寄存器,存放代碼段的段基地址
DS:數(shù)據(jù)段寄存器,存放數(shù)據(jù)段的段基地址
ES:附加段寄存器,存放數(shù)據(jù)段的段基地址
SS:堆棧段寄存器,存放堆棧段的段基地址
段寄存器的值表示相應(yīng)邏輯段在內(nèi)存中的位置
例題1:設(shè)某操作數(shù)存放在數(shù)據(jù)段,DS=250AH,數(shù)據(jù)所在單元的偏移地址=0204H.則該操作數(shù)所在的單元的物理地址為:250AHX16+0204H=252A4H
例題2:設(shè)DS=2500H,某單元的偏移地址=00A0H,則有:物理地址=250A0H

邏輯段與邏輯地址
內(nèi)存的分段時(shí)邏輯分段,不是物理段。各個(gè)邏輯段在地址上可以不相連、可以部分重合,也可以完全重合。
每個(gè)內(nèi)存單元具有唯一物理地址,但可能具有多個(gè)邏輯地址。即:
一個(gè)內(nèi)存單元可以同時(shí)處于兩個(gè)邏輯段
一個(gè)內(nèi)存單元可以在不同的時(shí)刻屬于相同或不同類型的段
一個(gè)內(nèi)存單元在同一時(shí)刻可以屬于不同類型的段
例題3:
已知:CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H
畫出各段在內(nèi)存中的分布。

(默認(rèn)段尾物理地址=段首+ FFFFH (二進(jìn)制16個(gè)1)例如10550H+FFFFH=2054H。因?yàn)?6位結(jié)構(gòu),一個(gè)邏輯段默認(rèn)大小2的16次方=64K)
邏輯段說明
同一程序模塊裝入內(nèi)存時(shí),不同類型的段可以裝入在相同/不同的物理空間
兩個(gè)邏輯段完全重合或部分重合
兩個(gè)不同程序模塊裝入主存時(shí),同一類型的邏輯段也可以裝入相同或不同的物理空間中

4.堆棧及堆棧段的使用
堆棧:
內(nèi)存中一個(gè)特殊區(qū)域,用于存放暫時(shí)不用或需要保護(hù)的數(shù)據(jù)。
常用于響應(yīng)中斷或子程序調(diào)用。
若棧頂=棧底——>空棧
若棧頂=棧首——>滿棧

堆棧示例:
已知SS=1000H,SP=0100H
則:
堆棧段的段首地址=10000H
棧頂(偏移)地址=0100H
若該段最后一個(gè)單元地址為10200H,則:
棧底偏移地址=0200H
第13講 8088系統(tǒng)總線
重點(diǎn):總線的概念、如何看時(shí)序圖
總線時(shí)序
CPU工作時(shí)序:CPU各引腳信號(hào)在時(shí)間上的關(guān)系
總線周期:CPU完成一次訪問內(nèi)存(或接口)操作所需要的時(shí)間。一個(gè)總線周期至少包括4個(gè)時(shí)鐘周期。

8088最小模式下的工作時(shí)序

總線的概念
總線:
是一組導(dǎo)線和相關(guān)的控制、驅(qū)動(dòng)電路的集合。是計(jì)算機(jī)系統(tǒng)各部件之間傳輸?shù)刂?、?shù)據(jù)和控制信息的通道。
地址總線(AB)
數(shù)據(jù)總線(DB)
控制總線(CB)
總線按層次結(jié)構(gòu)分類:CPU總線(沒有標(biāo)準(zhǔn))、系統(tǒng)總線(CPU和接口之間,分為PCI和PCIE)、外部總線(接口和外設(shè)之間)。
總線結(jié)構(gòu)
單總線結(jié)構(gòu)
優(yōu)點(diǎn):控制簡(jiǎn)單、擴(kuò)充方便
缺點(diǎn):由于所有設(shè)備部件均掛接在單一總線上使這種結(jié)構(gòu)只能分時(shí)工作,即同一時(shí)刻只能在兩個(gè)設(shè)備之間傳送數(shù)據(jù),這就使系統(tǒng)總體數(shù)據(jù)傳輸?shù)男屎退俣仁艿较拗?/p>
多總線結(jié)構(gòu):雙總線結(jié)構(gòu)(面向CPU的雙總線結(jié)構(gòu)、面向主存的雙總線結(jié)構(gòu))、多總線結(jié)構(gòu)
面向CPU的雙總線結(jié)構(gòu)
優(yōu)點(diǎn):在CPU與主存儲(chǔ)器之間、 CPU和l/0設(shè)備之間分別設(shè)置了總線, 從而提高了微機(jī)系統(tǒng)信息傳送的速率
缺點(diǎn):外設(shè)與主存之間信息交換必須通過 CPU 才能進(jìn)行中轉(zhuǎn),而降低了 CPU 的丁 作效率(或增加了 CPU 的占用率)

面向存儲(chǔ)器的雙總線結(jié)構(gòu)
CPU 與主存儲(chǔ)器之間又專門設(shè)置了一條高速總線,使 CPU 可以通過它直接與主存儲(chǔ)器交換信息
優(yōu)點(diǎn):使信息傳送效率提高,而且減輕了總線的負(fù)擔(dān)
缺點(diǎn):造價(jià)較高

現(xiàn)代微機(jī)中的多總線結(jié)構(gòu)

總線的基本功能
數(shù)據(jù)傳送
仲裁控制
出錯(cuò)處理
總線驅(qū)動(dòng)
總線的主要性能指標(biāo)
總線帶寬(B/S):?jiǎn)挝粫r(shí)間內(nèi)總線上可傳送的數(shù)據(jù)量??偩€帶寬=位寬X工作頻率。(可以想象成單位車流量=道路寬度x車速)
總線位寬(bit):能同時(shí)傳送的數(shù)據(jù)位數(shù)
總線的工作頻率(MHz)
總線帶寬=(位寬/8)X(工作頻率/每個(gè)存取周期的時(shí)鐘數(shù))
微處理器小結(jié)
本章提要
微處理器的一般構(gòu)成
8088CPU最小模式下的主要引線及其功能
8088CPU的內(nèi)部結(jié)構(gòu)
內(nèi)部寄存器功能、寄存器中數(shù)據(jù)的含義、8位寄存器中存放的均為運(yùn)算的數(shù)據(jù)
實(shí)地址模式下的存儲(chǔ)器尋址,邏輯地址,段基地址,偏移地址,物理地址
堆棧,棧頂?shù)刂?,棧底地址,堆棧段基地?/p>
內(nèi)部寄存器
全部為16位寄存器
只有4個(gè)數(shù)據(jù)寄存器分別可分為2個(gè)8位寄存器
所有16位寄存器中:
全部通用寄存器中,只有AX和CX中的內(nèi)容一定為參加運(yùn)算的數(shù)據(jù),其余通用寄存器中的內(nèi)容可能是數(shù)據(jù),也可能是存放數(shù)據(jù)的地址;
SP中的內(nèi)容通常為堆棧段的棧頂?shù)刂罚?/p>
段寄存器中的內(nèi)容為相應(yīng)邏輯段的段地址;
IP中的內(nèi)容為下一條要取的指令的偏移地址;
FLAGS中有9位標(biāo)志位
實(shí)模式下的存儲(chǔ)器尋址小結(jié)
內(nèi)存的地址:
邏輯地址(編程使用的地址):
段地址:偏移地址(實(shí)際編程中通常只給出偏移地址,段地址采用系統(tǒng)默認(rèn)設(shè)定)
段首地址:每個(gè)邏輯段第一個(gè)單元的地址
偏移地址:相對(duì)于所在邏輯段內(nèi)段首的距離。段首的偏移地址=0
物理地址:內(nèi)存單元在整個(gè)內(nèi)存中的惟一地址
每個(gè)內(nèi)存單元在整個(gè)內(nèi)存空間中都具有惟一的物理地址
每個(gè)內(nèi)存單元的地址都由兩部分組成:段基地址 段內(nèi)相對(duì)地址(偏移地址)
段基地址決定了邏輯段在內(nèi)存中所占的區(qū)域,改變段基地址,則改變了邏輯段的位置。
一個(gè)邏輯段的默認(rèn)長(zhǎng)度為64KB,最小長(zhǎng)度值為16B。
邏輯段可以有多個(gè),但只有4種類型。在一個(gè)程序模塊中,每種類型的邏輯段最多只能有一個(gè)。