




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第二章 微處理器的基礎(chǔ)知識(shí),2.4 Intel 80 x86系列CPU內(nèi)部結(jié)構(gòu),匯編語(yǔ)言建立在機(jī)器指令基礎(chǔ)之上,是一種描述硬件運(yùn)轉(zhuǎn)過(guò)程的語(yǔ)言。 每一種CPU都有自己的指令系統(tǒng),因此在理解匯編語(yǔ)言基本概念前,必須先對(duì)計(jì)算機(jī)系統(tǒng)、CPU的內(nèi)部結(jié)構(gòu)和工作機(jī)制作一個(gè)概要的理解。,本課程選用的CPU類(lèi)型,Intel 推出的80 x86系列處理器的性能和功能越來(lái)越強(qiáng)。 但是,從匯編語(yǔ)言程序角度看,8086建立的實(shí)模式和80386建立的保護(hù)模式模型到目前為止一直適用。 本門(mén)課程的主要內(nèi)容:以8086為例說(shuō)明實(shí)模式編程。,Intel80 x86系列微處理器性能對(duì)比,8086/8088 CPU內(nèi)部結(jié)構(gòu),8086
2、和8088CPU內(nèi)部結(jié)構(gòu)是一致的,內(nèi)部處理的最長(zhǎng)二進(jìn)制編碼都是16位的。 但是8086針對(duì)的數(shù)據(jù)總線是16位,8088是8位,兩種CPU只是外部引腳有所區(qū)別。,執(zhí)行指令與讀取指令,讀取指令:從地址總線發(fā)出內(nèi)存地址,將內(nèi)存中的指令逐條讀取到CPU內(nèi)部。 執(zhí)行指令:對(duì)機(jī)器指令譯碼,按時(shí)序產(chǎn)生控制信號(hào),從而完成指令規(guī)定的時(shí)序過(guò)程。 兩種操作都是CPU自動(dòng)進(jìn)行的。 程序能夠控制CPU什么時(shí)候取指令、執(zhí)行指令嗎?,執(zhí)行指令與讀取指令,讀取指令:一定使用總線 執(zhí)行指令:不一定每個(gè)節(jié)拍都使用總線 考慮流水線機(jī)制:執(zhí)行當(dāng)前指令時(shí),如果不使用總線,則同時(shí)讀取下一條指令。,8086/8088 CPU內(nèi)部結(jié)構(gòu),EU
3、(Execute Unit):執(zhí)行部件 BIU(Bus Interface Unit):總線接口部件。 有時(shí)它們?cè)跁r(shí)間上進(jìn)行交疊,形成了流水線工作方式,加快了CPU運(yùn)轉(zhuǎn)速度,8088的內(nèi)部結(jié)構(gòu),1 2 3 4,內(nèi)部暫存器,IP,ES,SS,DS,CS,輸入/輸出控制電路,外部總線,執(zhí)行部分控制電路,ALU,標(biāo)志寄存器,AH AL,BH BL,CH CL,DH DL,SP,BP,SI,DI,通用 寄存器,地址加法器,指令隊(duì)列,執(zhí)行部件 (EU),總線接口部件 (BIU),16位,20位,8位,8位,8086/8088 CPU內(nèi)部結(jié)構(gòu),EU中的核心部件: (1) 控制器:計(jì)算機(jī)系統(tǒng)中控制所有功能部
4、件(包括控制器本身)協(xié)同工作,自動(dòng)執(zhí)行計(jì)算機(jī)程序的功能部件。,控制器執(zhí)行指令的原理,1)通過(guò)對(duì)機(jī)器指令譯碼產(chǎn)生控制信號(hào) 2)按照指令規(guī)定的時(shí)序發(fā)出控制信號(hào) 3)產(chǎn)生一系列時(shí)序過(guò)程來(lái)完成指令功能,8086/8088 CPU內(nèi)部結(jié)構(gòu),(2) 運(yùn)算器:計(jì)算機(jī)系統(tǒng)中加工、處理數(shù)據(jù)的功能部件,其功能包括算術(shù)運(yùn)算和邏輯運(yùn)算。,8086/8088 CPU內(nèi)部結(jié)構(gòu),BIU中的核心部件: (1)總線控制邏輯:CPU與總線接口的邏輯電路,CPU與控制、地址、數(shù)據(jù)總線交互都必須使用這一功能部件。,8086/8088 CPU內(nèi)部結(jié)構(gòu),(2)指令隊(duì)列:這是一組CPU內(nèi)部的存儲(chǔ)單元,它的功能是存放后續(xù)將要執(zhí)行的指令序列。
5、 由于EU和BIU兩大模塊的分工合作,CPU可以利用當(dāng)前指令的運(yùn)算周期啟動(dòng)BIU,將后續(xù)指令預(yù)先讀取到指令隊(duì)列中。,指令隊(duì)列,當(dāng)這些后續(xù)指令被執(zhí)行時(shí),CPU就不需要再使用總線到外部的存儲(chǔ)單元去讀取它們。 因?yàn)閺闹噶铌?duì)列讀取指令比從外部存儲(chǔ)單元讀取指令的速度快得多,所以CPU的工作效率得到提高。 指令隊(duì)列對(duì)于指令是不可見(jiàn)的。,8086/8088 CPU內(nèi)部結(jié)構(gòu),(3) 地址加法器:是CPU用于產(chǎn)生外部存儲(chǔ)單元物理地址的器件。 由于CPU外部的地址總線是20位的,而CPU內(nèi)部的寄存器最長(zhǎng)為16位,為了協(xié)調(diào)此差異,CPU把外部存儲(chǔ)單元的地址分為段基值和偏移量?jī)蓚€(gè)16位分量,地址加法器,物理地址:CP
6、U通過(guò)地址總線定位某個(gè)外部存儲(chǔ)單元時(shí)使用的地址,即真實(shí)的存儲(chǔ)單元地址,內(nèi)存物理地址具有20個(gè)bit。 邏輯地址:由于CPU內(nèi)部寄存器的長(zhǎng)度限制,在CPU內(nèi)部使用的存儲(chǔ)單元地址形式,包括段基值和偏移量?jī)刹糠?,二者都具?6個(gè)bit。 地址與內(nèi)存單元的對(duì)應(yīng):無(wú)論是物理地址還是邏輯地址,一個(gè)地址對(duì)應(yīng)內(nèi)存中一個(gè)獨(dú)立的字節(jié)單元。,地址加法器,段基值:偏移量表示的地址稱(chēng)邏輯地址 段基值偏移量物理地址(位) 段基值、偏移量、物理地址都是無(wú)符號(hào)數(shù)(編碼)。,物理地址與邏輯地址,機(jī)器指令中的地址表示形式僅限于邏輯地址。 任意一個(gè)邏輯地址可以轉(zhuǎn)換為唯一物理地址(反之則不行),轉(zhuǎn)換過(guò)程是CPU的BIU單元自動(dòng)完成的
7、。,xxxx,xxxx,xxxx0,xxxx0,xxxx,+,xxxxx,16位偏移量,16位段基值,20位段基址,20位物理地址,地址加法器,發(fā)送至地址總線,HEX,8086/8088 CPU內(nèi)部結(jié)構(gòu),寄存器:CPU內(nèi)部的少量存儲(chǔ)單元,每個(gè)存儲(chǔ)單元都能存儲(chǔ)二進(jìn)制數(shù)據(jù),并且都有自己獨(dú)特的功能和相應(yīng)的名稱(chēng)(地址)。 8086/8088 中的寄存器:總共有14個(gè)物理寄存器,邏輯上的寄存器有22個(gè)。 下面就它們的功能分別來(lái)討論。,段寄存器,(a)段寄存器: 包括CS(Code Segment)、SS(Stack Segment)、DS(Data Segment)、ES(Extra Segment)四
8、個(gè)16位物理寄存器。 用于存放程序所要使用的4個(gè)存儲(chǔ)段的段基值,分別對(duì)應(yīng)于內(nèi)存中的四塊存儲(chǔ)區(qū)域,代碼段、堆棧段、數(shù)據(jù)段、附加段。,段寄存器,每個(gè)程序都可能會(huì)使用這樣四個(gè)段,其中代碼段是必須的,實(shí)用的程序通常至少包含代碼段、堆棧段、數(shù)據(jù)段。 段:內(nèi)存中一段連續(xù)的空間,在程序中具有特定的用途。 段基址=段基值*16 段在內(nèi)存中的起始地址。,段,代碼段:用于存放程序的機(jī)器指令序列; 堆棧段:用于存放程序使用堆棧指令所保存的數(shù)據(jù);保存子程序調(diào)用指令提供的返回地址;保存中斷斷點(diǎn); 堆棧段的訪問(wèn)一般遵循后進(jìn)先出(LIFO)原則。,段,數(shù)據(jù)段:存放程序需要直接使用的數(shù)據(jù),包括變量、數(shù)組、字符串等; 附加段:
9、內(nèi)容不確定,可以根據(jù)實(shí)際需要決定。通常用于存放串操作指令中的目的串。,地址指針寄存器,(b)地址指針寄存器: 包括BX、SI、DI、BP、SP、IP六個(gè)16位寄存器,用于存放邏輯地址的偏移量或者偏移量的一部分(分量) 其作用在尋址時(shí)類(lèi)似于游標(biāo),通過(guò)相對(duì)于段基址的相對(duì)字節(jié)距離來(lái)定位具體的字節(jié)或字單元。,地址指針寄存器,使用邏輯地址定位內(nèi)存單元的示例:,物理地址,內(nèi)存單元(字節(jié)),10000H,10001H,10002H,10003H,10004H,10005H,10006H,(DS)=1000H,邏輯地址,(BX)=0004H,地址指針寄存器,BX稱(chēng)為基址寄存器,可以用于存放偏移量或偏移量分量。
10、 通常和DS、ES這兩個(gè)段寄存器配合使用,用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元;,地址指針寄存器,SI稱(chēng)為源變址寄存器,用于存放偏移量或偏移量分量。 通常和DS、ES這兩個(gè)段寄存器配合使用,用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元。 在串操作指令中,SI用于指明源串偏移量,所以被稱(chēng)為源變址寄存器。,地址指針寄存器,DI稱(chēng)為目的變址寄存器,用于存放偏移量或偏移量分量。 通常和DS、ES這兩個(gè)段寄存器配合使用,用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元。 在串操作指令中,DI用于指明目的串偏移量,所以被稱(chēng)為目的變址寄存器。,地址指針寄存器,BP稱(chēng)為基址指針寄存器,用于存放偏移量,通常和SS段寄存器配合使用,用于定
11、位堆棧段中的內(nèi)存單元。 SP稱(chēng)為堆棧指針,用于存放偏移量,只能和SS段寄存器配合使用,且始終指向堆棧的棧頂,在堆棧指令中隱含的使用它來(lái)定位棧頂數(shù)據(jù)。,地址指針寄存器,IP稱(chēng)為指令指針,用于存放偏移量,只能和CS段寄存器配合使用,且始終指向代碼段中下一條將要讀取到CPU指令隊(duì)列的那條指令; 修改IP中內(nèi)容的操作是CPU在每讀取一條指令到指令隊(duì)列后自動(dòng)進(jìn)行的,使它指向要讀取的下一條指令。 轉(zhuǎn)移指令可以隱含的修改IP寄存器中的內(nèi)容。,數(shù)據(jù)寄存器,(c)數(shù)據(jù)寄存器: 包括AX、BX、CX、DX這樣4個(gè)16位的寄存器 在邏輯上一個(gè)16位的數(shù)據(jù)寄存器可以看成是3個(gè)寄存器 例如AX,可以把它作為一個(gè)16位的
12、數(shù)據(jù)寄存器來(lái)使用,也可以把高低8位分開(kāi),高8位為AH,低8位為AL,數(shù)據(jù)寄存器,在使用上要注意邏輯上不同的寄存器可能在物理上是相互覆蓋的。 這里的寄存器BX在上面提到過(guò),它既可以用作數(shù)據(jù)寄存器,也可以用作地址指針寄存器。,標(biāo)志寄存器,(d)標(biāo)志寄存器: 8086CPU提供一個(gè)16位的標(biāo)志寄存器FR,對(duì)這個(gè)寄存器的使用在指令中往往是隱含的。 值得注意的是,F(xiàn)R是按位操作的,每一個(gè)二進(jìn)制位都有各自特定的含義。,標(biāo)志寄存器,一般在匯編語(yǔ)言程序中的運(yùn)算指令或者標(biāo)志位控制指令會(huì)影響特定標(biāo)志位。 可以通過(guò)轉(zhuǎn)移指令來(lái)判斷標(biāo)志位的變化,實(shí)現(xiàn)程序中的分支結(jié)構(gòu)或者循環(huán)結(jié)構(gòu)。 標(biāo)志寄存器是實(shí)現(xiàn)程序中分支、循環(huán)結(jié)構(gòu)必
13、須的硬件基礎(chǔ)。,狀態(tài)標(biāo)志位,以下的標(biāo)志位屬于狀態(tài)標(biāo)志位,是指令根據(jù)執(zhí)行情況為后續(xù)指令留下的一些可供參考的狀態(tài)信息。(CF, OF, PF, AF, SF, ZF) 功能上,它們是實(shí)現(xiàn)分支、循環(huán)程序結(jié)構(gòu)的基礎(chǔ)。 器件上,它們的改變依賴(lài)于運(yùn)算器(ALU)。,狀態(tài)標(biāo)志位有效的條件,狀態(tài)標(biāo)志位有效的前提條件: 1)當(dāng)前指令要影響標(biāo)志位 2)當(dāng)前指令對(duì)標(biāo)志位的影響是有意義的 3)程序設(shè)計(jì)者對(duì)操作數(shù)的解釋符合指令對(duì)該標(biāo)志位的有效定義,進(jìn)位標(biāo)志CF,有效性:在CPU進(jìn)行算術(shù)運(yùn)算指令時(shí),如果該指令要影響CF標(biāo)志,并且用戶(hù)把操作數(shù)看作無(wú)符號(hào)數(shù)(不完整編碼除外),那么該標(biāo)志位是有效標(biāo)志。 含義:它標(biāo)志著上次算術(shù)運(yùn)
14、算最高位(字的第15位、字節(jié)的第7位)是否產(chǎn)生進(jìn)位(加法指令)或者借位(減法指令)。 如果有進(jìn)位或借位產(chǎn)生,那么CF=1;如果沒(méi)有,那么CF=0。CF標(biāo)志位位于FR的第0位。,進(jìn)位標(biāo)志CF,例1觀察下面的加減法運(yùn)算,判斷CF標(biāo)志取值。(操作數(shù)理解為無(wú)符號(hào)數(shù),CF標(biāo)志才有意義) 10110011 + 01010001 1 00000100 加法運(yùn)算后,最高位向更高一位產(chǎn)生了進(jìn)位,CF應(yīng)等于1。,進(jìn)位標(biāo)志CF,00110000 +00001101 000111101 加法運(yùn)算后,最高位沒(méi)有向更高一位產(chǎn)生進(jìn)位,CF應(yīng)該等于0。,進(jìn)位標(biāo)志CF,01010101 -00111110 000010111
15、減法運(yùn)算后,最后位沒(méi)有向更高一位產(chǎn)生借位,CF應(yīng)該等于0。,判斷CF標(biāo)志的經(jīng)典錯(cuò)誤方法,但是容易出現(xiàn)一種人為的對(duì)CF標(biāo)志的錯(cuò)誤判別方法,那就是用補(bǔ)碼加法來(lái)實(shí)現(xiàn)減法運(yùn)算。 對(duì)上面的算式,這里嘗試使用補(bǔ)碼加法來(lái)實(shí)現(xiàn)它。,判斷CF標(biāo)志的經(jīng)典錯(cuò)誤方法,減數(shù)補(bǔ)碼:00111110 相反數(shù)補(bǔ)碼:11000010 如果使用這種方法來(lái)判斷CF標(biāo)志的取值會(huì)出現(xiàn)什么樣的結(jié)果?,判斷CF標(biāo)志的經(jīng)典錯(cuò)誤方法,01010101 +11000010 100010111 運(yùn)算結(jié)果和上面的減法算式完全一致。 但是最高位向更高一位產(chǎn)生了進(jìn)位,按照CF的定義,CF卻應(yīng)該等于1,和減法算式判別的結(jié)果正好相反。,判斷CF標(biāo)志的經(jīng)典錯(cuò)
16、誤方法,為什么會(huì)出現(xiàn)這樣的情況,哪一種方法是正確的? 因?yàn)樵谶@里使用了補(bǔ)碼邏輯來(lái)判斷無(wú)符號(hào)數(shù)的進(jìn)位和借位,而補(bǔ)碼本身是針對(duì)有符號(hào)數(shù)產(chǎn)生的一種編碼。 使用補(bǔ)碼來(lái)判斷無(wú)符號(hào)數(shù)的運(yùn)算過(guò)程本身就是不符合邏輯的。,判斷CF標(biāo)志的經(jīng)典錯(cuò)誤方法,在計(jì)算機(jī)硬件邏輯中,減法確實(shí)是使用補(bǔ)碼加法來(lái)實(shí)現(xiàn)的,但是不能把這種實(shí)現(xiàn)方法和CF標(biāo)志位的生成邏輯(生成CF標(biāo)志值的邏輯電路結(jié)構(gòu))混為一談。 在手工判斷CF標(biāo)志位的取值時(shí),必須按照常規(guī)的二進(jìn)制數(shù)加減法運(yùn)算過(guò)程來(lái)進(jìn)行,不能使用補(bǔ)碼。,CF標(biāo)志位的實(shí)用價(jià)值,a. 如果需要進(jìn)行多字節(jié)無(wú)符號(hào)數(shù)或補(bǔ)碼的算術(shù)運(yùn)算,那么CF標(biāo)志就是低位字節(jié)和高位字節(jié)間進(jìn)位和借位的橋梁。 8086/
17、8088CPU提供的指令,能夠直接處理的最長(zhǎng)編碼就是一個(gè)字(16位),如果超出這個(gè)范圍,就必須使用多字節(jié)來(lái)表示要計(jì)算的數(shù)據(jù)。 任何CPU芯片,無(wú)論它處理的數(shù)據(jù)范圍多么大,它總是一個(gè)有限的單位,如果超出這個(gè)單位,就必須使用標(biāo)志位作為運(yùn)算的中介。,CF標(biāo)志位的實(shí)用價(jià)值,b. 在執(zhí)行移位指令時(shí),CF標(biāo)志用于存放移出位的值。 例如對(duì)01010011實(shí)行邏輯右移1位,即把這個(gè)字節(jié)中的每一位向右移動(dòng)一位,左邊空出的那一位置為0,最右邊被移出的位保存在CF中。 這個(gè)例子中,移位完成后,CF應(yīng)該等于1。,CF標(biāo)志位的實(shí)用價(jià)值,c. CF標(biāo)志位能夠?yàn)闂l件轉(zhuǎn)移指令提供判別依據(jù)。 例如JC指令,它先判別CF標(biāo)志位,
18、如果CF=1,就跳轉(zhuǎn)到指令中給出地址繼續(xù)執(zhí)行程序,如果CF=0,就不作跳轉(zhuǎn),CPU會(huì)順序執(zhí)行下一條指令。 在程序中,可以根據(jù)CF標(biāo)志取值的不同來(lái)實(shí)現(xiàn)程序的分支或循環(huán)結(jié)構(gòu)。,奇偶標(biāo)志位PF,奇偶標(biāo)志位PF(Parity Flag):如果CPU所執(zhí)行的指令要影響PF標(biāo)志,并且該指令得到的數(shù)據(jù)結(jié)果低8位中含有偶數(shù)個(gè)“1”時(shí),PF=1;含有奇數(shù)個(gè)“1”,PF=0。 注意無(wú)論指令的操作數(shù)有多么長(zhǎng),只有低8位數(shù)據(jù)中1的個(gè)數(shù)能夠影響到PF標(biāo)志的取值。 PF標(biāo)志位位于FR的第2位。,PF標(biāo)志位的實(shí)用價(jià)值,這里以對(duì)ASCII碼的校驗(yàn)來(lái)說(shuō)明它的應(yīng)用。 ASCII碼占用一個(gè)字節(jié),但是只有低7位是真正的碼值,最高位(
19、第7位)是校驗(yàn)位。,PF標(biāo)志位的實(shí)用價(jià)值,如果使用奇校驗(yàn),那么必須保證編碼字節(jié)中始終保持有奇數(shù)個(gè)“1”。 編碼格式可以通過(guò)調(diào)整第7位的取值來(lái)實(shí)現(xiàn): 如果ASCII碼中有奇數(shù)個(gè)“1”,第7位取值為0; 如果ASCII碼中有偶數(shù)個(gè)“1”,第7位取值為1;,PF標(biāo)志位的實(shí)用價(jià)值,試設(shè)想計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)接收ASCII碼,如何判斷收到的編碼是否正確呢? 判斷收到的字節(jié)中是否為奇數(shù)個(gè)“1”,如果為偶數(shù)個(gè)“1”,收到的編碼一定是錯(cuò)誤的,可要求重傳。 通過(guò)PF標(biāo)志可以使用條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)程序中的分支或循環(huán)結(jié)構(gòu)。 通過(guò)奇偶校驗(yàn)碼能夠識(shí)別大部分經(jīng)常出現(xiàn)的錯(cuò)碼,但是并不能完全避免錯(cuò)碼。,輔助進(jìn)位標(biāo)志位AF,)輔助進(jìn)
20、位標(biāo)志位AF(Auxiliary Carry Flag):在CPU執(zhí)行算術(shù)運(yùn)算指令時(shí),如果該指令要影響AF標(biāo)志,并且用戶(hù)把操作數(shù)看作無(wú)符號(hào)數(shù),AF標(biāo)志才有意義。 如果低字節(jié)中的低4位向高4位產(chǎn)生進(jìn)位或借位時(shí)(第3位向第4位產(chǎn)生進(jìn)位或借位),AF被置為1;否則AF被置為0。,輔助進(jìn)位標(biāo)志位AF,AF標(biāo)志,又稱(chēng)半進(jìn)位標(biāo)志,位于FR的第4位。 判別標(biāo)準(zhǔn):和CF一樣,使用無(wú)符號(hào)數(shù)的加減運(yùn)算來(lái)作判斷,只是判斷進(jìn)位和借位的位置不在操作數(shù)的最高位,而是在低字節(jié)的第3位。,輔助進(jìn)位標(biāo)志位AF,0,1,2,3,4,5,6,7,進(jìn)位,借位,AF標(biāo)志的實(shí)用價(jià)值,AF標(biāo)志的使用主要針對(duì)用二進(jìn)制算術(shù)運(yùn)算實(shí)現(xiàn)十進(jìn)制算術(shù)運(yùn)
21、算的功能,單純的二進(jìn)制運(yùn)算中,幾乎不使用AF標(biāo)志。 BCD碼:二進(jìn)制數(shù)表示十進(jìn)制數(shù)的編碼,把4個(gè)連續(xù)二進(jìn)制數(shù)位看作1個(gè)十進(jìn)制數(shù)位,但實(shí)際上是一個(gè)十六進(jìn)制數(shù)位,在運(yùn)算中使用十六進(jìn)制進(jìn)借位規(guī)則。,AF標(biāo)志的實(shí)用價(jià)值,如果能通過(guò)某種調(diào)整機(jī)制把進(jìn)借位規(guī)則變?yōu)槭M(jìn)制進(jìn)借位規(guī)則,則可使用二進(jìn)制運(yùn)算來(lái)實(shí)現(xiàn)十進(jìn)制運(yùn)算。 AF標(biāo)志位對(duì)于實(shí)現(xiàn)這種調(diào)整機(jī)制是必不可少的,因?yàn)樗褪怯糜诒磉_(dá)一個(gè)字節(jié)中低4位向高4位的進(jìn)位或借位情況的。,零值標(biāo)志位ZF,4)零值標(biāo)志位ZF(Zero Flag):如果CPU執(zhí)行的指令要影響ZF標(biāo)志,并且保證ZF標(biāo)志是有意義的,ZF才具有意義。 當(dāng)指令得到的結(jié)果數(shù)據(jù)各位全為“0”時(shí),則ZF置
22、“1”,否則ZF置“0”。 ZF標(biāo)志位位于FR的第6位。,ZF標(biāo)志的實(shí)用價(jià)值,實(shí)用價(jià)值:ZF標(biāo)志的使用主要是進(jìn)行比較,并根據(jù)比較的結(jié)果來(lái)進(jìn)行程序的分支或循環(huán)。例如比較兩個(gè)整數(shù)是否相等。 比較的范圍可以很廣闊,不僅限于無(wú)符號(hào)數(shù)、補(bǔ)碼,還可以對(duì)字符或者某些特定的編碼進(jìn)行比較。 和ZF標(biāo)志相關(guān)的條件轉(zhuǎn)移指令也很多,具體的應(yīng)用示例在以后的課程中會(huì)遇到很多。,符號(hào)標(biāo)志位SF,5)符號(hào)標(biāo)志位SF(Sign Flag):如果CPU執(zhí)行的指令要影響SF標(biāo)志,并且用戶(hù)把操作數(shù)看作帶符號(hào)數(shù)(完整編碼,或包括編碼最高位),該標(biāo)志位才有意義。 當(dāng)計(jì)算結(jié)果為負(fù)數(shù)時(shí),SF置“1”;當(dāng)結(jié)果為正數(shù)時(shí),SF置“0”。 SF標(biāo)志
23、位的取值和結(jié)果數(shù)據(jù)的最高位是一致的,因?yàn)檠a(bǔ)碼的最高位就是符號(hào)位。(SF總是正確嗎?) SF標(biāo)志位位于FR的第7位。,SF標(biāo)志的實(shí)用價(jià)值,主要用于對(duì)算術(shù)運(yùn)算結(jié)果的符號(hào)進(jìn)行判斷,只有針對(duì)帶符號(hào)的運(yùn)算才是有意義的。 可以通過(guò)兩個(gè)帶符號(hào)數(shù)經(jīng)過(guò)減法運(yùn)算后所得結(jié)果符號(hào)來(lái)判斷哪一個(gè)數(shù)更大或者更?。ㄐ韬蚈F結(jié)合使用),從而結(jié)合條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)程序的分支或循環(huán)。,溢出標(biāo)志位OF,(6)溢出標(biāo)志位OF(Overflow Flag):如果CPU執(zhí)行的指令要影響OF標(biāo)志,并且用戶(hù)把操作數(shù)看作帶符號(hào)數(shù)(完整編碼,或包括編碼最高位)時(shí),OF標(biāo)志位的取值才有意義。 如果運(yùn)算結(jié)果超出了補(bǔ)碼的表示范圍(字節(jié):-128127,
24、字:-32768到32767),那么解釋為溢出,OF置為1;否則,OF置為0。 OF標(biāo)志位位于FR的第11位。,OF標(biāo)志位的取值邏輯,a. 正數(shù)+負(fù)數(shù): OF=0(等價(jià)運(yùn)算:正數(shù)-正數(shù); 負(fù)數(shù)-負(fù)數(shù)) 這種情況一定沒(méi)有溢出,負(fù)數(shù)和正數(shù)是相互抵消的,運(yùn)算結(jié)果比兩個(gè)原始數(shù)據(jù)中絕對(duì)值較大的一個(gè)更靠近數(shù)軸的原點(diǎn),所以一定不會(huì)超出定義的補(bǔ)碼表示范圍。,OF標(biāo)志位的取值邏輯,b. 正數(shù)+正數(shù): 若結(jié)果為正數(shù),表示符號(hào)位未丟失,無(wú)溢出:OF=0; 若結(jié)果為負(fù)數(shù),表示符號(hào)位已經(jīng)丟失,溢出:OF=1; (等價(jià)運(yùn)算:正數(shù)-負(fù)數(shù)),OF標(biāo)志位的取值邏輯,c. 負(fù)數(shù)+負(fù)數(shù): 若結(jié)果為負(fù)數(shù),表示符號(hào)位未丟失,無(wú)溢出:O
25、F=0; 若結(jié)果為正數(shù),表示符號(hào)位已經(jīng)丟失,溢出:OF=1; (等價(jià)運(yùn)算:負(fù)數(shù)-正數(shù)) 帶符號(hào)數(shù)的加減運(yùn)算可能出現(xiàn)的各種組合都可以等價(jià)替換為上面三種情況。,OF標(biāo)志位的取值邏輯,因?yàn)槌霈F(xiàn)溢出時(shí): 1)參加運(yùn)算的兩個(gè)原始補(bǔ)碼都沒(méi)有超過(guò)表示范圍 2)如果運(yùn)算中超出了表示范圍,只會(huì)是符號(hào)位超出了表示范圍一位(只能是一位,不會(huì)多于一位),OF標(biāo)志位的取值邏輯,對(duì)8位操作數(shù),兩個(gè)最大的正數(shù)補(bǔ)碼相加: 01111111 + 01111111 0 11111110 可見(jiàn)符號(hào)位丟失,但只需在運(yùn)算結(jié)果最高位前增添一個(gè)符號(hào)位,即為正確結(jié)果,OF標(biāo)志位的取值邏輯,對(duì)8位操作數(shù),兩個(gè)最小的負(fù)數(shù)補(bǔ)碼相加: 100000
26、00 + 10000000 1 00000000 若將進(jìn)位作為最高位,則為正確結(jié)果,OF標(biāo)志位的取值邏輯,3)所以符號(hào)位丟失與否的問(wèn)題和溢出問(wèn)題是等價(jià)的 4)硬件邏輯就是通過(guò)判斷符號(hào)位丟失與否來(lái)判斷補(bǔ)碼運(yùn)算是否溢出。,OF標(biāo)志的實(shí)用價(jià)值,主要用于實(shí)現(xiàn)程序分支或循環(huán): 8086/8088指令系統(tǒng)中有單獨(dú)使用OF標(biāo)志位的條件轉(zhuǎn)移指令,可以實(shí)現(xiàn)對(duì)溢出現(xiàn)象的判斷和分支處理; 也有結(jié)合使用OF標(biāo)志和SF標(biāo)志的條件轉(zhuǎn)移指令,可以根據(jù)兩個(gè)帶符號(hào)數(shù)比較大小的結(jié)果來(lái)實(shí)現(xiàn)分支處理。,控制標(biāo)志位,控制標(biāo)志位不同于狀態(tài)標(biāo)志位。 功能上,它不用于實(shí)現(xiàn)分支、循環(huán)結(jié)構(gòu),而是設(shè)置CPU的工作模式或?qū)μ囟ㄊ录捻憫?yīng)方式。 器件
27、上,它們不依賴(lài)于ALU。,單步(或跟蹤)標(biāo)志位TF,7)單步(或跟蹤)標(biāo)志位TF(Trace Flag): TF標(biāo)志位是一個(gè)控制標(biāo)志位,用于觸發(fā)單步中斷。,單步(或跟蹤)標(biāo)志位TF,如果使用指令將TF標(biāo)志位置為1,那么CPU將進(jìn)入單步執(zhí)行指令的工作方式。 每執(zhí)行完一條指令就會(huì)觸發(fā)單步中斷,執(zhí)行單步中斷服務(wù)程序。 一般在屏幕上顯示CPU內(nèi)部各寄存器和標(biāo)志位狀態(tài),以便觀察該指令產(chǎn)生的影響。,TF標(biāo)志的實(shí)用價(jià)值,進(jìn)入中斷時(shí),TF標(biāo)志自動(dòng)被清0,中斷服務(wù)程序執(zhí)行不會(huì)單步執(zhí)行,中斷服務(wù)程序結(jié)束后TF標(biāo)志恢復(fù)中斷以前的設(shè)置。 如果使用指令將TF標(biāo)志清0,那么將會(huì)使CPU退出單步運(yùn)行模式,回到連續(xù)執(zhí)行機(jī)器指
28、令的狀態(tài)。TF標(biāo)志位位于FR的第8位。 實(shí)用價(jià)值: TF標(biāo)志為在機(jī)器指令級(jí)別上單步調(diào)試程序提供了相應(yīng)的硬件基礎(chǔ)。,中斷標(biāo)志位IF,(8)中斷標(biāo)志位IF(Interrupt-enable Flag):用于控制CPU是否處理可屏蔽中斷。 如果使用指令將IF標(biāo)志置為1,那么CPU將會(huì)處理任何可屏蔽中斷; 如果使用指令將IF標(biāo)志置為0,那么CPU將不會(huì)處理可屏蔽中斷。 IF標(biāo)志位位于FR的第9位。,IF標(biāo)志的實(shí)用價(jià)值,作為一個(gè)可設(shè)置開(kāi)關(guān),控制CPU是否處理可屏蔽中斷,在程序執(zhí)行不允許被打斷的情況下,可以采用這個(gè)開(kāi)關(guān)來(lái)屏蔽可屏蔽中斷。 例如,某些對(duì)執(zhí)行時(shí)間要求非常嚴(yán)格的程序段,執(zhí)行這種程序段時(shí)不允許被中斷打斷,因?yàn)橹袛嗵幚頃?huì)添加額外的處理時(shí)間。 注意,IF標(biāo)志只能屏蔽可屏蔽中斷,對(duì)于一些由嚴(yán)重錯(cuò)誤或故障引起的不可屏蔽中斷則是無(wú)法屏蔽的。,方向標(biāo)志位DF,(9)方向標(biāo)志位DF(Direction Flag):這也是一個(gè)控制標(biāo)志位,用于控制串操作指令存取數(shù)據(jù)的方向. 如果使用指令將DF標(biāo)志置為0,每執(zhí)行完一次串操作以后,源串地址指針SI和目的串地址
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東高一 上數(shù)學(xué)試卷
- 廣西第一次高考數(shù)學(xué)試卷
- 江門(mén)七年級(jí)下冊(cè)數(shù)學(xué)試卷
- 2025年中國(guó)輕質(zhì)磚行業(yè)市場(chǎng)運(yùn)行現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 中國(guó)復(fù)方龍膽碳酸氫鈉行業(yè)調(diào)查報(bào)告
- 中國(guó)液體硅酸鈉行業(yè)調(diào)查報(bào)告
- 農(nóng)業(yè)產(chǎn)業(yè)發(fā)展園基礎(chǔ)設(shè)施建設(shè)工程可行性研究報(bào)告
- 低空空域數(shù)字化管理前沿技術(shù)與實(shí)踐
- 健康活動(dòng)賽龍舟課件視頻
- 藥品生產(chǎn)線編制管理辦法
- 血管導(dǎo)管相關(guān)血流感染預(yù)防控制
- T-NMSP 3-2022 高寒地區(qū)汽車(chē)試驗(yàn)場(chǎng)地建設(shè)技術(shù)指南
- T-SDEPI 046-2024 微生物菌劑修復(fù)河道水體技術(shù)規(guī)程
- 醫(yī)院消毒劑知識(shí)培訓(xùn)課件
- 2025年山東省高考物理復(fù)習(xí)方法及備考策略指導(dǎo)(深度課件)
- OQC當(dāng)前管控流程
- 村務(wù)公開(kāi)申請(qǐng)書(shū)
- DB1303-T352-2023食品快速檢測(cè)產(chǎn)品驗(yàn)收技術(shù)規(guī)范
- 2025年中考物理熱點(diǎn)題型專(zhuān)項(xiàng)訓(xùn)練:實(shí)驗(yàn)之探究平面鏡成像的特點(diǎn) (解析版)
- 《蚯蚓》課件-生物學(xué)-自然科學(xué)-專(zhuān)業(yè)資料
- 2025年秋部編版二年級(jí)語(yǔ)文上冊(cè)教學(xué)計(jì)劃
評(píng)論
0/150
提交評(píng)論