微型計算機(jī)原理及應(yīng)用03_第1頁
微型計算機(jī)原理及應(yīng)用03_第2頁
微型計算機(jī)原理及應(yīng)用03_第3頁
微型計算機(jī)原理及應(yīng)用03_第4頁
微型計算機(jī)原理及應(yīng)用03_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

微型計算機(jī)原理及應(yīng)用中南大學(xué)中國水利水電出版社1第3章8086/8088CPU的體系結(jié)構(gòu)及其指令系統(tǒng)

3.1CPU發(fā)展概述

微處理器(microprocessor)是微型計算機(jī)的運算及控制部件,也稱中央處理單元(CPU)。它本身不構(gòu)成獨立的工作系統(tǒng),因而它也不能獨立地執(zhí)行程序。通常,微處理器由算術(shù)邏輯部件(ALU)、控制部件、寄存器組和片內(nèi)總線等幾部分組成。20世紀(jì)70年代后期,超大規(guī)模集成電路(VLSI)投人使用,出現(xiàn)了第三代微處理器。Intel公司的8086/8088,Motorola公司的M68000和Zilog公司的Z8000等16位微處理器相繼問世,它們的運算速度比8位微處理器快2~5倍,采用HMOS高密度工藝,集成度達(dá)到每片29000個晶體管,趕上或超過了20世紀(jì)70年代小型機(jī)的水平。23.28086/8088CPU的結(jié)構(gòu)

AHALBHBLCHCLDHDLSPBPDISIALU暫存寄存器ALU數(shù)據(jù)總線(16位)標(biāo)志寄存器EU控制單元CSDSSSESIP內(nèi)部通信寄存器123456執(zhí)行部件(EU)隊列總線(8位)隊列接口部件(BIU)指令隊列總線控制邏輯∑數(shù)據(jù)總線(16位)地址總線(20位)8086總線圖3-18086微處理器結(jié)構(gòu)框圖通用寄存器3.2.18086/8088CPU的內(nèi)部結(jié)構(gòu)框圖

33.2.2總線接口部件BIU(BusInterfaceUnit)

BIU具有下列功能:l

地址形成l

取指令l

指令排隊l

讀/寫操作數(shù)l

總線控制它由下列各部分組成:l

16位段地址寄存器l

16位指令指針寄存器l

20位物理地址加法器l

6字節(jié)指令隊列(指令緩存區(qū))總線控制邏輯

4總線接口部件BIU的工作過程如下:(1)代碼段段寄存器CS中16位段基地址,與指令指針寄存器IP中16位偏移地址,在地址加法器內(nèi)形成20位物理地址;(2)20位地址直接送往地址總線,通過總線控制邏輯發(fā)出存儲器讀信號RD,啟動存儲器,按給定的地址從存儲器中取出指令;(3)取出的指令送到指令隊列(指令緩存區(qū))中等待執(zhí)行。BIU的指令隊列可存儲6字節(jié)指令代碼,它是先進(jìn)先出的隊列寄存器,允許預(yù)取6字節(jié)指令代碼。一般情況下,指令隊列中填滿指令;(4)EU可從指令隊列中取出指令執(zhí)行。指令代碼裝入指令隊列輸入端后,自動調(diào)整指令隊列輸入端指針。EU從指令隊列輸出端取指令,且在EU取走一字節(jié)的指令代碼后,自動調(diào)整指令隊列輸出端指針。當(dāng)指令隊列有2個或2個以上的字節(jié)空余時,BIU自動將指令取到指令隊列中;

5(5)當(dāng)指令隊列已滿,并且執(zhí)行部件EU未向BIU申請讀寫存儲器操作數(shù),則BIU不執(zhí)行任何總線周期,處于空閑狀態(tài);(6)EU從指令隊列中取走指令,經(jīng)指令譯碼后,向BIU申請從存儲器或端口讀寫操作數(shù)。只要收到EU送來的邏輯地址,BIU將通過地址加法器將現(xiàn)行數(shù)據(jù)段及送來的邏輯地址組成20位物理地址,在當(dāng)前取指令總線周期完成后,在讀/寫總線周期訪問存儲器或I/O端口完成讀/寫操作。最后EU執(zhí)行指令,由BIU將運算結(jié)果讀出;(7)指令指針寄存器IP由BIU自動修改,指向下一條指令在現(xiàn)行代碼段內(nèi)的偏移地址。當(dāng)EU執(zhí)行轉(zhuǎn)移指令時,則BIU清除指令隊列,從轉(zhuǎn)移指令的新地址取得指令,立即送給EU執(zhí)行,然后從后續(xù)指令序列中取指令填滿隊列;(8)總線控制部件發(fā)出總線控制信號,實現(xiàn)存儲器或端口讀寫控制。它將8086CPU的內(nèi)部總線與外部總線相連,是8086CPU與外部打交道不可缺少的路徑.63.2.3指令執(zhí)行部件EU(ExecutionUnit)指令執(zhí)行部件EU完成指令譯碼和執(zhí)行指令的工作。它由以下幾個部分組成:l

算術(shù)邏輯運算單元ALUl

標(biāo)志寄存器PSWl

4個通用16位寄存器組l

4個專用16位寄存器l

EU控制器指令執(zhí)行部件工作過程如下:(1)EU從BIU的指令隊列輸出端取得指令,進(jìn)行譯碼;(2)若執(zhí)行指令需要訪問存儲器或端口去取操作數(shù),則EU將操作數(shù)的偏移地址通過內(nèi)部16位數(shù)據(jù)總線送給BIU,與段地址一起,在BIU的地址加法器中形成20位物理地址,申請訪問存儲器或端口,取得操作數(shù)送給EU,EU根據(jù)指令要求向EU內(nèi)部各部件發(fā)出控制命令,完成執(zhí)行指令的功能;

7(3)算術(shù)邏輯運算單元ALU完成各種算術(shù)運算及邏輯運算,運算的操作數(shù)可從存儲器取得,也可從寄存器組取來;(4)16位暫存器暫存參加運算的操作數(shù)。運算結(jié)果由內(nèi)部總線送到EU的寄存器組或送到BIU的內(nèi)部寄存器,由BIU寫入存儲器或端口;(5)運算后結(jié)果的特征改變了標(biāo)志寄存器PSW的狀態(tài),供測試、判斷及轉(zhuǎn)移指令使用;(6)EU控制器負(fù)責(zé)從指令隊列中取指令、指令譯碼及發(fā)各種控制命令以完成指令要求的功能。(7)一般情況下,指令順序執(zhí)行EU從指令隊列中取指令而不是訪問存儲器取指令,所以取指令與執(zhí)行指令可并行操作。但遇到轉(zhuǎn)移指令、調(diào)用指令和返回指令,要將指令隊列中的內(nèi)容作廢,由BIU重新取轉(zhuǎn)移去的新地址中的指令代碼EU才能繼續(xù)執(zhí)行指令,此時并行操作可能受到影響。但這種情況相對較少發(fā)生,因此EU與BIU之間相互配合又相互獨立的非同步工作方式提高了CPU的工作效率。

83.38086/8088CPU的寄存器組和存儲器

3.3.1寄存器組1.通用寄存器組

AHALBHBLCHCLDHDLSPEPSIDIIPFLAGSCSDSSSES圖3-2寄存器組示意圖累加器基址寄存器計數(shù)寄存器數(shù)據(jù)寄存器堆棧指針寄存器基址指針寄存器源變址寄存器目的變址寄存器指令指針寄存器標(biāo)志寄存器代碼段寄存器數(shù)據(jù)段寄存器堆棧段寄存器附加段寄存器數(shù)據(jù)寄存器地址指針和變址寄存器控制寄存器段寄存器通用寄存器92.指針及變址寄存器包括SP、BP、SI、DI四個16位寄存器。它們可以象數(shù)據(jù)寄存器一樣在運算過程中存放操作數(shù),但它們只能以字(16位)為單位使用。此外,它們更經(jīng)常的用途是在段內(nèi)尋址時提供偏移地址。SP(StackPointer)稱為堆棧指針寄存器BP(BasePointer)稱為基址指針寄存器SI(SourceIndex)源變址寄存器DI(DestinationIndex)目的變址寄存器

3.段寄存器包括CS、DS、SS和ES四個段寄存器。

104.控制寄存器包括IP和PSW兩個16位寄存器。IP指令指針寄存器(InstructionPointer),存放代碼段中的偏移地址,始終指向下一條指令的首地址,它與CS寄存器聯(lián)用確定下一條指令的物理地址。

條件碼標(biāo)志:記錄程序中運行結(jié)果的狀態(tài)信息。由于這些狀態(tài)信息往往作為后續(xù)條件轉(zhuǎn)移指令的轉(zhuǎn)移控制條件,所以稱為條件碼。它包括以下6位:l

OF(OverflowFlag)溢出標(biāo)志。本次運算過程中產(chǎn)生溢出時,OF=1l

SF(SignFlag)符號標(biāo)志。本次運算結(jié)果的最高位為1時,SF=1l

ZF(ZeroFlag)零標(biāo)志。本次運算結(jié)果為0時,ZF=1l

CF(CarryFlas)進(jìn)位標(biāo)志。本次運算結(jié)果中最高位有進(jìn)位或借位時,CF=1l

AF(AuxiliarycarryFlag)輔助進(jìn)位標(biāo)志。本次運算結(jié)果中低4位向高4位有進(jìn)位或借位時,AF=1PF(ParityFlag)奇偶標(biāo)志。本次運算結(jié)果中有偶數(shù)個“1”時,PF=111控制標(biāo)志位有三個:l

DF(DirectionFlag)方向標(biāo)志,在串處理指令中控制處理信息的方向。l

IF(InterruptFlag)中斷標(biāo)志,當(dāng)IF為1時,允許中斷,否則關(guān)閉中斷。l

TF(TraPFlag)陷井標(biāo)志,用于單步方式操作。控制信息是由系統(tǒng)程序或用戶程序根據(jù)需要用指令來設(shè)置的,狀態(tài)信息是由中央處理機(jī)根據(jù)計算的結(jié)果自動設(shè)置的。

在調(diào)試程序DEBUG中提供了測試標(biāo)志位的手段,它用符號表示標(biāo)志位的值。

123.3.2

存儲器結(jié)構(gòu)1.存儲單元的地址和內(nèi)容(1)計算機(jī)存儲信息的單位

(2)存儲器地址:在存儲器里以字節(jié)為單位存儲信息。為了正確地存放或取得信息,每一個字節(jié)單元給以一個存儲器地址。(3)存儲器的容量的基本單位

(4)地址及內(nèi)容的表示

(5)機(jī)器字的表示

(6)存儲器的特性:重復(fù)讀?。簭哪硞€單元取出其內(nèi)容后,其內(nèi)容仍然保存不變,可以重復(fù)取出存新覆舊:只有存入新的信息后,原來保存的內(nèi)容就自動丟失了。

132.存儲器地址的分段

(1)段與小段:把存儲器劃分成段(Segment),每個段的大小可達(dá)64K,這樣段內(nèi)地址可以用16位表示??梢愿鶕?jù)需要來確定段的大小,可以是64K范圍內(nèi)的任意個字節(jié)。段的起始地址必須從任一小段(Paragraph)的首地址開始。

小段(Paragraph):從0地址開始,每16個字節(jié)為一小段,下面列出了存儲器最低地址區(qū)的三個小段的地址區(qū)間,每行為一小段。

14(2)物理地址及其確定:①物理地址:在1M字節(jié)的存儲器里,每一個存儲單元都有一個唯一的20位地址,稱為該存儲單元的物理地址。20位物理地址由16位段地址和16位偏移地址組成②段地址是指每一段的起始地址,其低4位一定是0,這樣就可以規(guī)定段地址只取段起始地址的高16位值。③

偏移地址則是指在段內(nèi)相對于段起始地址的偏移值。④物理地址的計算方法

⑤段寄存器在IBMPC機(jī)中,有四個專門存放段地址的寄存器,稱為段寄存器。l

代碼段寄存器CS(CodeSegment)l

數(shù)據(jù)段寄存器DS(Datasegment)l

堆棧段寄存器SS(StackSegment)附加段寄存器ES(ExtraSegment)

15(3)段寄存器的設(shè)定與調(diào)整:各段在存儲器中的分配一般是由操作系統(tǒng)負(fù)責(zé)的。

各段也可以允許重疊(指每個段區(qū)的大小允許根據(jù)實際需要來分配,而不一定要占有64K的最大段空間)。注意新段可以在已占用區(qū)后面的第一個小段開始。

CSDSSSES…...64KB代碼段…64KB堆棧段…64KB數(shù)據(jù)段…64KB附加段…存儲器00000H01230H6C100H80000HBF1C0HFFFFFH0123H8000H6C10HBF1CH圖3-8存儲器分段實例一CSDSSSES8KB代碼2KB數(shù)據(jù)256B堆棧存儲器0200H0400H04800H0200H0400H0480H圖3-9存儲器分段實例二163.48086/8088CPU的引腳信號及工作模式

3.4.18086/8088CPU的引腳信號和功能

178086/8088各引腳信號的功能如下:(1)AD15~AD0(addressdatabus)地址/數(shù)據(jù)二用引腳(雙向工作)(2)A19/S6~A16/S3(address/status)地址/狀態(tài)復(fù)用引腳(輸出)

(3)BHE/S7(bushighenable/status)高8位數(shù)據(jù)總線允許/狀態(tài)復(fù)用引腳(輸出)

(4)NMI(non-maskableinterrupt)非屏蔽中斷引腳(輸入)

(5)INTR(interruptrequest)可屏蔽中斷請求信號引腳(輸入)

(6)RD(read)讀信號引腳(輸出)

(7)CLK(clock)時鐘引腳(輸人)

(8)RESET(reset)復(fù)位信號引腳(輸入)

(9)READY(ready)“準(zhǔn)備好”信號引腳(輸入)

(10)TEST(test)測試信號引腳(輸入)

(11)MN/MX(minimum/maximummodecontrol)最?。畲竽J娇刂菩盘栆_(輸入)

(12)GND地和VCC電源引腳

183.4.2

最小工作模式當(dāng)8086/8088的第33腳MN/MX固定接到+5V時,就處于最小工作模式。下圖是8088在最小模式下的典型配置

193.4.3

最大工作模式8086/8088CPU為實現(xiàn)多處理器控制系統(tǒng)(多主控系統(tǒng))就要增設(shè)總線控制器8288和總線仲裁器8289。

201.最大工作模式引腳

2.總線控制器8288

218288由狀態(tài)譯碼器、命令信號發(fā)生器,控制信號發(fā)生器及控制電路4部分組成。由8086/8088CPU來的總線狀態(tài)信號S2、S1及S0經(jīng)8288的狀態(tài)譯碼器譯碼后,與輸人控制信號AEN,CEN和IOB相配合,便產(chǎn)生總線命令和控制信號。

8288產(chǎn)生的ALE,DT/R及DEN信號與最小模式工作方式時相同,但DEN信號的極性相反。8288產(chǎn)生的總線命令是由8086/8088的總線狀態(tài)信號S2、S1及S0所決定。

8288發(fā)出的總線命令信號具有以下功能:(1)MRDC:相當(dāng)于最小模式時由8086/8088發(fā)出的RD和IO/M兩信號的組合,此時IO/M=0。(2)IORC:相當(dāng)于最小模式時由8086/8088發(fā)出的RD和IO/M兩信號的組合,此時IO/M=l。(3)MWTC和AMWTC:相當(dāng)于最小模式時由8086/8088發(fā)出的WR和IO/M兩信兵組合,此時IO/M=0。但在最大工作模式時增加了一個“超前寫存儲器信號”AMWC。它比MWTC提前一個時鐘周期。22(4)IOWC和AIOWC:相當(dāng)于最小模式時WR和IO/M兩信號的組合,此時IO/M=1。也增加了一個“超前寫I/O端口信號AIOWC。它比IOWC提前一個時鐘周期。(5)INTA:中斷響應(yīng)信號INTA在最小模式時由CPU直接發(fā)出。(6)CEN:當(dāng)有多片8288協(xié)同工作時起片選作用。當(dāng)命令允許信號CEN為高電平時,允許該8288發(fā)出全部控制信號。當(dāng)CEN為低電平時,禁止該8288發(fā)出總線控制信號,同時使DEW和PDEN呈高阻狀態(tài)。任何時候只有一片8288的CEN信號為高電平(7)AEN:由總線仲裁器8289輸人,低電平有效。地址允許信號AEN是支持多總線結(jié)構(gòu)的同步控制信號。(8)MCE/PDEN:是一條雙功能的輸出控制線。當(dāng)8288作于系統(tǒng)總線方式時,作主控級聯(lián)允許信號MCE用,在中斷響應(yīng)周期的T1狀態(tài)時MCE有效,控制主8259A向從8259A輸出級聯(lián)地址。當(dāng)8288工作于I/O總線方式時,作外設(shè)數(shù)據(jù)允許信號PDEN用,控制外部設(shè)備通過I/O總線傳送數(shù)據(jù)。(9)IOB:8288既可控制系統(tǒng)總線,又可控制I/O總線。當(dāng)總線方式控制信號IOB=1時,8288只用來控制I/O總線;當(dāng)IOB=0時,8288工作于系統(tǒng)總線工作方式。

233.4.48088CPU與8086CPU的差異8088CPU的內(nèi)部數(shù)據(jù)總線寬度是16位,外部數(shù)據(jù)總線寬度是8位,所以8088CPU稱為準(zhǔn)16位微處理器。

243.58086/8088CPU的時序

3.5.18086/8088CPU的各種CLK周期(1)時鐘周期(ClockCycle):時鐘周期是CLK信號振蕩一次所用的時間,是CPU時鐘頻率的倒數(shù),也稱T狀態(tài)。(2)總線周期(BusCycle):8086CPU中,BIU完成一次訪問存儲器或I/O端口操作所需要的時間,稱作一個總線周期。一個總線周期由幾個T狀態(tài)組成。(3)指令周期(InstructionCycle):執(zhí)行一條指令所需的時間稱為指令周期。不同指令的指令周期的長短是不同的,一個指令周期一般由幾個總線周期組成。(4)等待周期(WaitCycle)當(dāng)CPU與慢速外設(shè)進(jìn)行數(shù)據(jù)交換,如果要延長總線周期時需要插入狀態(tài)Tw。(5)空閑周期Ti在兩個總線周期之間,如果CPU的某些操作還沒有執(zhí)行完畢時,需要插入空閑時鐘周期Ti。

25CLK信號構(gòu)成的各種周期示意圖如下圖所示。

263.5.28086/8088CPU最小模式下的總線操作1.讀總線周期

27一個最基本的讀總線周期包含4個T狀態(tài),即T1、T2、T3、T4,在存儲器和外設(shè)速度較慢時,在T3后可插入1個或幾個等待狀態(tài)TW。T1狀態(tài):(1)M/IO信號在T1狀態(tài)有效,指出CPU是從內(nèi)存還是從I/O端口讀取數(shù)據(jù)。M/IO為高,從存儲器讀,M/IO為低,從I/O端口讀。M/IO信號的有效電平一直保持到總線周期結(jié)束的T4狀態(tài)。(2)T1狀態(tài)開始,20位地址信號通過多路復(fù)用總線輸出,指出要讀取的存儲器或1們端口的地址。高4位地址從A19/S6~A16/S3地址/狀態(tài)線送出,低16位從AD15~AD0地址/數(shù)據(jù)線送出。

(3)ALE引腳上輸出一個正脈沖作地址鎖存信號。在T1狀態(tài)結(jié)束時,M/IO信號,地址信號均已有效,ALE的下降沿用作鎖存器8282的選通信號,使地址鎖存,這樣在總線周期的其它狀態(tài)才可分時復(fù)用這些引腳傳送數(shù)據(jù)或狀態(tài)信息。

28T2狀態(tài):(4)地址信號消失,A19/S6~A16/S3引腳上輸出狀態(tài)信息S6~S3,指出當(dāng)前正在使用的段寄存器及中斷允許情況。(5)低位地址線AD15~AD0進(jìn)入高阻狀態(tài),為讀取數(shù)據(jù)作準(zhǔn)備。(6)RD信號有效,送到所有的存儲器和I/O端口,但只選通地址有效的存儲單元和I/O端口,使之能讀出數(shù)據(jù)。

(7)這時,被選中的存儲單元和I/O端口將CPU所需要的數(shù)據(jù)送到總線上,供CPU讀取。

29T3狀態(tài):(8)T3狀態(tài)一開始,CPU采樣READY信號,若此信號為低電平,表示系統(tǒng)中所連接的存儲器或外設(shè)工作速度較慢,數(shù)據(jù)沒有準(zhǔn)備好,要求CPU在T3和T4狀態(tài)之間再插入一個TW狀態(tài)。

(9)當(dāng)READY信號有效時(為高電平),表示存儲單元和I/O端口將數(shù)據(jù)通過數(shù)據(jù)收發(fā)器8286送到數(shù)據(jù)總線AD15~AD0上,CPU可以讀取數(shù)據(jù)。這時CPU在T3周期結(jié)束時(即T3周期的下降沿),讀取數(shù)據(jù)。S4S3指出了當(dāng)前訪問哪個段寄存器,若S4S3=10,表示訪問CS段,讀取的是指令,CPU將它送入指令隊列中等待執(zhí)行,否則讀取的是數(shù)據(jù),送入ALU進(jìn)行運算。

30TW狀態(tài):(10)CPU在每個TW狀態(tài)的前沿對READY信號采樣,若為低電平繼續(xù)插入Tw狀態(tài)。當(dāng)在Tw狀態(tài)采樣到READY信號為高電平時,在當(dāng)前Tw狀態(tài)執(zhí)行完,進(jìn)入T4狀態(tài)。在最后一個Tw狀態(tài),數(shù)據(jù)肯定已出現(xiàn)在數(shù)據(jù)總線上,此時Tw狀態(tài)的動作與T。狀態(tài)一樣。CPU采樣數(shù)據(jù)線AD15~AD0。T4狀態(tài):CPU在T3與T4狀態(tài)的交界處采樣數(shù)據(jù)。然后在T4狀態(tài)的后半周期,數(shù)據(jù)從數(shù)據(jù)總線上撤除,各個控制信號和狀態(tài)信號線進(jìn)入無效狀態(tài),總線收發(fā)器不工作,一個讀總線周期結(jié)束。

312.寫總線周期

328086/8088CPU寫總線周期時序與讀總線周期時序有許多相同之處。在T1狀態(tài),M/IO信號有效,指出CPU將數(shù)據(jù)寫入內(nèi)存還是I/O端口;CPU給出寫入存儲單元或I/O端口的20位物理地址;地址鎖存信號ALE有效,選存儲體信號BHE,A0有效,DT/R變高平,表示本總線周期為寫周期。在T2狀態(tài),地址撤消,S6~S3狀態(tài)信號輸出;數(shù)據(jù)從CPU送到數(shù)據(jù)總線AD15~AD0,WR寫信號有效;DEN信號有效,作為數(shù)據(jù)總線收發(fā)器8286的選通信號。在T3狀態(tài),CPU采樣READY線,若READY信號無效,插入一個到幾個Tw狀態(tài),直到READY信號有效,存儲器或I/O設(shè)備從數(shù)據(jù)總線上取走數(shù)據(jù)。在T4狀態(tài),從數(shù)據(jù)總線上撤消數(shù)據(jù),各控制信號和狀態(tài)信號線變成無效;DEN信號變成高電平,總線收發(fā)器不工作。

333.5.3

最大模式下的總線操作8086/8088CPU工作在最大模式時,增加了總線控制器8288,CPU向8288輸出狀態(tài)信號S2~S0,根據(jù)S2~S0的編碼,由8288輸出總線控制信號,如存儲器讀/寫信號,I/O端口讀/寫信號及中斷信號,因此在時序分析上要同時考慮CPU和總線控制器兩者產(chǎn)生的信號。 8086/8088CPU工作在最大模式時,一個總線周期一般同樣由T1、T2、T3、T4這4個時鐘周期構(gòu)成,如果外設(shè)工作速度比較慢,則可以在T3周期之后插入等待周期TW。 8088CPU與8086CPU的時序上差異主要體現(xiàn)在總線寬度上,8088CPU的外部總線寬度是8位,一次只能用AD7~AD0讀寫1個字節(jié)(8位),8086CPU的外部總線寬度是16位,一次能用AD15~AD0讀寫1個字(16位),其余的操作都一樣。

343.68086/8088的指令系統(tǒng)

3.6.1概述

一、8086/8088指令系統(tǒng)的特點(1)靈活的指令格式

(2)指令的尋址能力和數(shù)據(jù)存取及運算能力強(qiáng)

(3)具有處理多種類型數(shù)據(jù)的能力

(4)便于構(gòu)成多處理機(jī)系統(tǒng)

35二、匯編語言的指令格式匯編語言指令的格式為:[標(biāo)號]指令助憶符[[操作數(shù)1][,操作數(shù)2]][;注釋]其中[]方括號內(nèi)的內(nèi)容為可缺省的項。標(biāo)號:代表該語句的存儲器首地址。指令助憶符:可為代表8086操作的115個指令助憶符之一。操作數(shù):一個、兩個或沒有。有兩個操作數(shù)時,逗號前面的為目的操作數(shù),逗號后面的為源操作數(shù)。以“;”開頭后跟的注釋是一個字符串。注釋的作用是便于閱讀、修改和調(diào)試程序,可有多行,但每行必須以“;”開頭。

36三、符號與標(biāo)號1.符號符號就是字符串。

2.標(biāo)號

標(biāo)號代表某語句的存儲器首地址。當(dāng)某指令(語句)為重復(fù)控制指令、條件轉(zhuǎn)移指令或無條件轉(zhuǎn)移指令的目的語句時,就應(yīng)當(dāng)使用標(biāo)號。

四、常量與變量1.常量常量表示固定值,通常分為字面常量和符號常量。

2.變量

變量是存儲器中一個數(shù)據(jù)或多個數(shù)據(jù)(數(shù)據(jù)區(qū))的符號表示,變量指針總是指向數(shù)據(jù)區(qū)的第一個數(shù)據(jù)項,變量名的命名規(guī)則與符號的命名規(guī)則相同。

373.6.2

尋址方式

一、

操作數(shù)的種類和有效地址1.操作數(shù)的種類根據(jù)操作數(shù)的不同來源,將操作數(shù)分為這樣幾類:立即數(shù)、寄存器操作數(shù)、存儲器操作數(shù)及隱含的寄存器操作數(shù)。(1)立即數(shù)指操作數(shù)存放在指令代碼中,緊跟在操作碼之后,和指令的操作碼部分一起存放在代碼段中,稱此操作數(shù)為立即數(shù)。立即數(shù)可以是8位或16位,在指令中立即數(shù)只能為源操作數(shù)。如:MOV AX,100H指令中源操作數(shù)100H就為立即數(shù)。

38(2)寄存器操作數(shù)指寄存器中的內(nèi)容或寄存器本身作為操作數(shù),參加指令的運算或存放運算結(jié)果。如:ADD AX,BX指令中源操作數(shù)和目的操作數(shù)均為寄存器操作數(shù),指令的功能為將寄存器AX和BX中的內(nèi)容相加,和存入AX中。(3)存儲器操作數(shù)指內(nèi)存的字節(jié)、字單元、雙字單元或其中的內(nèi)容作為操作數(shù)參加指令的運算或存放運算結(jié)果。如:ADD AX,[BX]指令中源操作數(shù)[BX]為存儲器操作數(shù),指內(nèi)存數(shù)據(jù)段中偏移地址為BX寄存器中內(nèi)容的字單元中的內(nèi)容。存儲器操作數(shù)既可作為源操作數(shù)又可作為目的操作數(shù)。39(4)隱含的寄存器操作數(shù)指令中沒有給出操作數(shù),但實際上隱含使用了某些指定的寄存器或段寄存器。如指令DAA為將AL寄存器中的內(nèi)容進(jìn)行十進(jìn)制調(diào)整,指令中隱含使用了AL寄存器。又如CLC、STC進(jìn)借位清零及置位指令隱含對標(biāo)志寄存器的CF位操作,LDS指令隱含使用了DS段寄存器。

2.有效地址EA尋訪存儲器操作數(shù)所需的偏移地址即為有效地址,簡稱EA。EA是一個16位的無符號數(shù),代表被尋址的存儲器操作數(shù)在存儲器中的位置距該段起點(首單元)的字節(jié)數(shù)。40二、尋址方式8086/8088的尋址方式有7種:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、基址尋址、變址尋址及基變址尋址等。1.立即尋址操作數(shù)存放在指令中,緊跟在操作碼之后,它作為指令的操作數(shù)字段存放在代碼段中,這種尋址方式稱為立即尋址方式,操作數(shù)稱為立即數(shù)。

2.寄存器尋址操作數(shù)為寄存器操作數(shù),在指令中給出了寄存器名。寄存器為8個16位的寄存器與8個8位的寄存器。413.直接尋址在直接尋址方式中,操作數(shù)的偏移地址直接包含在指令中,它存放在代碼段中指令操作碼的后面的操作數(shù)字段,而操作數(shù)在內(nèi)存中。

圖3-20直接尋址方式示意圖段地址EA操作數(shù)指令42

4.寄存器間接尋址

在寄存器間接尋址方式中,存儲器操作數(shù)的偏移地址即有效地址EA,

可直接取自基址寄存器BX或BP或變址寄存器SI或DI,符號表示為:[BX]、[BP]、[SI]、[DI]。如果使用BX、SI、DI寄存器存放偏移地址,則存儲器操作數(shù)在數(shù)據(jù)段中;如果使用BP寄存器存放偏移地址,則存儲器操作數(shù)在堆棧段中。

5.基址尋址基址尋址中存儲器操作數(shù)的偏移地址為規(guī)定的基址寄存器的內(nèi)容加上指令中給出的位移量。基址寄存器為BX和BP。用BX作為基址寄存器,操作數(shù)在數(shù)據(jù)段中。用BP作為基址寄存器,操作數(shù)在堆棧段中。

圖3-23基址尋址方式示意圖段地址地址操作數(shù)基址寄存器位移量寄存器指令存儲器段寄存器EA436.變址尋址變址尋址中存儲器操作數(shù)的偏移地址為規(guī)定的變址寄存器的內(nèi)容加上指令中給出的位移量。變址寄存器為SI和DI。變址尋址中通常操作數(shù)在數(shù)據(jù)段中,即操作數(shù)的段地址在DS段寄存器中。

7.基變址尋址

基變址尋址中存儲器操作數(shù)的偏移地址為規(guī)定的一個基址寄存器(BX或BP)和一個變址寄存器(SI或DI)的內(nèi)容加上指令中給出的位移量。

圖3-25基變址尋址方式示意圖段地址變址值操作數(shù)基址寄存器變址寄存器位移量變址寄存器指令存儲器段寄存器EA基址值變址寄存器443.6.38086/8088指令系統(tǒng)中的常用指令8086/8088指令系統(tǒng)可分為五大類:數(shù)據(jù)傳送、算術(shù)運算、位操作、控制轉(zhuǎn)移、串操作等。

一、

數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲單元中。所有的數(shù)據(jù)傳送指令在執(zhí)行時均不影響標(biāo)志位。

存儲器寄存器立即數(shù)DS、ES、SSCS、圖3-26MOV指令的傳送方向示意圖451.?dāng)?shù)據(jù)傳送指令(MOV指令)指令格式:MOVDOPD,SOPD作用:把一個字節(jié)或一個字操作數(shù)從源傳送到目的地該指令有如下幾種形式:MOVREG,REGMOVREG16,SEGMOVREG,MEMMOVREG,IMMMOVMEM,REGMOVMEM,IMMMOVMEM16,SEGMOVSEG,REG16(除CS外)MOVSEG,MEM16(除CS外)

46使用時的注意事項:(1)不允許在兩個存儲單元之間傳送數(shù)據(jù)(數(shù)據(jù)串傳送指令除外);(2)段寄存器之間不允許傳送數(shù)據(jù);(3)立即數(shù)和CS代碼段寄存器不能作為目的操作數(shù);(4)操作數(shù)不能出現(xiàn)二義性,即存儲器操作數(shù)的類型必須明確。(5)兩操作數(shù)的類型必須匹配(一致)。(6)立即數(shù)不能直接送至段寄存器,需要利用通用器(如:AX、BX)中轉(zhuǎn)。

47例3-4指出下面指令的錯誤所在(1)MOVAL,BX ;兩操作數(shù)類型不一致(2)MOVAH,2589 ;兩操作數(shù)類型不一致(3)MOVCS,AX ;CS不能作為目的操作(4)MOV[SI],[BX] ;兩操作數(shù)不能同為存儲器操作數(shù)(5)MOVDS,2000H ;立即數(shù)不能直接送往段寄存器(6)MOV [BX],1 ;操作數(shù)出現(xiàn)二義性(不知是字節(jié)還是字)代碼段寄存器CS和指令指針I(yè)P的值,不能由用戶在程序中用MOV指令來改變。

482.地址傳送指令地址傳送指令主要有LEA、LDS及LES三條。(1)LEA指令指令格式:LEA REG16,MEM作用:

將存儲器操作數(shù)的偏移地址送入指定的16位寄存器REG16中。

(2)LDS指令指令格式:LDS REG16,MEM作用:

將雙字的存儲器操作數(shù)的前兩個存儲單元的內(nèi)容送入指定的16位寄存器REG16中,后兩個存儲單元的內(nèi)容送入DS寄存器中。

49(3)LES指令指令格式:LES REG16,MEM作用:

將雙字的存儲器操作數(shù)的前兩個存儲單元的內(nèi)容送入指定的16位寄存器REG16中,后兩個存儲單元的內(nèi)容送入ES寄存器中。即將地址指針的段地址送ES段寄存器,偏移地址送REG16。

3.交換指令指令格式:XCHGDOPD,SOPD作用:將一個字節(jié)或一個字的源操作數(shù)與目的操作數(shù)進(jìn)行交換。DOPD和SOPD可為REGH或MEM操作數(shù),但其中必須有一個為寄存器操作數(shù),立即數(shù)和段寄存器不能作為XCHG指令的操作數(shù)。例如:XCHGAX,BXXCHG[BX],BL504.堆棧操作指令堆棧操作指令主要在PUSH、POP、PUSHF及POPF等4條。(1)PUSH指令指令格式:PUSHSOPD作用:將一個字的源操作數(shù)壓入棧頂。SOPD可為REG16、MEM16或SEG。執(zhí)行過程:①SP←SP-1;②(SP)←SOPDH;③SP←SP-1;④(SP)←SOPDL。結(jié)果:①(SP-1,SP-2)←SOPD;②

SP←SP-2。

51每執(zhí)行完一條PUSH指令,SP的值減2,如圖3-30所示。堆棧是以“先進(jìn)后出”方式工作的一個存儲區(qū)域,它在內(nèi)存的堆棧段中,它的一端固定一端活動,稱固定端為棧底,活動端為棧頂。堆棧的唯一出入口為棧頂,堆棧指針SP任何時候都指向棧頂,堆棧的最大容量為64KB,為了提高堆棧的訪問速度,堆棧的操作以字為單位進(jìn)行。當(dāng)堆棧為空時,棧底和棧頂重合,隨著入棧的內(nèi)容的增加,棧頂?shù)牡刂芳碨P的值減少,反之SP的值增加。

2000H1FFFH1FFEH1000H64KB堆棧段內(nèi)存棧底SP堆棧段首地址設(shè)SS=1000H、SP=2000H地址的伸展方向堆棧的伸展方向1FFDH1FFCH圖3-30堆棧示意圖52(2)POP指令指令格式:POPDOPD 作用:把棧頂所指的一個字?jǐn)?shù)據(jù)送到DOPD中,同時SP加2,即將棧頂?shù)膬?nèi)容彈出到REG16、MEM16或除CS外的段寄存器中。執(zhí)行過程:①DOPDL

←(SP);②SP←SP+1;③DOPDH

←(SP);④SP←SP+1。結(jié)果: ①(DOPD)←(SP,SP+1);②SP←SP+2。(3)PUSHF指令指令格式:PUSHF 作用:把標(biāo)志寄存器中的內(nèi)容壓入堆棧保存,同時堆棧指針SP減2。

即:(SP-1,SP-2)←FLAG,

SP←SP-2。

53(4)POPF指令指令格式:POPF作用:將棧頂?shù)膬?nèi)容彈出到標(biāo)志寄存器中,同時堆棧指針SP加2。

即:FLAG←(SP,SP+1),SP←SP+2545.輸入/輸出指令輸入/輸出指令共有兩條,即:IN指令與OUT指令。(1)IN指令指令格式:①IN AL,端口地址;AL←8位端口的字節(jié)內(nèi)容

②IN AX,端口地址;AX ←兩個8位端口的字內(nèi)容

③IN AL,DX ;AL←端口地址為DX中內(nèi)容的端口的字節(jié)內(nèi)容

④IN AX,DX;AX←端口地址為DX中內(nèi)容的兩端口的字內(nèi)容作用:從一個端口輸入一個字節(jié)或字到累加器AL或AX中。

55(2)OUT指令指令格式:①OUT端口地址,AL

②OUT端口地址,AX

③OUT DX,AL

④OUT DX,AX作用:通過累加器AL或AX送一個字節(jié)或字到外設(shè)端口。IBMPC機(jī)中,所有I/O端口與CPU之間的通信由IN和OUT指令來完成。

566.標(biāo)志寄存器傳送指令該類指令主要有兩條,即LAHF指令與SAHF指令。(1)LAHF指令指令格式:LAHF作用:將標(biāo)志寄存器低八位的內(nèi)容送入AH寄存器中,即:AH ←FLAGL。該指令不影響標(biāo)志位。(2)SAHF指令指令格式:SAHF作用:將AH寄存器的內(nèi)容送入標(biāo)志寄存器低八位中,即:FLAGL

←AH。該指令執(zhí)行時將影響標(biāo)志位。

57二、算術(shù)運算類指令8086/8088CPU可進(jìn)行8位、16位(字節(jié)、字)的四種算術(shù)運算,即加、減、乘、除。參加運算的數(shù)據(jù)可以是無符號或有符號的,無符號的加、減運算,標(biāo)志位CF為1表示運算結(jié)果溢出,有符號的加、減運算,標(biāo)志位OF為1表示運算結(jié)果溢出。參加算術(shù)運算或邏輯運算的寄存器有:8個8位的寄存器AL、AH、BL、BH、CL、CH、DL、DH,8個16位的寄存器AX、BX、CX、DX、SP、BP、SI、DI。

581.加法類指令加法類指令有三條,即:ADD、ADC及INC指令。(1)ADD指令

指令格式:ADDDOPD,SOPD;DOPD←DOPD+SOPD(2)ADC指令指令格式:ADCDOPD,SOPD;DOPD←DOPD+SOPD+CFADC指令也有與ADD指令對應(yīng)的五種形式,它與ADD指令的唯一區(qū)別是加上了進(jìn)借位CF;ADD,ADC指令執(zhí)行結(jié)果影響狀態(tài)標(biāo)志位CF、OF、PF、ZF、SF、AF;ADD、ADC指令中源操作數(shù)和目的操作數(shù)不允許同時為存儲器操作數(shù),兩操作數(shù)的類型必須一致;在進(jìn)行多字節(jié)數(shù)據(jù)的加法時需要使用ADC指令,如果低字節(jié)(字)相加產(chǎn)生進(jìn)位位,則在高字節(jié)(字)相加時將此進(jìn)位位加進(jìn)去。

59(3)INC指令指令格式:INC SDOPD;SDOPD←SDOPD+1INC指令執(zhí)行后不影響CF,但對其余狀態(tài)標(biāo)志位的影響同ADD指令,INC指令的操作數(shù)SDOPD只能為REG或MEM,使用存儲器操作數(shù)時必須指明其類型是字節(jié)還是字??捎媒馕霾僮鞣鸓TR說明存儲器操作數(shù)的類型,其格式為:類型PTR地址表達(dá)式指令中類型可為:BYTE(字節(jié))、WORD(字)及DWORD(雙字,用在JMP指令中)如:ADDBYTEPTR[BX+2],1;目的操作數(shù)的類型為字節(jié)(單元)

60例3-13現(xiàn)有DS=2000H,BX=0100H,SI=0002H,內(nèi)存20100H—20103H單元中的內(nèi)容分別為:12H、34H、56H、78H,內(nèi)存21200H—21203H單元中的內(nèi)容分別為:2AH、4CH、87H、65H試說明下列各條指令執(zhí)行完后AX寄存器的內(nèi)容? MOV AX,1200H ;AX=1200H MOV AX,BX ;AX=0100H MOV AX,[1200H] ;AX=4C2AH MOV AX,[BX] ;AX=3412HMOV AX,1100[BX] ;AX=4C2AH

MOV AX,[BX][SI] ;AX=7856H MOV AX,1100[BX][SI] ;AX=6587H61例3-16下列程序?qū)X(存放的是無符號數(shù))乘以10,結(jié)果存儲到字節(jié)變量DATA1中去。 SUB AL,AL SHLBX,1 RCL AL,1;AL,BX←BX×2MOVDX,BX MOVAH,AL ;AH、DX←2BX SHL BX,1 RCL AL,1 SHL BX,1 RCL AL,1 ;AL、BX←BX×8 ADD BX,DX ADD AL,AH ;AL、BX←2*BX+8*BX MOVWORDPTRDATA1,BX MOVDATA1+2,AL622.減法類指令減法類指令主要有五條,即:SUB、SBB、DEC、CMP及NEG指令。(1)SUB指令

指令格式:SUBDOPD,SOPD ;DOPD←DOPD-SOPD(2)SBB指令

指令格式:SBBDOPD,SOPD ;DOPD←DOPD-SOPD-CF(3)DEC指令

指令格式:DECSDOPD ;SDOPD← SDOPD-1(不影響CF)

63(4)CMP指令

指令格式:CMPDOPD,SOPD ;DOPD-SOPD(5)NEG指令

指令格式:NEGSDOPD ;SDOPD←0-SDOPD643.乘法指令乘法指令有兩條,即MUL指令與IMUL指令。(1)MULSOPD(字節(jié)或字);無符號數(shù)的乘法指令字節(jié)乘法: AX ←ALSOPD字節(jié)

字乘法: DX:AX←AXSOPD字

(2)IMUL SOPD;有符號數(shù)乘法指令有符號數(shù)乘法指令與MUL相類似,但其參加乘法運算的兩操作數(shù)必須為有符號的操作數(shù)。若乘積的高半部分不是結(jié)果的低半部分的符號擴(kuò)展,則CF和OF置“1”,表示AH或DX含有結(jié)果的有效數(shù)字。

654.除法指令8086/8088規(guī)定除數(shù)必須為被除數(shù)的一半字長。

(1)DIV SOPD(字節(jié)或字);無符號數(shù)除法無符號數(shù)字節(jié)除法前,將AH清0,被除數(shù)隱含在AX寄存器中,除得的商,存放在AL中,余數(shù)存放在AH中;字除法前將DX清0,除得的商,存放在AX中,余數(shù)存放在DX中。若除數(shù)為零,則產(chǎn)生0類型的中斷。

(2)IDIV SOPD(字節(jié)或字);有符號數(shù)除法有符號數(shù)除法指令I(lǐng)DIV和DIV指令類似,差別就是IDIV指令在執(zhí)行時將被除數(shù)和除數(shù)都看成是有符號數(shù),商和余數(shù)也均為帶符號數(shù)。

66三、位操作指令位操作指令的功能是對8位或16位的寄存器或存儲單元的內(nèi)容,按位進(jìn)行邏輯運算或移位操作。位操作指令有三組:邏輯運算指令、移位指令和循環(huán)移位指令。1.邏輯運算指令8086/8088CPU的邏輯運算指令有:AND(邏輯與)、TEST(邏輯測試)、OR(邏輯或)、XOR(邏輯異或)和NOT(邏輯非)五條指令。

(1)NOT指令

指令格式:NOT SDOPD ;SDOPD←SDOPD的反碼。

(2)AND指令

指令格式:AND DOPD,SOPD ;DOPD←DOPD∧SOPD。

67(3)OR指令

指令格式:OR DOPD,SOPD ;DOPD←DOPD∨SOPD(4)邏輯異或XOR指令

指令格式:XOR DOPD,SOPD;DOPD←DOPDSOPD(5)邏輯測試TEST指令

指令格式:TESTDOPD,SOPD ;DOPD∧SOPD,用來檢測條件是否滿足

682.移位指令字節(jié)或字的各位可以進(jìn)行算術(shù)或邏輯移位,移動的數(shù)位由移位指令中給出的的計數(shù)值確定。若移位次數(shù)為1,可將立即數(shù)1直接作為指令中的操作數(shù),若移位的次數(shù)超過1次,則必須先將移位的次數(shù)放入CL寄存器中。邏輯移位指令實際上是將操作數(shù)當(dāng)作無符號數(shù)來進(jìn)行移位,所以右移時最高位添0;算術(shù)移位時,將操作數(shù)當(dāng)作有符號數(shù)來處理,故右移時保持最高位不變。移位指令可以實現(xiàn)二進(jìn)制乘以2的整數(shù)冪運算。移位指令有四條:邏輯左移SHL、邏輯右移SHR、算術(shù)左移SAL、算術(shù)右移SAR。(1)左移指令左移指令有兩條,即邏輯左移SHL指令與算術(shù)左移SAL指令。指令格式:①SHLDSOPD,COUNT ;邏輯左移②SALDSOPD,COUNT ;算術(shù)左移

69(2)右移指令右移指令亦有兩條,即邏輯右移SHR指令與算術(shù)右移SAR指令。指令格式:①SHRDSOPD,COUNT ;邏輯右移②SARDSOPD,COUNT ;算術(shù)右移

3.循環(huán)移位指令字節(jié)或字中的各位可以進(jìn)行帶進(jìn)位或不帶進(jìn)位的循環(huán)移位。與算術(shù)或邏輯移位不同,循環(huán)移位時移出操作數(shù)的位并不丟失,而是循環(huán)送回操作數(shù)的另一端。循環(huán)移位的指令格式以及移位計數(shù)值的規(guī)定同移位指令。移動的位數(shù)為1直接給出,超過1位,則必須在CL中指定。循環(huán)移位指令中DSOPD可為16位或8位的寄存器操作數(shù)或存儲器操作數(shù),COUNT為循環(huán)次數(shù)。循環(huán)移位指令共有4條。

70(1)ROL指令指令格式:ROLDSOPD,COUNTROL指令對操作數(shù)進(jìn)行循環(huán)左移,將最高位移入標(biāo)志位CF,同時將最高位移入操作數(shù)的最低位。故ROL指令又稱不帶進(jìn)位位循環(huán)左移指令。(2)ROR指令指令格式:RORDSOPD,COUNTROR指令對操作數(shù)進(jìn)行循環(huán)右移,將最低位移入標(biāo)志位CF,同時將最低位移入操作數(shù)的最高位。故ROR指令又稱不帶進(jìn)位位循環(huán)右移指令。

71(3)RCL指令指令格式:RCLDSOPD,COUNTRCL指令把進(jìn)借位標(biāo)志CF包含在循環(huán)中進(jìn)行循環(huán)左移位,每執(zhí)行循環(huán)移位指令一次,將操作數(shù)的最高位移入標(biāo)志位CF中,同時將CF中原來的內(nèi)容送入操作數(shù)的最低位。故RCL指令又稱帶進(jìn)位位循環(huán)左移指令。(4)RCR指令指令格式:RCRDSOPD,COUNTRCR指令把進(jìn)借位標(biāo)志CF包含在循環(huán)中進(jìn)行循環(huán)右移位,每執(zhí)行循環(huán)移位指令一次,將操作數(shù)的最低位移入標(biāo)志位CF中,同時將CF中原來的內(nèi)容送入操作數(shù)的最高位。故RCR指令又稱帶進(jìn)位位循環(huán)右移指令。

上述四條循環(huán)移位指令執(zhí)行后都影響標(biāo)志位CF、OF,對其他標(biāo)志位無影響。

72四、控制轉(zhuǎn)移類指令通常指令是順序地逐條執(zhí)行的,但實際上程序不可能總是順序執(zhí)行,而經(jīng)常需要改變程序的執(zhí)行流程,控制轉(zhuǎn)移類指令就是用來改變程序的執(zhí)行流程的。控制轉(zhuǎn)移類指令包括:無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令;循環(huán)控制指令;子程序調(diào)用和返回指令;中斷指令和中斷返回指令。1.無條件轉(zhuǎn)移指令JMP

無條件轉(zhuǎn)移指令必須指定轉(zhuǎn)移的目標(biāo)地址,該指令可將程序無條件轉(zhuǎn)移到目標(biāo)地址開始的指令。無條件轉(zhuǎn)移可分為兩大類:段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移是指在同一段的范圍內(nèi)進(jìn)行轉(zhuǎn)移,只要改變IP的值即可實現(xiàn)段內(nèi)轉(zhuǎn)移;段間轉(zhuǎn)移是要將程序的執(zhí)行轉(zhuǎn)到另一個段去執(zhí)行,此時不僅要修改IP的值,還要修改CS的值才能實現(xiàn)段間轉(zhuǎn)移。

73(1)段內(nèi)直接轉(zhuǎn)移指令1)JMPSHORTOPRD ;段內(nèi)直接短轉(zhuǎn)移功能:IP←IP+8位的位移量2)JMP NEARPTROPRD ;段內(nèi)直接近轉(zhuǎn)移

功能:IP←IP+16位的位移量

(2)段內(nèi)間接轉(zhuǎn)移指令JMP WORDPTROPRD;IP←(EA)指令將以EA為有效地址的存儲字單元的內(nèi)容送入IP中,有效地址EA的值由操作數(shù)OPRD的尋址方式?jīng)Q定,OPRD的尋址方式可為除立即尋址外的其它尋址方式

74(3)段間直接轉(zhuǎn)移指令JMP FARPTROPRD;IP←OPRD的偏移地址,CS←OPRD所在段的段地址。指令的操作數(shù)是一個FAR型的標(biāo)號,即該標(biāo)號在另外一個代碼段。(4)段間間接轉(zhuǎn)移指令JMP DWORDPTROPRD;IP←(EA),CS←(EA+2)。指令的操作數(shù)為一個32位的存儲器操作數(shù)(地址指針),EA由OPRD的尋址方式?jīng)Q定。

752.條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是根據(jù)執(zhí)行該指令前有關(guān)標(biāo)志位的狀態(tài)來決定程序的執(zhí)行是否發(fā)生控制轉(zhuǎn)移的指令,條件轉(zhuǎn)移指令的執(zhí)行分為兩個過程:首先測試規(guī)定的條件,然后根據(jù)測試的結(jié)果決定程序的轉(zhuǎn)向,若滿足條件則轉(zhuǎn)移到目標(biāo)地址,否則程序順序執(zhí)行。條件轉(zhuǎn)移指令只有一個操作數(shù),用以指明轉(zhuǎn)移的目標(biāo)地址。條件轉(zhuǎn)移指令的操作數(shù)必須是一個短標(biāo)號,即所有的條件轉(zhuǎn)移指令都是段內(nèi)直接短轉(zhuǎn)移,指令的字節(jié)數(shù)為2個字節(jié),條件轉(zhuǎn)移指令的下一條指令與目標(biāo)地址之間的距離在-128~+127之內(nèi)。在執(zhí)行條件轉(zhuǎn)移指令時,若滿足規(guī)定的條件,IP的值改為原來IP值加上符號擴(kuò)展到16位后的偏移量。所有的條件轉(zhuǎn)移指令都不影響狀態(tài)標(biāo)志位

763.重復(fù)控制指令8086/8088中專門設(shè)計了重復(fù)(循環(huán))控制指令用于使一些程序段重復(fù)執(zhí)行,形成循環(huán)程序。在循環(huán)控制指令中都隱含使用了CX循環(huán)計數(shù)器,與條件轉(zhuǎn)移指令一樣,所有的重復(fù)(循環(huán))控制指令都為段內(nèi)短轉(zhuǎn)移,指令執(zhí)行后對狀態(tài)標(biāo)志位無影響。(1)LOOP循環(huán)指令指令格式:LOOP短標(biāo)號其意義是:CX←CX-1,然后判斷CX是否等于0,若CX≠0,則轉(zhuǎn)移至短標(biāo)號處執(zhí)行;否則順序執(zhí)行。在使用LOOP指令之前必須先將循環(huán)次數(shù)送入CX中。選擇當(dāng)型的循環(huán)程序結(jié)構(gòu),且將CX初值置為1,則可實現(xiàn)“0”次循環(huán)。77(2)LOOPE/LOOPZ(等于或為零)循環(huán)指令指令格式:LOOPZ 短標(biāo)號或LOOPE短標(biāo)號其意義是先將CX←CX-1,然后判斷是否有CX≠0且ZF=1,有則轉(zhuǎn)移至短標(biāo)號處執(zhí)行;否則(即CX=0或ZF=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論