版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
微型計(jì)算機(jī)原理及應(yīng)用中南大學(xué)中國水利水電出版社1第3章8086/8088CPU的體系結(jié)構(gòu)及其指令系統(tǒng)
3.1CPU發(fā)展概述
微處理器(microprocessor)是微型計(jì)算機(jī)的運(yùn)算及控制部件,也稱中央處理單元(CPU)。它本身不構(gòu)成獨(dú)立的工作系統(tǒng),因而它也不能獨(dú)立地執(zhí)行程序。通常,微處理器由算術(shù)邏輯部件(ALU)、控制部件、寄存器組和片內(nèi)總線等幾部分組成。20世紀(jì)70年代后期,超大規(guī)模集成電路(VLSI)投人使用,出現(xiàn)了第三代微處理器。Intel公司的8086/8088,Motorola公司的M68000和Zilog公司的Z8000等16位微處理器相繼問世,它們的運(yùn)算速度比8位微處理器快2~5倍,采用HMOS高密度工藝,集成度達(dá)到每片29000個(gè)晶體管,趕上或超過了20世紀(jì)70年代小型機(jī)的水平。23.28086/8088CPU的結(jié)構(gòu)
AHALBHBLCHCLDHDLSPBPDISIALU暫存寄存器ALU數(shù)據(jù)總線(16位)標(biāo)志寄存器EU控制單元CSDSSSESIP內(nèi)部通信寄存器123456執(zhí)行部件(EU)隊(duì)列總線(8位)隊(duì)列接口部件(BIU)指令隊(duì)列總線控制邏輯∑數(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
指令排隊(duì)l
讀/寫操作數(shù)l
總線控制它由下列各部分組成:l
16位段地址寄存器l
16位指令指針寄存器l
20位物理地址加法器l
6字節(jié)指令隊(duì)列(指令緩存區(qū))總線控制邏輯
4總線接口部件BIU的工作過程如下:(1)代碼段段寄存器CS中16位段基地址,與指令指針寄存器IP中16位偏移地址,在地址加法器內(nèi)形成20位物理地址;(2)20位地址直接送往地址總線,通過總線控制邏輯發(fā)出存儲(chǔ)器讀信號RD,啟動(dòng)存儲(chǔ)器,按給定的地址從存儲(chǔ)器中取出指令;(3)取出的指令送到指令隊(duì)列(指令緩存區(qū))中等待執(zhí)行。BIU的指令隊(duì)列可存儲(chǔ)6字節(jié)指令代碼,它是先進(jìn)先出的隊(duì)列寄存器,允許預(yù)取6字節(jié)指令代碼。一般情況下,指令隊(duì)列中填滿指令;(4)EU可從指令隊(duì)列中取出指令執(zhí)行。指令代碼裝入指令隊(duì)列輸入端后,自動(dòng)調(diào)整指令隊(duì)列輸入端指針。EU從指令隊(duì)列輸出端取指令,且在EU取走一字節(jié)的指令代碼后,自動(dòng)調(diào)整指令隊(duì)列輸出端指針。當(dāng)指令隊(duì)列有2個(gè)或2個(gè)以上的字節(jié)空余時(shí),BIU自動(dòng)將指令取到指令隊(duì)列中;
5(5)當(dāng)指令隊(duì)列已滿,并且執(zhí)行部件EU未向BIU申請讀寫存儲(chǔ)器操作數(shù),則BIU不執(zhí)行任何總線周期,處于空閑狀態(tài);(6)EU從指令隊(duì)列中取走指令,經(jīng)指令譯碼后,向BIU申請從存儲(chǔ)器或端口讀寫操作數(shù)。只要收到EU送來的邏輯地址,BIU將通過地址加法器將現(xiàn)行數(shù)據(jù)段及送來的邏輯地址組成20位物理地址,在當(dāng)前取指令總線周期完成后,在讀/寫總線周期訪問存儲(chǔ)器或I/O端口完成讀/寫操作。最后EU執(zhí)行指令,由BIU將運(yùn)算結(jié)果讀出;(7)指令指針寄存器IP由BIU自動(dòng)修改,指向下一條指令在現(xiàn)行代碼段內(nèi)的偏移地址。當(dāng)EU執(zhí)行轉(zhuǎn)移指令時(shí),則BIU清除指令隊(duì)列,從轉(zhuǎn)移指令的新地址取得指令,立即送給EU執(zhí)行,然后從后續(xù)指令序列中取指令填滿隊(duì)列;(8)總線控制部件發(fā)出總線控制信號,實(shí)現(xiàn)存儲(chǔ)器或端口讀寫控制。它將8086CPU的內(nèi)部總線與外部總線相連,是8086CPU與外部打交道不可缺少的路徑.63.2.3指令執(zhí)行部件EU(ExecutionUnit)指令執(zhí)行部件EU完成指令譯碼和執(zhí)行指令的工作。它由以下幾個(gè)部分組成:l
算術(shù)邏輯運(yùn)算單元ALUl
標(biāo)志寄存器PSWl
4個(gè)通用16位寄存器組l
4個(gè)專用16位寄存器l
EU控制器指令執(zhí)行部件工作過程如下:(1)EU從BIU的指令隊(duì)列輸出端取得指令,進(jìn)行譯碼;(2)若執(zhí)行指令需要訪問存儲(chǔ)器或端口去取操作數(shù),則EU將操作數(shù)的偏移地址通過內(nèi)部16位數(shù)據(jù)總線送給BIU,與段地址一起,在BIU的地址加法器中形成20位物理地址,申請?jiān)L問存儲(chǔ)器或端口,取得操作數(shù)送給EU,EU根據(jù)指令要求向EU內(nèi)部各部件發(fā)出控制命令,完成執(zhí)行指令的功能;
7(3)算術(shù)邏輯運(yùn)算單元ALU完成各種算術(shù)運(yùn)算及邏輯運(yùn)算,運(yùn)算的操作數(shù)可從存儲(chǔ)器取得,也可從寄存器組取來;(4)16位暫存器暫存參加運(yùn)算的操作數(shù)。運(yùn)算結(jié)果由內(nèi)部總線送到EU的寄存器組或送到BIU的內(nèi)部寄存器,由BIU寫入存儲(chǔ)器或端口;(5)運(yùn)算后結(jié)果的特征改變了標(biāo)志寄存器PSW的狀態(tài),供測試、判斷及轉(zhuǎn)移指令使用;(6)EU控制器負(fù)責(zé)從指令隊(duì)列中取指令、指令譯碼及發(fā)各種控制命令以完成指令要求的功能。(7)一般情況下,指令順序執(zhí)行EU從指令隊(duì)列中取指令而不是訪問存儲(chǔ)器取指令,所以取指令與執(zhí)行指令可并行操作。但遇到轉(zhuǎn)移指令、調(diào)用指令和返回指令,要將指令隊(duì)列中的內(nèi)容作廢,由BIU重新取轉(zhuǎn)移去的新地址中的指令代碼EU才能繼續(xù)執(zhí)行指令,此時(shí)并行操作可能受到影響。但這種情況相對較少發(fā)生,因此EU與BIU之間相互配合又相互獨(dú)立的非同步工作方式提高了CPU的工作效率。
83.38086/8088CPU的寄存器組和存儲(chǔ)器
3.3.1寄存器組1.通用寄存器組
AHALBHBLCHCLDHDLSPEPSIDIIPFLAGSCSDSSSES圖3-2寄存器組示意圖累加器基址寄存器計(jì)數(shù)寄存器數(shù)據(jù)寄存器堆棧指針寄存器基址指針寄存器源變址寄存器目的變址寄存器指令指針寄存器標(biāo)志寄存器代碼段寄存器數(shù)據(jù)段寄存器堆棧段寄存器附加段寄存器數(shù)據(jù)寄存器地址指針和變址寄存器控制寄存器段寄存器通用寄存器92.指針及變址寄存器包括SP、BP、SI、DI四個(gè)16位寄存器。它們可以象數(shù)據(jù)寄存器一樣在運(yùn)算過程中存放操作數(shù),但它們只能以字(16位)為單位使用。此外,它們更經(jīng)常的用途是在段內(nèi)尋址時(shí)提供偏移地址。SP(StackPointer)稱為堆棧指針寄存器BP(BasePointer)稱為基址指針寄存器SI(SourceIndex)源變址寄存器DI(DestinationIndex)目的變址寄存器
3.段寄存器包括CS、DS、SS和ES四個(gè)段寄存器。
104.控制寄存器包括IP和PSW兩個(gè)16位寄存器。IP指令指針寄存器(InstructionPointer),存放代碼段中的偏移地址,始終指向下一條指令的首地址,它與CS寄存器聯(lián)用確定下一條指令的物理地址。
條件碼標(biāo)志:記錄程序中運(yùn)行結(jié)果的狀態(tài)信息。由于這些狀態(tài)信息往往作為后續(xù)條件轉(zhuǎn)移指令的轉(zhuǎn)移控制條件,所以稱為條件碼。它包括以下6位:l
OF(OverflowFlag)溢出標(biāo)志。本次運(yùn)算過程中產(chǎn)生溢出時(shí),OF=1l
SF(SignFlag)符號標(biāo)志。本次運(yùn)算結(jié)果的最高位為1時(shí),SF=1l
ZF(ZeroFlag)零標(biāo)志。本次運(yùn)算結(jié)果為0時(shí),ZF=1l
CF(CarryFlas)進(jìn)位標(biāo)志。本次運(yùn)算結(jié)果中最高位有進(jìn)位或借位時(shí),CF=1l
AF(AuxiliarycarryFlag)輔助進(jìn)位標(biāo)志。本次運(yùn)算結(jié)果中低4位向高4位有進(jìn)位或借位時(shí),AF=1PF(ParityFlag)奇偶標(biāo)志。本次運(yùn)算結(jié)果中有偶數(shù)個(gè)“1”時(shí),PF=111控制標(biāo)志位有三個(gè):l
DF(DirectionFlag)方向標(biāo)志,在串處理指令中控制處理信息的方向。l
IF(InterruptFlag)中斷標(biāo)志,當(dāng)IF為1時(shí),允許中斷,否則關(guān)閉中斷。l
TF(TraPFlag)陷井標(biāo)志,用于單步方式操作??刂菩畔⑹怯上到y(tǒng)程序或用戶程序根據(jù)需要用指令來設(shè)置的,狀態(tài)信息是由中央處理機(jī)根據(jù)計(jì)算的結(jié)果自動(dòng)設(shè)置的。
在調(diào)試程序DEBUG中提供了測試標(biāo)志位的手段,它用符號表示標(biāo)志位的值。
123.3.2
存儲(chǔ)器結(jié)構(gòu)1.存儲(chǔ)單元的地址和內(nèi)容(1)計(jì)算機(jī)存儲(chǔ)信息的單位
(2)存儲(chǔ)器地址:在存儲(chǔ)器里以字節(jié)為單位存儲(chǔ)信息。為了正確地存放或取得信息,每一個(gè)字節(jié)單元給以一個(gè)存儲(chǔ)器地址。(3)存儲(chǔ)器的容量的基本單位
(4)地址及內(nèi)容的表示
(5)機(jī)器字的表示
(6)存儲(chǔ)器的特性:重復(fù)讀?。簭哪硞€(gè)單元取出其內(nèi)容后,其內(nèi)容仍然保存不變,可以重復(fù)取出存新覆舊:只有存入新的信息后,原來保存的內(nèi)容就自動(dòng)丟失了。
132.存儲(chǔ)器地址的分段
(1)段與小段:把存儲(chǔ)器劃分成段(Segment),每個(gè)段的大小可達(dá)64K,這樣段內(nèi)地址可以用16位表示??梢愿鶕?jù)需要來確定段的大小,可以是64K范圍內(nèi)的任意個(gè)字節(jié)。段的起始地址必須從任一小段(Paragraph)的首地址開始。
小段(Paragraph):從0地址開始,每16個(gè)字節(jié)為一小段,下面列出了存儲(chǔ)器最低地址區(qū)的三個(gè)小段的地址區(qū)間,每行為一小段。
14(2)物理地址及其確定:①物理地址:在1M字節(jié)的存儲(chǔ)器里,每一個(gè)存儲(chǔ)單元都有一個(gè)唯一的20位地址,稱為該存儲(chǔ)單元的物理地址。20位物理地址由16位段地址和16位偏移地址組成②段地址是指每一段的起始地址,其低4位一定是0,這樣就可以規(guī)定段地址只取段起始地址的高16位值。③
偏移地址則是指在段內(nèi)相對于段起始地址的偏移值。④物理地址的計(jì)算方法
⑤段寄存器在IBMPC機(jī)中,有四個(gè)專門存放段地址的寄存器,稱為段寄存器。l
代碼段寄存器CS(CodeSegment)l
數(shù)據(jù)段寄存器DS(Datasegment)l
堆棧段寄存器SS(StackSegment)附加段寄存器ES(ExtraSegment)
15(3)段寄存器的設(shè)定與調(diào)整:各段在存儲(chǔ)器中的分配一般是由操作系統(tǒng)負(fù)責(zé)的。
各段也可以允許重疊(指每個(gè)段區(qū)的大小允許根據(jù)實(shí)際需要來分配,而不一定要占有64K的最大段空間)。注意新段可以在已占用區(qū)后面的第一個(gè)小段開始。
CSDSSSES…...64KB代碼段…64KB堆棧段…64KB數(shù)據(jù)段…64KB附加段…存儲(chǔ)器00000H01230H6C100H80000HBF1C0HFFFFFH0123H8000H6C10HBF1CH圖3-8存儲(chǔ)器分段實(shí)例一CSDSSSES8KB代碼2KB數(shù)據(jù)256B堆棧存儲(chǔ)器0200H0400H04800H0200H0400H0480H圖3-9存儲(chǔ)器分段實(shí)例二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)時(shí)鐘引腳(輸人)
(8)RESET(reset)復(fù)位信號引腳(輸入)
(9)READY(ready)“準(zhǔn)備好”信號引腳(輸入)
(10)TEST(test)測試信號引腳(輸入)
(11)MN/MX(minimum/maximummodecontrol)最小/最大模式控制信號引腳(輸入)
(12)GND地和VCC電源引腳
183.4.2
最小工作模式當(dāng)8086/8088的第33腳MN/MX固定接到+5V時(shí),就處于最小工作模式。下圖是8088在最小模式下的典型配置
193.4.3
最大工作模式8086/8088CPU為實(shí)現(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信號與最小模式工作方式時(shí)相同,但DEN信號的極性相反。8288產(chǎn)生的總線命令是由8086/8088的總線狀態(tài)信號S2、S1及S0所決定。
8288發(fā)出的總線命令信號具有以下功能:(1)MRDC:相當(dāng)于最小模式時(shí)由8086/8088發(fā)出的RD和IO/M兩信號的組合,此時(shí)IO/M=0。(2)IORC:相當(dāng)于最小模式時(shí)由8086/8088發(fā)出的RD和IO/M兩信號的組合,此時(shí)IO/M=l。(3)MWTC和AMWTC:相當(dāng)于最小模式時(shí)由8086/8088發(fā)出的WR和IO/M兩信兵組合,此時(shí)IO/M=0。但在最大工作模式時(shí)增加了一個(gè)“超前寫存儲(chǔ)器信號”AMWC。它比MWTC提前一個(gè)時(shí)鐘周期。22(4)IOWC和AIOWC:相當(dāng)于最小模式時(shí)WR和IO/M兩信號的組合,此時(shí)IO/M=1。也增加了一個(gè)“超前寫I/O端口信號AIOWC。它比IOWC提前一個(gè)時(shí)鐘周期。(5)INTA:中斷響應(yīng)信號INTA在最小模式時(shí)由CPU直接發(fā)出。(6)CEN:當(dāng)有多片8288協(xié)同工作時(shí)起片選作用。當(dāng)命令允許信號CEN為高電平時(shí),允許該8288發(fā)出全部控制信號。當(dāng)CEN為低電平時(shí),禁止該8288發(fā)出總線控制信號,同時(shí)使DEW和PDEN呈高阻狀態(tài)。任何時(shí)候只有一片8288的CEN信號為高電平(7)AEN:由總線仲裁器8289輸人,低電平有效。地址允許信號AEN是支持多總線結(jié)構(gòu)的同步控制信號。(8)MCE/PDEN:是一條雙功能的輸出控制線。當(dāng)8288作于系統(tǒng)總線方式時(shí),作主控級聯(lián)允許信號MCE用,在中斷響應(yīng)周期的T1狀態(tài)時(shí)MCE有效,控制主8259A向從8259A輸出級聯(lián)地址。當(dāng)8288工作于I/O總線方式時(shí),作外設(shè)數(shù)據(jù)允許信號PDEN用,控制外部設(shè)備通過I/O總線傳送數(shù)據(jù)。(9)IOB:8288既可控制系統(tǒng)總線,又可控制I/O總線。當(dāng)總線方式控制信號IOB=1時(shí),8288只用來控制I/O總線;當(dāng)IOB=0時(shí),8288工作于系統(tǒng)總線工作方式。
233.4.48088CPU與8086CPU的差異8088CPU的內(nèi)部數(shù)據(jù)總線寬度是16位,外部數(shù)據(jù)總線寬度是8位,所以8088CPU稱為準(zhǔn)16位微處理器。
243.58086/8088CPU的時(shí)序
3.5.18086/8088CPU的各種CLK周期(1)時(shí)鐘周期(ClockCycle):時(shí)鐘周期是CLK信號振蕩一次所用的時(shí)間,是CPU時(shí)鐘頻率的倒數(shù),也稱T狀態(tài)。(2)總線周期(BusCycle):8086CPU中,BIU完成一次訪問存儲(chǔ)器或I/O端口操作所需要的時(shí)間,稱作一個(gè)總線周期。一個(gè)總線周期由幾個(gè)T狀態(tài)組成。(3)指令周期(InstructionCycle):執(zhí)行一條指令所需的時(shí)間稱為指令周期。不同指令的指令周期的長短是不同的,一個(gè)指令周期一般由幾個(gè)總線周期組成。(4)等待周期(WaitCycle)當(dāng)CPU與慢速外設(shè)進(jìn)行數(shù)據(jù)交換,如果要延長總線周期時(shí)需要插入狀態(tài)Tw。(5)空閑周期Ti在兩個(gè)總線周期之間,如果CPU的某些操作還沒有執(zhí)行完畢時(shí),需要插入空閑時(shí)鐘周期Ti。
25CLK信號構(gòu)成的各種周期示意圖如下圖所示。
263.5.28086/8088CPU最小模式下的總線操作1.讀總線周期
27一個(gè)最基本的讀總線周期包含4個(gè)T狀態(tài),即T1、T2、T3、T4,在存儲(chǔ)器和外設(shè)速度較慢時(shí),在T3后可插入1個(gè)或幾個(gè)等待狀態(tài)TW。T1狀態(tài):(1)M/IO信號在T1狀態(tài)有效,指出CPU是從內(nèi)存還是從I/O端口讀取數(shù)據(jù)。M/IO為高,從存儲(chǔ)器讀,M/IO為低,從I/O端口讀。M/IO信號的有效電平一直保持到總線周期結(jié)束的T4狀態(tài)。(2)T1狀態(tài)開始,20位地址信號通過多路復(fù)用總線輸出,指出要讀取的存儲(chǔ)器或1們端口的地址。高4位地址從A19/S6~A16/S3地址/狀態(tài)線送出,低16位從AD15~AD0地址/數(shù)據(jù)線送出。
(3)ALE引腳上輸出一個(gè)正脈沖作地址鎖存信號。在T1狀態(tài)結(jié)束時(shí),M/IO信號,地址信號均已有效,ALE的下降沿用作鎖存器8282的選通信號,使地址鎖存,這樣在總線周期的其它狀態(tài)才可分時(shí)復(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信號有效,送到所有的存儲(chǔ)器和I/O端口,但只選通地址有效的存儲(chǔ)單元和I/O端口,使之能讀出數(shù)據(jù)。
(7)這時(shí),被選中的存儲(chǔ)單元和I/O端口將CPU所需要的數(shù)據(jù)送到總線上,供CPU讀取。
29T3狀態(tài):(8)T3狀態(tài)一開始,CPU采樣READY信號,若此信號為低電平,表示系統(tǒng)中所連接的存儲(chǔ)器或外設(shè)工作速度較慢,數(shù)據(jù)沒有準(zhǔn)備好,要求CPU在T3和T4狀態(tài)之間再插入一個(gè)TW狀態(tài)。
(9)當(dāng)READY信號有效時(shí)(為高電平),表示存儲(chǔ)單元和I/O端口將數(shù)據(jù)通過數(shù)據(jù)收發(fā)器8286送到數(shù)據(jù)總線AD15~AD0上,CPU可以讀取數(shù)據(jù)。這時(shí)CPU在T3周期結(jié)束時(shí)(即T3周期的下降沿),讀取數(shù)據(jù)。S4S3指出了當(dāng)前訪問哪個(gè)段寄存器,若S4S3=10,表示訪問CS段,讀取的是指令,CPU將它送入指令隊(duì)列中等待執(zhí)行,否則讀取的是數(shù)據(jù),送入ALU進(jìn)行運(yùn)算。
30TW狀態(tài):(10)CPU在每個(gè)TW狀態(tài)的前沿對READY信號采樣,若為低電平繼續(xù)插入Tw狀態(tài)。當(dāng)在Tw狀態(tài)采樣到READY信號為高電平時(shí),在當(dāng)前Tw狀態(tài)執(zhí)行完,進(jìn)入T4狀態(tài)。在最后一個(gè)Tw狀態(tài),數(shù)據(jù)肯定已出現(xiàn)在數(shù)據(jù)總線上,此時(shí)Tw狀態(tài)的動(dòng)作與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ù)總線上撤除,各個(gè)控制信號和狀態(tài)信號線進(jìn)入無效狀態(tài),總線收發(fā)器不工作,一個(gè)讀總線周期結(jié)束。
312.寫總線周期
328086/8088CPU寫總線周期時(shí)序與讀總線周期時(shí)序有許多相同之處。在T1狀態(tài),M/IO信號有效,指出CPU將數(shù)據(jù)寫入內(nèi)存還是I/O端口;CPU給出寫入存儲(chǔ)單元或I/O端口的20位物理地址;地址鎖存信號ALE有效,選存儲(chǔ)體信號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信號無效,插入一個(gè)到幾個(gè)Tw狀態(tài),直到READY信號有效,存儲(chǔ)器或I/O設(shè)備從數(shù)據(jù)總線上取走數(shù)據(jù)。在T4狀態(tài),從數(shù)據(jù)總線上撤消數(shù)據(jù),各控制信號和狀態(tài)信號線變成無效;DEN信號變成高電平,總線收發(fā)器不工作。
333.5.3
最大模式下的總線操作8086/8088CPU工作在最大模式時(shí),增加了總線控制器8288,CPU向8288輸出狀態(tài)信號S2~S0,根據(jù)S2~S0的編碼,由8288輸出總線控制信號,如存儲(chǔ)器讀/寫信號,I/O端口讀/寫信號及中斷信號,因此在時(shí)序分析上要同時(shí)考慮CPU和總線控制器兩者產(chǎn)生的信號。 8086/8088CPU工作在最大模式時(shí),一個(gè)總線周期一般同樣由T1、T2、T3、T4這4個(gè)時(shí)鐘周期構(gòu)成,如果外設(shè)工作速度比較慢,則可以在T3周期之后插入等待周期TW。 8088CPU與8086CPU的時(shí)序上差異主要體現(xiàn)在總線寬度上,8088CPU的外部總線寬度是8位,一次只能用AD7~AD0讀寫1個(gè)字節(jié)(8位),8086CPU的外部總線寬度是16位,一次能用AD15~AD0讀寫1個(gè)字(16位),其余的操作都一樣。
343.68086/8088的指令系統(tǒng)
3.6.1概述
一、8086/8088指令系統(tǒng)的特點(diǎn)(1)靈活的指令格式
(2)指令的尋址能力和數(shù)據(jù)存取及運(yùn)算能力強(qiáng)
(3)具有處理多種類型數(shù)據(jù)的能力
(4)便于構(gòu)成多處理機(jī)系統(tǒng)
35二、匯編語言的指令格式匯編語言指令的格式為:[標(biāo)號]指令助憶符[[操作數(shù)1][,操作數(shù)2]][;注釋]其中[]方括號內(nèi)的內(nèi)容為可缺省的項(xiàng)。標(biāo)號:代表該語句的存儲(chǔ)器首地址。指令助憶符:可為代表8086操作的115個(gè)指令助憶符之一。操作數(shù):一個(gè)、兩個(gè)或沒有。有兩個(gè)操作數(shù)時(shí),逗號前面的為目的操作數(shù),逗號后面的為源操作數(shù)。以“;”開頭后跟的注釋是一個(gè)字符串。注釋的作用是便于閱讀、修改和調(diào)試程序,可有多行,但每行必須以“;”開頭。
36三、符號與標(biāo)號1.符號符號就是字符串。
2.標(biāo)號
標(biāo)號代表某語句的存儲(chǔ)器首地址。當(dāng)某指令(語句)為重復(fù)控制指令、條件轉(zhuǎn)移指令或無條件轉(zhuǎn)移指令的目的語句時(shí),就應(yīng)當(dāng)使用標(biāo)號。
四、常量與變量1.常量常量表示固定值,通常分為字面常量和符號常量。
2.變量
變量是存儲(chǔ)器中一個(gè)數(shù)據(jù)或多個(gè)數(shù)據(jù)(數(shù)據(jù)區(qū))的符號表示,變量指針總是指向數(shù)據(jù)區(qū)的第一個(gè)數(shù)據(jù)項(xiàng),變量名的命名規(guī)則與符號的命名規(guī)則相同。
373.6.2
尋址方式
一、
操作數(shù)的種類和有效地址1.操作數(shù)的種類根據(jù)操作數(shù)的不同來源,將操作數(shù)分為這樣幾類:立即數(shù)、寄存器操作數(shù)、存儲(chǔ)器操作數(shù)及隱含的寄存器操作數(shù)。(1)立即數(shù)指操作數(shù)存放在指令代碼中,緊跟在操作碼之后,和指令的操作碼部分一起存放在代碼段中,稱此操作數(shù)為立即數(shù)。立即數(shù)可以是8位或16位,在指令中立即數(shù)只能為源操作數(shù)。如:MOV AX,100H指令中源操作數(shù)100H就為立即數(shù)。
38(2)寄存器操作數(shù)指寄存器中的內(nèi)容或寄存器本身作為操作數(shù),參加指令的運(yùn)算或存放運(yùn)算結(jié)果。如:ADD AX,BX指令中源操作數(shù)和目的操作數(shù)均為寄存器操作數(shù),指令的功能為將寄存器AX和BX中的內(nèi)容相加,和存入AX中。(3)存儲(chǔ)器操作數(shù)指內(nèi)存的字節(jié)、字單元、雙字單元或其中的內(nèi)容作為操作數(shù)參加指令的運(yùn)算或存放運(yùn)算結(jié)果。如:ADD AX,[BX]指令中源操作數(shù)[BX]為存儲(chǔ)器操作數(shù),指內(nèi)存數(shù)據(jù)段中偏移地址為BX寄存器中內(nèi)容的字單元中的內(nèi)容。存儲(chǔ)器操作數(shù)既可作為源操作數(shù)又可作為目的操作數(shù)。39(4)隱含的寄存器操作數(shù)指令中沒有給出操作數(shù),但實(shí)際上隱含使用了某些指定的寄存器或段寄存器。如指令DAA為將AL寄存器中的內(nèi)容進(jìn)行十進(jìn)制調(diào)整,指令中隱含使用了AL寄存器。又如CLC、STC進(jìn)借位清零及置位指令隱含對標(biāo)志寄存器的CF位操作,LDS指令隱含使用了DS段寄存器。
2.有效地址EA尋訪存儲(chǔ)器操作數(shù)所需的偏移地址即為有效地址,簡稱EA。EA是一個(gè)16位的無符號數(shù),代表被尋址的存儲(chǔ)器操作數(shù)在存儲(chǔ)器中的位置距該段起點(diǎn)(首單元)的字節(jié)數(shù)。40二、尋址方式8086/8088的尋址方式有7種:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、基址尋址、變址尋址及基變址尋址等。1.立即尋址操作數(shù)存放在指令中,緊跟在操作碼之后,它作為指令的操作數(shù)字段存放在代碼段中,這種尋址方式稱為立即尋址方式,操作數(shù)稱為立即數(shù)。
2.寄存器尋址操作數(shù)為寄存器操作數(shù),在指令中給出了寄存器名。寄存器為8個(gè)16位的寄存器與8個(gè)8位的寄存器。413.直接尋址在直接尋址方式中,操作數(shù)的偏移地址直接包含在指令中,它存放在代碼段中指令操作碼的后面的操作數(shù)字段,而操作數(shù)在內(nèi)存中。
圖3-20直接尋址方式示意圖段地址EA操作數(shù)指令42
4.寄存器間接尋址
在寄存器間接尋址方式中,存儲(chǔ)器操作數(shù)的偏移地址即有效地址EA,
可直接取自基址寄存器BX或BP或變址寄存器SI或DI,符號表示為:[BX]、[BP]、[SI]、[DI]。如果使用BX、SI、DI寄存器存放偏移地址,則存儲(chǔ)器操作數(shù)在數(shù)據(jù)段中;如果使用BP寄存器存放偏移地址,則存儲(chǔ)器操作數(shù)在堆棧段中。
5.基址尋址基址尋址中存儲(chǔ)器操作數(shù)的偏移地址為規(guī)定的基址寄存器的內(nèi)容加上指令中給出的位移量?;芳拇嫫鳛锽X和BP。用BX作為基址寄存器,操作數(shù)在數(shù)據(jù)段中。用BP作為基址寄存器,操作數(shù)在堆棧段中。
圖3-23基址尋址方式示意圖段地址地址操作數(shù)基址寄存器位移量寄存器指令存儲(chǔ)器段寄存器EA436.變址尋址變址尋址中存儲(chǔ)器操作數(shù)的偏移地址為規(guī)定的變址寄存器的內(nèi)容加上指令中給出的位移量。變址寄存器為SI和DI。變址尋址中通常操作數(shù)在數(shù)據(jù)段中,即操作數(shù)的段地址在DS段寄存器中。
7.基變址尋址
基變址尋址中存儲(chǔ)器操作數(shù)的偏移地址為規(guī)定的一個(gè)基址寄存器(BX或BP)和一個(gè)變址寄存器(SI或DI)的內(nèi)容加上指令中給出的位移量。
圖3-25基變址尋址方式示意圖段地址變址值操作數(shù)基址寄存器變址寄存器位移量變址寄存器指令存儲(chǔ)器段寄存器EA基址值變址寄存器443.6.38086/8088指令系統(tǒng)中的常用指令8086/8088指令系統(tǒng)可分為五大類:數(shù)據(jù)傳送、算術(shù)運(yùn)算、位操作、控制轉(zhuǎn)移、串操作等。
一、
數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲(chǔ)單元中。所有的數(shù)據(jù)傳送指令在執(zhí)行時(shí)均不影響標(biāo)志位。
存儲(chǔ)器寄存器立即數(shù)DS、ES、SSCS、圖3-26MOV指令的傳送方向示意圖451.?dāng)?shù)據(jù)傳送指令(MOV指令)指令格式:MOVDOPD,SOPD作用:把一個(gè)字節(jié)或一個(gè)字操作數(shù)從源傳送到目的地該指令有如下幾種形式:MOVREG,REGMOVREG16,SEGMOVREG,MEMMOVREG,IMMMOVMEM,REGMOVMEM,IMMMOVMEM16,SEGMOVSEG,REG16(除CS外)MOVSEG,MEM16(除CS外)
46使用時(shí)的注意事項(xiàng):(1)不允許在兩個(gè)存儲(chǔ)單元之間傳送數(shù)據(jù)(數(shù)據(jù)串傳送指令除外);(2)段寄存器之間不允許傳送數(shù)據(jù);(3)立即數(shù)和CS代碼段寄存器不能作為目的操作數(shù);(4)操作數(shù)不能出現(xiàn)二義性,即存儲(chǔ)器操作數(shù)的類型必須明確。(5)兩操作數(shù)的類型必須匹配(一致)。(6)立即數(shù)不能直接送至段寄存器,需要利用通用器(如:AX、BX)中轉(zhuǎn)。
47例3-4指出下面指令的錯(cuò)誤所在(1)MOVAL,BX ;兩操作數(shù)類型不一致(2)MOVAH,2589 ;兩操作數(shù)類型不一致(3)MOVCS,AX ;CS不能作為目的操作(4)MOV[SI],[BX] ;兩操作數(shù)不能同為存儲(chǔ)器操作數(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作用:
將存儲(chǔ)器操作數(shù)的偏移地址送入指定的16位寄存器REG16中。
(2)LDS指令指令格式:LDS REG16,MEM作用:
將雙字的存儲(chǔ)器操作數(shù)的前兩個(gè)存儲(chǔ)單元的內(nèi)容送入指定的16位寄存器REG16中,后兩個(gè)存儲(chǔ)單元的內(nèi)容送入DS寄存器中。
49(3)LES指令指令格式:LES REG16,MEM作用:
將雙字的存儲(chǔ)器操作數(shù)的前兩個(gè)存儲(chǔ)單元的內(nèi)容送入指定的16位寄存器REG16中,后兩個(gè)存儲(chǔ)單元的內(nèi)容送入ES寄存器中。即將地址指針的段地址送ES段寄存器,偏移地址送REG16。
3.交換指令指令格式:XCHGDOPD,SOPD作用:將一個(gè)字節(jié)或一個(gè)字的源操作數(shù)與目的操作數(shù)進(jìn)行交換。DOPD和SOPD可為REGH或MEM操作數(shù),但其中必須有一個(gè)為寄存器操作數(shù),立即數(shù)和段寄存器不能作為XCHG指令的操作數(shù)。例如:XCHGAX,BXXCHG[BX],BL504.堆棧操作指令堆棧操作指令主要在PUSH、POP、PUSHF及POPF等4條。(1)PUSH指令指令格式:PUSHSOPD作用:將一個(gè)字的源操作數(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)后出”方式工作的一個(gè)存儲(chǔ)區(qū)域,它在內(nèi)存的堆棧段中,它的一端固定一端活動(dòng),稱固定端為棧底,活動(dòng)端為棧頂。堆棧的唯一出入口為棧頂,堆棧指針SP任何時(shí)候都指向棧頂,堆棧的最大容量為64KB,為了提高堆棧的訪問速度,堆棧的操作以字為單位進(jìn)行。當(dāng)堆棧為空時(shí),棧底和棧頂重合,隨著入棧的內(nèi)容的增加,棧頂?shù)牡刂芳碨P的值減少,反之SP的值增加。
2000H1FFFH1FFEH1000H64KB堆棧段內(nèi)存棧底SP堆棧段首地址設(shè)SS=1000H、SP=2000H地址的伸展方向堆棧的伸展方向1FFDH1FFCH圖3-30堆棧示意圖52(2)POP指令指令格式:POPDOPD 作用:把棧頂所指的一個(gè)字?jǐn)?shù)據(jù)送到DOPD中,同時(shí)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)容壓入堆棧保存,同時(shí)堆棧指針SP減2。
即:(SP-1,SP-2)←FLAG,
SP←SP-2。
53(4)POPF指令指令格式:POPF作用:將棧頂?shù)膬?nèi)容彈出到標(biāo)志寄存器中,同時(shí)堆棧指針SP加2。
即:FLAG←(SP,SP+1),SP←SP+2545.輸入/輸出指令輸入/輸出指令共有兩條,即:IN指令與OUT指令。(1)IN指令指令格式:①IN AL,端口地址;AL←8位端口的字節(jié)內(nèi)容
②IN AX,端口地址;AX ←兩個(gè)8位端口的字內(nèi)容
③IN AL,DX ;AL←端口地址為DX中內(nèi)容的端口的字節(jié)內(nèi)容
④IN AX,DX;AX←端口地址為DX中內(nèi)容的兩端口的字內(nèi)容作用:從一個(gè)端口輸入一個(gè)字節(jié)或字到累加器AL或AX中。
55(2)OUT指令指令格式:①OUT端口地址,AL
②OUT端口地址,AX
③OUT DX,AL
④OUT DX,AX作用:通過累加器AL或AX送一個(gè)字節(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í)行時(shí)將影響標(biāo)志位。
57二、算術(shù)運(yùn)算類指令8086/8088CPU可進(jìn)行8位、16位(字節(jié)、字)的四種算術(shù)運(yùn)算,即加、減、乘、除。參加運(yùn)算的數(shù)據(jù)可以是無符號或有符號的,無符號的加、減運(yùn)算,標(biāo)志位CF為1表示運(yùn)算結(jié)果溢出,有符號的加、減運(yùn)算,標(biāo)志位OF為1表示運(yùn)算結(jié)果溢出。參加算術(shù)運(yùn)算或邏輯運(yùn)算的寄存器有:8個(gè)8位的寄存器AL、AH、BL、BH、CL、CH、DL、DH,8個(gè)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í)為存儲(chǔ)器操作數(shù),兩操作數(shù)的類型必須一致;在進(jìn)行多字節(jié)數(shù)據(jù)的加法時(shí)需要使用ADC指令,如果低字節(jié)(字)相加產(chǎn)生進(jìn)位位,則在高字節(jié)(字)相加時(shí)將此進(jìn)位位加進(jìn)去。
59(3)INC指令指令格式:INC SDOPD;SDOPD←SDOPD+1INC指令執(zhí)行后不影響CF,但對其余狀態(tài)標(biāo)志位的影響同ADD指令,INC指令的操作數(shù)SDOPD只能為REG或MEM,使用存儲(chǔ)器操作數(shù)時(shí)必須指明其類型是字節(jié)還是字??捎媒馕霾僮鞣鸓TR說明存儲(chǔ)器操作數(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é)果存儲(chǔ)到字節(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相類似,但其參加乘法運(yùn)算的兩操作數(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ù)也均為帶符號數(shù)。
66三、位操作指令位操作指令的功能是對8位或16位的寄存器或存儲(chǔ)單元的內(nèi)容,按位進(jìn)行邏輯運(yùn)算或移位操作。位操作指令有三組:邏輯運(yùn)算指令、移位指令和循環(huán)移位指令。1.邏輯運(yùn)算指令8086/8088CPU的邏輯運(yùn)算指令有: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ù)或邏輯移位,移動(dòng)的數(shù)位由移位指令中給出的的計(jì)數(shù)值確定。若移位次數(shù)為1,可將立即數(shù)1直接作為指令中的操作數(shù),若移位的次數(shù)超過1次,則必須先將移位的次數(shù)放入CL寄存器中。邏輯移位指令實(shí)際上是將操作數(shù)當(dāng)作無符號數(shù)來進(jìn)行移位,所以右移時(shí)最高位添0;算術(shù)移位時(shí),將操作數(shù)當(dāng)作有符號數(shù)來處理,故右移時(shí)保持最高位不變。移位指令可以實(shí)現(xiàn)二進(jìn)制乘以2的整數(shù)冪運(yùn)算。移位指令有四條:邏輯左移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í)移出操作數(shù)的位并不丟失,而是循環(huán)送回操作數(shù)的另一端。循環(huán)移位的指令格式以及移位計(jì)數(shù)值的規(guī)定同移位指令。移動(dòng)的位數(shù)為1直接給出,超過1位,則必須在CL中指定。循環(huán)移位指令中DSOPD可為16位或8位的寄存器操作數(shù)或存儲(chǔ)器操作數(shù),COUNT為循環(huán)次數(shù)。循環(huán)移位指令共有4條。
70(1)ROL指令指令格式:ROLDSOPD,COUNTROL指令對操作數(shù)進(jìn)行循環(huán)左移,將最高位移入標(biāo)志位CF,同時(shí)將最高位移入操作數(shù)的最低位。故ROL指令又稱不帶進(jìn)位位循環(huán)左移指令。(2)ROR指令指令格式:RORDSOPD,COUNTROR指令對操作數(shù)進(jìn)行循環(huán)右移,將最低位移入標(biāo)志位CF,同時(shí)將最低位移入操作數(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中,同時(shí)將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中,同時(shí)將CF中原來的內(nèi)容送入操作數(shù)的最高位。故RCR指令又稱帶進(jìn)位位循環(huán)右移指令。
上述四條循環(huán)移位指令執(zhí)行后都影響標(biāo)志位CF、OF,對其他標(biāo)志位無影響。
72四、控制轉(zhuǎn)移類指令通常指令是順序地逐條執(zhí)行的,但實(shí)際上程序不可能總是順序執(zhí)行,而經(jīng)常需要改變程序的執(zhí)行流程,控制轉(zhuǎn)移類指令就是用來改變程序的執(zhí)行流程的??刂妻D(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的值即可實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移;段間轉(zhuǎn)移是要將程序的執(zhí)行轉(zhuǎn)到另一個(gè)段去執(zhí)行,此時(shí)不僅要修改IP的值,還要修改CS的值才能實(shí)現(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為有效地址的存儲(chǔ)字單元的內(nèi)容送入IP中,有效地址EA的值由操作數(shù)OPRD的尋址方式?jīng)Q定,OPRD的尋址方式可為除立即尋址外的其它尋址方式
74(3)段間直接轉(zhuǎn)移指令JMP FARPTROPRD;IP←OPRD的偏移地址,CS←OPRD所在段的段地址。指令的操作數(shù)是一個(gè)FAR型的標(biāo)號,即該標(biāo)號在另外一個(gè)代碼段。(4)段間間接轉(zhuǎn)移指令JMP DWORDPTROPRD;IP←(EA),CS←(EA+2)。指令的操作數(shù)為一個(gè)32位的存儲(chǔ)器操作數(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í)行分為兩個(gè)過程:首先測試規(guī)定的條件,然后根據(jù)測試的結(jié)果決定程序的轉(zhuǎn)向,若滿足條件則轉(zhuǎn)移到目標(biāo)地址,否則程序順序執(zhí)行。條件轉(zhuǎn)移指令只有一個(gè)操作數(shù),用以指明轉(zhuǎn)移的目標(biāo)地址。條件轉(zhuǎn)移指令的操作數(shù)必須是一個(gè)短標(biāo)號,即所有的條件轉(zhuǎn)移指令都是段內(nèi)直接短轉(zhuǎn)移,指令的字節(jié)數(shù)為2個(gè)字節(jié),條件轉(zhuǎn)移指令的下一條指令與目標(biāo)地址之間的距離在-128~+127之內(nèi)。在執(zhí)行條件轉(zhuǎn)移指令時(shí),若滿足規(guī)定的條件,IP的值改為原來IP值加上符號擴(kuò)展到16位后的偏移量。所有的條件轉(zhuǎn)移指令都不影響狀態(tài)標(biāo)志位
763.重復(fù)控制指令8086/8088中專門設(shè)計(jì)了重復(fù)(循環(huán))控制指令用于使一些程序段重復(fù)執(zhí)行,形成循環(huán)程序。在循環(huán)控制指令中都隱含使用了CX循環(huán)計(jì)數(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,則可實(shí)現(xiàn)“0”次循環(huán)。77(2)LOOPE/LOOPZ(等于或?yàn)榱悖┭h(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- xx省低空經(jīng)濟(jì)產(chǎn)業(yè)園項(xiàng)目可行性研究報(bào)告
- 服裝店安全管理人員合同
- 跨部門合同協(xié)作指南
- 美妝顧問招聘協(xié)議樣本
- 教育出版企業(yè)的組織創(chuàng)新與人才培養(yǎng)策略
- 海外投資合作模式與股權(quán)結(jié)構(gòu)
- 智能化設(shè)備安裝合同案例
- 生態(tài)保護(hù)區(qū)設(shè)施機(jī)耕道施工合同
- 2023全國注冊安全工程師《安全生產(chǎn)管理》考前三色考點(diǎn)筆記
- 2023年注冊消防工程師安全技術(shù)綜合能力模擬卷三
- 機(jī)要密碼工作培訓(xùn)課件
- 煤炭加工工藝的智能化控制與自動(dòng)化技術(shù)
- 動(dòng)力系統(tǒng)故障應(yīng)急預(yù)案
- 30題調(diào)度員崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 容縣柚子創(chuàng)業(yè)計(jì)劃書
- Python數(shù)據(jù)分析與應(yīng)用教學(xué)大綱教案
- 國家開放大學(xué)電大《刑法學(xué)》期末題庫及答案
- 《能源概論》課件
- 計(jì)劃運(yùn)營培訓(xùn)課件
- 吸附計(jì)算完整
- 2023年臨沂房地產(chǎn)市場年報(bào)(掃描版)-星火燎原
評論
0/150
提交評論