標簽化網(wǎng)站seo快排優(yōu)化
一、8086、8088的存儲器結(jié)構(gòu)
實模式下的存儲器組織
????????實模式:全稱為實地址存儲管理操作模式,程序與數(shù)據(jù)運行的實際存儲空間,無存儲保護。? ? ??????實模式存儲管理方式:分段方式
1、存儲單元的地址
定義:將存儲單元編號,這個編號就是存儲器地址
表示:用十六進制數(shù)來表達地址
在存儲器中,每一個字節(jié)單元都有一個與之對應(yīng)的。唯一的存儲器地址,稱為物理地址?。
對于16位字節(jié)長的PC機(8086),由兩個字節(jié)組成一個字。其編號如圖:
2、存儲單元的內(nèi)容
定義:存儲單元中存放的信息稱為該存儲單元的內(nèi)容
表示:存儲地址加“()”
字單元由兩個字節(jié)單元組成,其地址采用它的低地址來表示。
字存入存儲器:低字節(jié)存入低地址單元,高字節(jié)存入高地址單元 。
3、存儲器地址的分段
8086/8088CPU有20根地址總線,可以訪問存儲器的最大容量為B=1024KB=1MB。所以分段是把1MB的存儲空間劃分成若干的段,每個段是一個可獨立尋址的邏輯單位
(1)分段的基本規(guī)則:?
- 每個段最大可達64KB
- PC機對段的起始地址有限制,段不能起始于任意地址,而必須從任何一小段的首地址開始。
- 在十六進制表示的地址中,最低位為0(即20位地址的低4位為0)
(2)短地址和偏移地址:?
- 段地址:表示一個段的開始
- 偏移地址:在段內(nèi)相對于段起始地址的偏移值。
- 每個存儲單元都有兩種表現(xiàn)形式:物理地址和? 邏輯地址(段地址+偏移地址)
(3)物理地址的形成:?
- ?公式:物理地址=段地址
10H+偏移地址
- 表示范圍:00000H~FFFFFH
- 每個存儲單元只有唯一的物理地址,但它卻可以由不同的段地址和不同的偏移地址組成
(4)段地址與段寄存器?
- 代碼段的段地址放CS
- 數(shù)據(jù)段的段地址放DS
- 堆棧段的段地址放SS
- 附加段的段地址放ES
- 每個段可以獨立地占用64KB存儲區(qū)。各段也允許部分或完全重疊
(5)隱含段和偏移寄存器?
段寄存器和偏移寄存器組合有一定的規(guī)則
二、總線操作及時序?
總線操作是指CPU通過總線對外的各種操作
8086的總線操作主要有:
- 存儲器讀、I/O讀操作
- 存儲器寫、I/O寫操作
- 中斷響應(yīng)操作
- 總線請求及響應(yīng)操作
- CPU正在進行內(nèi)部操作、并不進行實際對外操作的空閑狀態(tài)Ti
1、操作控制器與時序產(chǎn)生器
操作控制器:是在各寄存器之間建立數(shù)據(jù)通路(傳送信息的通路)
? ? ? ? 功能:根據(jù)操作碼和時序信號,產(chǎn)生各種操作控制信號,正確建立通路,完成取指和執(zhí)行的控制。(硬布線控制器、微程序控制器)
時序產(chǎn)生器:產(chǎn)生并發(fā)出計算器所需要的時序控制信號
2、指令的執(zhí)行過程和指令周期
讀取指令---分析指令--按指令規(guī)定執(zhí)行指令--檢查有無中斷請求
- 指令周期:CPU從內(nèi)存取出一條指令并執(zhí)行完這條指令的時間總和(取指+執(zhí)行時間)
- CPU周期:又稱機器周期(總線周期),CPU從內(nèi)存中讀取一條指令字的所需最短時間
- 時鐘周期:稱節(jié)拍脈沖或T周期。一個CPU周期包含若干個時鐘周期
?3、時序信號的作業(yè)和體制
計算機的協(xié)調(diào)動作需要時間標志,而且需要多級時序體制。而時間標志則用時序信號來體現(xiàn)
硬布線控制器中,時序信號往往采用主狀態(tài)周期-節(jié)拍電位-節(jié)拍脈沖三級體制。
- 主狀態(tài)周期(指令周期):包含若干個節(jié)拍周期,可以用一個觸發(fā)器的狀態(tài)持續(xù)時間來表示
- 節(jié)拍電位(機器周期):表示一個CPU周期的時間,包含若干個節(jié)拍脈沖
- 節(jié)拍脈沖(時鐘周期):表示較小的時間單位
微程序控制器中,時序信號一般采用節(jié)拍電位-節(jié)拍脈沖二級體制
數(shù)據(jù)準備好后,以電位的方式送觸發(fā)器
控制信號來到后,用一個脈沖信號把數(shù)據(jù)裝入觸發(fā)器? ? ??
4、控制方式?
?控制不同操作序列時序信號的方法
- 同步控制方式:已定的指令在執(zhí)行時所需要的CPU周期(機器周期)數(shù)和時鐘周期數(shù)都是固定不變。
- 異步控制方式:控制器發(fā)出某一操作控制信號后,等待執(zhí)行部件完成操作后發(fā)“回答”信號,再開始新的操作
- 聯(lián)合控制方式:同步控制和異步控制相結(jié)合的方式
三、指令系統(tǒng)與匯編語言程序設(shè)計(重要)
1、 什么是匯編語言:
匯編語言是一種面向機器的低級程序設(shè)計語言
匯編語言以助記符形式表示每一條計算機指令
- 用助記符表示的指令就是匯編語言中的匯編格式指令
- 匯編格式指令以及使用它們編寫程序的規(guī)則就形成匯編語言
- 用匯編語言書寫的程序就是匯編語言程序或稱匯編語言源程序(.ASM)
- 匯編程序?qū)R編語言程序“匯編”成機器代碼目標模塊(.OBJ)
特點:
- 匯編語言程序與處理器指令系統(tǒng)密切相關(guān)
- 程序員可直接、有效的控制系統(tǒng)硬件
- 形成的可執(zhí)行文件運行速度快、占用主內(nèi)存容量少
2、程序、指令、指令系統(tǒng)、指令格式(理解)
- 計算機的程序是由一系列的指令組成
- 指令:是要計算機執(zhí)行某種操作的命令
- 指令系統(tǒng):是一臺計算機中所有指令的集合
- 決定計算機的基本功能,軟件與硬件的界面
- 是計算機系統(tǒng)設(shè)計的一個核心問題
- 指令格式是用二進制代碼表示的指令形式
- 由操作碼字段和地址碼字段組成
- 操作碼:表示指令進行什么性質(zhì)的操作
- 地址碼:指示參與操作的操作數(shù)地址
3、指令操作碼與地址碼
-
指令:兩個字段:操作碼字段+操作數(shù)地址字段
操作碼:指明指令操作性質(zhì)的命令碼。提供指令的操作控制信息。每條指令都要求它的操作碼是唯一的
操作數(shù)地址碼:用來描述該指令的操作對象?
一、指令格式
? ? ? ? 1、零地址指令格式
? ? ? ? 2、一地址指令格式
? ? ? ? ?3、二地址指令格式
? ? ? ? 4、三指令地址格式*
4、對操作數(shù)的尋址方式(掌握)
與數(shù)據(jù)有關(guān)的尋址方式:
- 操作數(shù)或指令存放在的存儲單元的編號,就是該操作數(shù)或指令的地址
- 尋址方式:形成指令或操作數(shù)的內(nèi)存地址的方式,或者說查找指令或數(shù)據(jù)的方式
指令的順序/跳躍尋址方式 :
常用的數(shù)據(jù)尋址方式 :
- 隱含尋址:指令中不明顯地給出操作數(shù)的地址
- 立即尋址:指令的地址字段指出的不是操作數(shù)的地址,而直接是操作數(shù)本身。
- 直接尋址:指令格式的地址字段中,直接給出操作數(shù)的內(nèi)存的地址
- 寄存器尋址:指令中給出的操作數(shù)地址不是內(nèi)存的地址單元號,而是通用寄存器的編號。即操作數(shù)不放在內(nèi)存中,而是放在通用寄存器中
- 寄存器間接尋址:指令中指定的寄存器中的內(nèi)容不是操作數(shù),而是操作數(shù)的地址
- 基址(寄存器相對)尋址:基址寄存器的內(nèi)容加上指令中給定的形式地址(偏移量),形成操作數(shù)的有效地址
1、立即數(shù)尋址方式:
- 此方式中指令操作部分直接給出指令的操作數(shù),它與指令操作碼相接,順序存放在代碼中。立即數(shù)有8位和16位之分。
- 例:
MOV? ? AH,36H? ?;? ?AH<--立即數(shù)36H
MOV? ? BX,1234H;? BX<--立即數(shù)1234H- 注意:
- 只能用于源操作數(shù),主要用于給寄存器(存儲器單元)賦值。立即數(shù)無法作為目標操作數(shù)
- 立即數(shù)可以是無符號或帶符號數(shù),其數(shù)值應(yīng)在可取值范圍內(nèi)
2、寄存器尋址方式
- 此方式的操作數(shù)放在寄存器內(nèi),由指令直接給出某個寄存器的名字,以寄存器的內(nèi)容作為操作數(shù)。寄存器可以是16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是8位的AH、AL、BH、BL、CH、CL、DH、DL寄存器
- 例:
MOV? ?AX, CX : AX <-- (CX)
DEC? ? AL? ? ? ? ? ?;AL <--(AL) -1- 注意:
- 寄存器尋址方式的指令操作在CPU內(nèi)部執(zhí)行,不需要執(zhí)行總線周期,執(zhí)行速度快
- 寄存器尋址方式既適用于指令的源操作數(shù),也適用于目的操作數(shù),并且可同時用于源操作數(shù)和目的操作數(shù)
3、直接尋址方式
- 此方式的操作數(shù)在存儲器中,指令中直接給出操作數(shù)所在存儲單元的有效地址。有效地址(EA)也稱偏移地址,它代表操作數(shù)所在存儲單元距離段首地址的字節(jié)數(shù)。有效地址是一個無符號數(shù)的16位二進制數(shù)?
- 例:
MOV? ? AH,[2100H];? ? 將DS段中2100H單元的內(nèi)容送給AH
MOV? ? AX,[2100H];? ? 將DS段中2100H單元的內(nèi)容送給AL、2101H單元的內(nèi)容給AH- 注意:
- 直接尋址方式的操作數(shù)所在存儲單元的段地址一般在數(shù)據(jù)段寄存器DS中
- 如果操作數(shù)在其他段,則需要指令中用段超越前綴指出相應(yīng)的段寄存器名
- 例:
MOV? ? ?AH,ES:[2000H];將附加段寄存器ES的內(nèi)容乘16D(或10H),再加上2000H作為操作數(shù)所在存儲單元的地址,取出該存儲單元的內(nèi)容送到寄存器AH中
4、 寄存器間接尋址方式
- 此方式的操作數(shù)在存儲器中,指令中寄存器的內(nèi)容作為操作數(shù)所在存儲單元的有效地址(偏移地址)。寄存器可以是某個基址寄存器BX、BP,或某個變址寄存器SI、DI
- 當(dāng)使用寄存器BX、SI、DI時,操作數(shù)所在存儲單元的段地址放在數(shù)據(jù)段寄存器DS中
- ?當(dāng)使用寄存器BP時,操作數(shù)所在存儲單元的段地址放在堆棧段寄存器SS中
- 例:
已知:(DS)=2100H,(DI)=2000H
指令:? MOV? ?AX,[DI]
? ? 物理地址=16(DS)+(DI)
? ? ?162100H
2000H=23000H
指令執(zhí)行結(jié)果是將23000H和23001H單元的內(nèi)容送入寄存器AX中。- 注意:
- 如果操作數(shù)所在存儲單元不在數(shù)據(jù)段中,需要在指令中使用超越前綴表明其所在段名
5、寄存器相對尋址方式?
- 此方式的操作數(shù)在存儲器內(nèi),指令中寄存器的內(nèi)容與指令指定的位移量之和作為操作數(shù)所在存儲單元的有效地址(偏移地址)。寄存器可以是基址寄存器BX、BP,也可以是變址寄存器SI、DI。位移量是一個8位或者16位的有符號二進制數(shù)。
- 計算操作數(shù)所在單元的物理地址與上相同。
- 以寄存器SI、8位位移量為例,物理地址=16
(DS)+(SI)+8位位移量
- 以寄存器BP、16位位移量為例,物理地址=16
(SS)+(BP)+16位位移量
- 例:
已知:(DS)=2000H,(SI)=1000H,DA1=2000H(16位位移量)
指令:MOV? ? BX,DA1[SI] 或? MOV? ? BX,[DA1+SI]
? ? 物理地址=16(DS)+(SI)+16位位移量=20000H+1000H+2000H=23000H
指令執(zhí)行結(jié)果是將23000H和23001H單元的內(nèi)容送入寄存器BX中
6、基址變址尋址方式:
- 此方式中的操作數(shù)在存儲器內(nèi),指令將基址寄存器(BX/BP)與變址寄存器(SI/DI)內(nèi)容之和作為操作數(shù)所在存儲單元的有效地址EA。EA的計算方法為:
- EA=(BX)或(BP)+(SI)或(DI)
- 當(dāng)使用基址寄存器BX時,段寄存器為DS,物理地址=16
(DS)+(BX)+(SI)
- 例:
已知:(DS)3200H,(BX)=1234H,(SI)=3456H
執(zhí)行指令:MOV? ? AL,[BX][SI] 或 MOV? ? AL,[BX+SI]
有效地址EA=(BX)+(SI)=1234H+3456H=468AH
物理地址=16(DS)+EA = 32000H+468AH=3668AH
指令執(zhí)行結(jié)果是將3668AH單元的內(nèi)容給寄存器AL中
7、相對基址變址尋址方式?
- 此方式的操作數(shù)在存儲器內(nèi)。指令將基址寄存器(BX/BP)與變址寄存器(SI/DI)的內(nèi)容之和再加上位移量(8位/16位),得到操作數(shù)所在存儲單元的有效地址。
- 當(dāng)使用基址寄存器BX時,段寄存器為DS。
- 物理地址=16
(DS)+(BX)+(SI)+8位位移量/16位位移量
- 例:
已知:(DS)=2000H,(BX)=1000H,(SI)=0500H,MK=1120H
指令: MOV? ?AX,MK[BX][SI] 或 MOV? ?AX,MK[BX+SI] 或 MOV AX,[MK+BX+SI]
有效地址=(BX)+(SI)=1000H+0500H=1500H
物理地址=20000H+1000H+0500H+1120H=22620H
指令執(zhí)行結(jié)果是將22620H、22621H單元的內(nèi)容給寄存器AX中。
8、隱含尋址?
- 指令隱含了的一個或兩個操作數(shù)的地址,即操作數(shù)在默認的地址中
- 例:MUL? ?BL
? ? 指令的執(zhí)行:(AL)(BL)--->? AX