版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
微型計算機原理及應用中南大學中國水利水電出版社1第3章8086/8088CPU的體系結構及其指令系統(tǒng)
3.1CPU發(fā)展概述
微處理器(microprocessor)是微型計算機的運算及控制部件,也稱中央處理單元(CPU)。它本身不構成獨立的工作系統(tǒng),因而它也不能獨立地執(zhí)行程序。通常,微處理器由算術邏輯部件(ALU)、控制部件、寄存器組和片內總線等幾部分組成。20世紀70年代后期,超大規(guī)模集成電路(VLSI)投人使用,出現了第三代微處理器。Intel公司的8086/8088,Motorola公司的M68000和Zilog公司的Z8000等16位微處理器相繼問世,它們的運算速度比8位微處理器快2~5倍,采用HMOS高密度工藝,集成度達到每片29000個晶體管,趕上或超過了20世紀70年代小型機的水平。23.28086/8088CPU的結構
AHALBHBLCHCLDHDLSPBPDISIALU暫存寄存器ALU數據總線(16位)標志寄存器EU控制單元CSDSSSESIP內部通信寄存器123456執(zhí)行部件(EU)隊列總線(8位)隊列接口部件(BIU)指令隊列總線控制邏輯∑數據總線(16位)地址總線(20位)8086總線圖3-18086微處理器結構框圖通用寄存器3.2.18086/8088CPU的內部結構框圖
33.2.2總線接口部件BIU(BusInterfaceUnit)
BIU具有下列功能:l
地址形成l
取指令l
指令排隊l
讀/寫操作數l
總線控制它由下列各部分組成:l
16位段地址寄存器l
16位指令指針寄存器l
20位物理地址加法器l
6字節(jié)指令隊列(指令緩存區(qū))總線控制邏輯
4總線接口部件BIU的工作過程如下:(1)代碼段段寄存器CS中16位段基地址,與指令指針寄存器IP中16位偏移地址,在地址加法器內形成20位物理地址;(2)20位地址直接送往地址總線,通過總線控制邏輯發(fā)出存儲器讀信號RD,啟動存儲器,按給定的地址從存儲器中取出指令;(3)取出的指令送到指令隊列(指令緩存區(qū))中等待執(zhí)行。BIU的指令隊列可存儲6字節(jié)指令代碼,它是先進先出的隊列寄存器,允許預取6字節(jié)指令代碼。一般情況下,指令隊列中填滿指令;(4)EU可從指令隊列中取出指令執(zhí)行。指令代碼裝入指令隊列輸入端后,自動調整指令隊列輸入端指針。EU從指令隊列輸出端取指令,且在EU取走一字節(jié)的指令代碼后,自動調整指令隊列輸出端指針。當指令隊列有2個或2個以上的字節(jié)空余時,BIU自動將指令取到指令隊列中;
5(5)當指令隊列已滿,并且執(zhí)行部件EU未向BIU申請讀寫存儲器操作數,則BIU不執(zhí)行任何總線周期,處于空閑狀態(tài);(6)EU從指令隊列中取走指令,經指令譯碼后,向BIU申請從存儲器或端口讀寫操作數。只要收到EU送來的邏輯地址,BIU將通過地址加法器將現行數據段及送來的邏輯地址組成20位物理地址,在當前取指令總線周期完成后,在讀/寫總線周期訪問存儲器或I/O端口完成讀/寫操作。最后EU執(zhí)行指令,由BIU將運算結果讀出;(7)指令指針寄存器IP由BIU自動修改,指向下一條指令在現行代碼段內的偏移地址。當EU執(zhí)行轉移指令時,則BIU清除指令隊列,從轉移指令的新地址取得指令,立即送給EU執(zhí)行,然后從后續(xù)指令序列中取指令填滿隊列;(8)總線控制部件發(fā)出總線控制信號,實現存儲器或端口讀寫控制。它將8086CPU的內部總線與外部總線相連,是8086CPU與外部打交道不可缺少的路徑.63.2.3指令執(zhí)行部件EU(ExecutionUnit)指令執(zhí)行部件EU完成指令譯碼和執(zhí)行指令的工作。它由以下幾個部分組成:l
算術邏輯運算單元ALUl
標志寄存器PSWl
4個通用16位寄存器組l
4個專用16位寄存器l
EU控制器指令執(zhí)行部件工作過程如下:(1)EU從BIU的指令隊列輸出端取得指令,進行譯碼;(2)若執(zhí)行指令需要訪問存儲器或端口去取操作數,則EU將操作數的偏移地址通過內部16位數據總線送給BIU,與段地址一起,在BIU的地址加法器中形成20位物理地址,申請訪問存儲器或端口,取得操作數送給EU,EU根據指令要求向EU內部各部件發(fā)出控制命令,完成執(zhí)行指令的功能;
7(3)算術邏輯運算單元ALU完成各種算術運算及邏輯運算,運算的操作數可從存儲器取得,也可從寄存器組取來;(4)16位暫存器暫存參加運算的操作數。運算結果由內部總線送到EU的寄存器組或送到BIU的內部寄存器,由BIU寫入存儲器或端口;(5)運算后結果的特征改變了標志寄存器PSW的狀態(tài),供測試、判斷及轉移指令使用;(6)EU控制器負責從指令隊列中取指令、指令譯碼及發(fā)各種控制命令以完成指令要求的功能。(7)一般情況下,指令順序執(zhí)行EU從指令隊列中取指令而不是訪問存儲器取指令,所以取指令與執(zhí)行指令可并行操作。但遇到轉移指令、調用指令和返回指令,要將指令隊列中的內容作廢,由BIU重新取轉移去的新地址中的指令代碼EU才能繼續(xù)執(zhí)行指令,此時并行操作可能受到影響。但這種情況相對較少發(fā)生,因此EU與BIU之間相互配合又相互獨立的非同步工作方式提高了CPU的工作效率。
83.38086/8088CPU的寄存器組和存儲器
3.3.1寄存器組1.通用寄存器組
AHALBHBLCHCLDHDLSPEPSIDIIPFLAGSCSDSSSES圖3-2寄存器組示意圖累加器基址寄存器計數寄存器數據寄存器堆棧指針寄存器基址指針寄存器源變址寄存器目的變址寄存器指令指針寄存器標志寄存器代碼段寄存器數據段寄存器堆棧段寄存器附加段寄存器數據寄存器地址指針和變址寄存器控制寄存器段寄存器通用寄存器92.指針及變址寄存器包括SP、BP、SI、DI四個16位寄存器。它們可以象數據寄存器一樣在運算過程中存放操作數,但它們只能以字(16位)為單位使用。此外,它們更經常的用途是在段內尋址時提供偏移地址。SP(StackPointer)稱為堆棧指針寄存器BP(BasePointer)稱為基址指針寄存器SI(SourceIndex)源變址寄存器DI(DestinationIndex)目的變址寄存器
3.段寄存器包括CS、DS、SS和ES四個段寄存器。
104.控制寄存器包括IP和PSW兩個16位寄存器。IP指令指針寄存器(InstructionPointer),存放代碼段中的偏移地址,始終指向下一條指令的首地址,它與CS寄存器聯用確定下一條指令的物理地址。
條件碼標志:記錄程序中運行結果的狀態(tài)信息。由于這些狀態(tài)信息往往作為后續(xù)條件轉移指令的轉移控制條件,所以稱為條件碼。它包括以下6位:l
OF(OverflowFlag)溢出標志。本次運算過程中產生溢出時,OF=1l
SF(SignFlag)符號標志。本次運算結果的最高位為1時,SF=1l
ZF(ZeroFlag)零標志。本次運算結果為0時,ZF=1l
CF(CarryFlas)進位標志。本次運算結果中最高位有進位或借位時,CF=1l
AF(AuxiliarycarryFlag)輔助進位標志。本次運算結果中低4位向高4位有進位或借位時,AF=1PF(ParityFlag)奇偶標志。本次運算結果中有偶數個“1”時,PF=111控制標志位有三個:l
DF(DirectionFlag)方向標志,在串處理指令中控制處理信息的方向。l
IF(InterruptFlag)中斷標志,當IF為1時,允許中斷,否則關閉中斷。l
TF(TraPFlag)陷井標志,用于單步方式操作??刂菩畔⑹怯上到y(tǒng)程序或用戶程序根據需要用指令來設置的,狀態(tài)信息是由中央處理機根據計算的結果自動設置的。
在調試程序DEBUG中提供了測試標志位的手段,它用符號表示標志位的值。
123.3.2
存儲器結構1.存儲單元的地址和內容(1)計算機存儲信息的單位
(2)存儲器地址:在存儲器里以字節(jié)為單位存儲信息。為了正確地存放或取得信息,每一個字節(jié)單元給以一個存儲器地址。(3)存儲器的容量的基本單位
(4)地址及內容的表示
(5)機器字的表示
(6)存儲器的特性:重復讀?。簭哪硞€單元取出其內容后,其內容仍然保存不變,可以重復取出存新覆舊:只有存入新的信息后,原來保存的內容就自動丟失了。
132.存儲器地址的分段
(1)段與小段:把存儲器劃分成段(Segment),每個段的大小可達64K,這樣段內地址可以用16位表示??梢愿鶕枰獊泶_定段的大小,可以是64K范圍內的任意個字節(jié)。段的起始地址必須從任一小段(Paragraph)的首地址開始。
小段(Paragraph):從0地址開始,每16個字節(jié)為一小段,下面列出了存儲器最低地址區(qū)的三個小段的地址區(qū)間,每行為一小段。
14(2)物理地址及其確定:①物理地址:在1M字節(jié)的存儲器里,每一個存儲單元都有一個唯一的20位地址,稱為該存儲單元的物理地址。20位物理地址由16位段地址和16位偏移地址組成②段地址是指每一段的起始地址,其低4位一定是0,這樣就可以規(guī)定段地址只取段起始地址的高16位值。③
偏移地址則是指在段內相對于段起始地址的偏移值。④物理地址的計算方法
⑤段寄存器在IBMPC機中,有四個專門存放段地址的寄存器,稱為段寄存器。l
代碼段寄存器CS(CodeSegment)l
數據段寄存器DS(Datasegment)l
堆棧段寄存器SS(StackSegment)附加段寄存器ES(ExtraSegment)
15(3)段寄存器的設定與調整:各段在存儲器中的分配一般是由操作系統(tǒng)負責的。
各段也可以允許重疊(指每個段區(qū)的大小允許根據實際需要來分配,而不一定要占有64K的最大段空間)。注意新段可以在已占用區(qū)后面的第一個小段開始。
CSDSSSES…...64KB代碼段…64KB堆棧段…64KB數據段…64KB附加段…存儲器00000H01230H6C100H80000HBF1C0HFFFFFH0123H8000H6C10HBF1CH圖3-8存儲器分段實例一CSDSSSES8KB代碼2KB數據256B堆棧存儲器0200H0400H04800H0200H0400H0480H圖3-9存儲器分段實例二163.48086/8088CPU的引腳信號及工作模式
3.4.18086/8088CPU的引腳信號和功能
178086/8088各引腳信號的功能如下:(1)AD15~AD0(addressdatabus)地址/數據二用引腳(雙向工作)(2)A19/S6~A16/S3(address/status)地址/狀態(tài)復用引腳(輸出)
(3)BHE/S7(bushighenable/status)高8位數據總線允許/狀態(tài)復用引腳(輸出)
(4)NMI(non-maskableinterrupt)非屏蔽中斷引腳(輸入)
(5)INTR(interruptrequest)可屏蔽中斷請求信號引腳(輸入)
(6)RD(read)讀信號引腳(輸出)
(7)CLK(clock)時鐘引腳(輸人)
(8)RESET(reset)復位信號引腳(輸入)
(9)READY(ready)“準備好”信號引腳(輸入)
(10)TEST(test)測試信號引腳(輸入)
(11)MN/MX(minimum/maximummodecontrol)最?。畲竽J娇刂菩盘栆_(輸入)
(12)GND地和VCC電源引腳
183.4.2
最小工作模式當8086/8088的第33腳MN/MX固定接到+5V時,就處于最小工作模式。下圖是8088在最小模式下的典型配置
193.4.3
最大工作模式8086/8088CPU為實現多處理器控制系統(tǒng)(多主控系統(tǒng))就要增設總線控制器8288和總線仲裁器8289。
201.最大工作模式引腳
2.總線控制器8288
218288由狀態(tài)譯碼器、命令信號發(fā)生器,控制信號發(fā)生器及控制電路4部分組成。由8086/8088CPU來的總線狀態(tài)信號S2、S1及S0經8288的狀態(tài)譯碼器譯碼后,與輸人控制信號AEN,CEN和IOB相配合,便產生總線命令和控制信號。
8288產生的ALE,DT/R及DEN信號與最小模式工作方式時相同,但DEN信號的極性相反。8288產生的總線命令是由8086/8088的總線狀態(tài)信號S2、S1及S0所決定。
8288發(fā)出的總線命令信號具有以下功能:(1)MRDC:相當于最小模式時由8086/8088發(fā)出的RD和IO/M兩信號的組合,此時IO/M=0。(2)IORC:相當于最小模式時由8086/8088發(fā)出的RD和IO/M兩信號的組合,此時IO/M=l。(3)MWTC和AMWTC:相當于最小模式時由8086/8088發(fā)出的WR和IO/M兩信兵組合,此時IO/M=0。但在最大工作模式時增加了一個“超前寫存儲器信號”AMWC。它比MWTC提前一個時鐘周期。22(4)IOWC和AIOWC:相當于最小模式時WR和IO/M兩信號的組合,此時IO/M=1。也增加了一個“超前寫I/O端口信號AIOWC。它比IOWC提前一個時鐘周期。(5)INTA:中斷響應信號INTA在最小模式時由CPU直接發(fā)出。(6)CEN:當有多片8288協同工作時起片選作用。當命令允許信號CEN為高電平時,允許該8288發(fā)出全部控制信號。當CEN為低電平時,禁止該8288發(fā)出總線控制信號,同時使DEW和PDEN呈高阻狀態(tài)。任何時候只有一片8288的CEN信號為高電平(7)AEN:由總線仲裁器8289輸人,低電平有效。地址允許信號AEN是支持多總線結構的同步控制信號。(8)MCE/PDEN:是一條雙功能的輸出控制線。當8288作于系統(tǒng)總線方式時,作主控級聯允許信號MCE用,在中斷響應周期的T1狀態(tài)時MCE有效,控制主8259A向從8259A輸出級聯地址。當8288工作于I/O總線方式時,作外設數據允許信號PDEN用,控制外部設備通過I/O總線傳送數據。(9)IOB:8288既可控制系統(tǒng)總線,又可控制I/O總線。當總線方式控制信號IOB=1時,8288只用來控制I/O總線;當IOB=0時,8288工作于系統(tǒng)總線工作方式。
233.4.48088CPU與8086CPU的差異8088CPU的內部數據總線寬度是16位,外部數據總線寬度是8位,所以8088CPU稱為準16位微處理器。
243.58086/8088CPU的時序
3.5.18086/8088CPU的各種CLK周期(1)時鐘周期(ClockCycle):時鐘周期是CLK信號振蕩一次所用的時間,是CPU時鐘頻率的倒數,也稱T狀態(tài)。(2)總線周期(BusCycle):8086CPU中,BIU完成一次訪問存儲器或I/O端口操作所需要的時間,稱作一個總線周期。一個總線周期由幾個T狀態(tài)組成。(3)指令周期(InstructionCycle):執(zhí)行一條指令所需的時間稱為指令周期。不同指令的指令周期的長短是不同的,一個指令周期一般由幾個總線周期組成。(4)等待周期(WaitCycle)當CPU與慢速外設進行數據交換,如果要延長總線周期時需要插入狀態(tài)Tw。(5)空閑周期Ti在兩個總線周期之間,如果CPU的某些操作還沒有執(zhí)行完畢時,需要插入空閑時鐘周期Ti。
25CLK信號構成的各種周期示意圖如下圖所示。
263.5.28086/8088CPU最小模式下的總線操作1.讀總線周期
27一個最基本的讀總線周期包含4個T狀態(tài),即T1、T2、T3、T4,在存儲器和外設速度較慢時,在T3后可插入1個或幾個等待狀態(tài)TW。T1狀態(tài):(1)M/IO信號在T1狀態(tài)有效,指出CPU是從內存還是從I/O端口讀取數據。M/IO為高,從存儲器讀,M/IO為低,從I/O端口讀。M/IO信號的有效電平一直保持到總線周期結束的T4狀態(tài)。(2)T1狀態(tài)開始,20位地址信號通過多路復用總線輸出,指出要讀取的存儲器或1們端口的地址。高4位地址從A19/S6~A16/S3地址/狀態(tài)線送出,低16位從AD15~AD0地址/數據線送出。
(3)ALE引腳上輸出一個正脈沖作地址鎖存信號。在T1狀態(tài)結束時,M/IO信號,地址信號均已有效,ALE的下降沿用作鎖存器8282的選通信號,使地址鎖存,這樣在總線周期的其它狀態(tài)才可分時復用這些引腳傳送數據或狀態(tài)信息。
28T2狀態(tài):(4)地址信號消失,A19/S6~A16/S3引腳上輸出狀態(tài)信息S6~S3,指出當前正在使用的段寄存器及中斷允許情況。(5)低位地址線AD15~AD0進入高阻狀態(tài),為讀取數據作準備。(6)RD信號有效,送到所有的存儲器和I/O端口,但只選通地址有效的存儲單元和I/O端口,使之能讀出數據。
(7)這時,被選中的存儲單元和I/O端口將CPU所需要的數據送到總線上,供CPU讀取。
29T3狀態(tài):(8)T3狀態(tài)一開始,CPU采樣READY信號,若此信號為低電平,表示系統(tǒng)中所連接的存儲器或外設工作速度較慢,數據沒有準備好,要求CPU在T3和T4狀態(tài)之間再插入一個TW狀態(tài)。
(9)當READY信號有效時(為高電平),表示存儲單元和I/O端口將數據通過數據收發(fā)器8286送到數據總線AD15~AD0上,CPU可以讀取數據。這時CPU在T3周期結束時(即T3周期的下降沿),讀取數據。S4S3指出了當前訪問哪個段寄存器,若S4S3=10,表示訪問CS段,讀取的是指令,CPU將它送入指令隊列中等待執(zhí)行,否則讀取的是數據,送入ALU進行運算。
30TW狀態(tài):(10)CPU在每個TW狀態(tài)的前沿對READY信號采樣,若為低電平繼續(xù)插入Tw狀態(tài)。當在Tw狀態(tài)采樣到READY信號為高電平時,在當前Tw狀態(tài)執(zhí)行完,進入T4狀態(tài)。在最后一個Tw狀態(tài),數據肯定已出現在數據總線上,此時Tw狀態(tài)的動作與T。狀態(tài)一樣。CPU采樣數據線AD15~AD0。T4狀態(tài):CPU在T3與T4狀態(tài)的交界處采樣數據。然后在T4狀態(tài)的后半周期,數據從數據總線上撤除,各個控制信號和狀態(tài)信號線進入無效狀態(tài),總線收發(fā)器不工作,一個讀總線周期結束。
312.寫總線周期
328086/8088CPU寫總線周期時序與讀總線周期時序有許多相同之處。在T1狀態(tài),M/IO信號有效,指出CPU將數據寫入內存還是I/O端口;CPU給出寫入存儲單元或I/O端口的20位物理地址;地址鎖存信號ALE有效,選存儲體信號BHE,A0有效,DT/R變高平,表示本總線周期為寫周期。在T2狀態(tài),地址撤消,S6~S3狀態(tài)信號輸出;數據從CPU送到數據總線AD15~AD0,WR寫信號有效;DEN信號有效,作為數據總線收發(fā)器8286的選通信號。在T3狀態(tài),CPU采樣READY線,若READY信號無效,插入一個到幾個Tw狀態(tài),直到READY信號有效,存儲器或I/O設備從數據總線上取走數據。在T4狀態(tài),從數據總線上撤消數據,各控制信號和狀態(tài)信號線變成無效;DEN信號變成高電平,總線收發(fā)器不工作。
333.5.3
最大模式下的總線操作8086/8088CPU工作在最大模式時,增加了總線控制器8288,CPU向8288輸出狀態(tài)信號S2~S0,根據S2~S0的編碼,由8288輸出總線控制信號,如存儲器讀/寫信號,I/O端口讀/寫信號及中斷信號,因此在時序分析上要同時考慮CPU和總線控制器兩者產生的信號。 8086/8088CPU工作在最大模式時,一個總線周期一般同樣由T1、T2、T3、T4這4個時鐘周期構成,如果外設工作速度比較慢,則可以在T3周期之后插入等待周期TW。 8088CPU與8086CPU的時序上差異主要體現在總線寬度上,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)指令的尋址能力和數據存取及運算能力強
(3)具有處理多種類型數據的能力
(4)便于構成多處理機系統(tǒng)
35二、匯編語言的指令格式匯編語言指令的格式為:[標號]指令助憶符[[操作數1][,操作數2]][;注釋]其中[]方括號內的內容為可缺省的項。標號:代表該語句的存儲器首地址。指令助憶符:可為代表8086操作的115個指令助憶符之一。操作數:一個、兩個或沒有。有兩個操作數時,逗號前面的為目的操作數,逗號后面的為源操作數。以“;”開頭后跟的注釋是一個字符串。注釋的作用是便于閱讀、修改和調試程序,可有多行,但每行必須以“;”開頭。
36三、符號與標號1.符號符號就是字符串。
2.標號
標號代表某語句的存儲器首地址。當某指令(語句)為重復控制指令、條件轉移指令或無條件轉移指令的目的語句時,就應當使用標號。
四、常量與變量1.常量常量表示固定值,通常分為字面常量和符號常量。
2.變量
變量是存儲器中一個數據或多個數據(數據區(qū))的符號表示,變量指針總是指向數據區(qū)的第一個數據項,變量名的命名規(guī)則與符號的命名規(guī)則相同。
373.6.2
尋址方式
一、
操作數的種類和有效地址1.操作數的種類根據操作數的不同來源,將操作數分為這樣幾類:立即數、寄存器操作數、存儲器操作數及隱含的寄存器操作數。(1)立即數指操作數存放在指令代碼中,緊跟在操作碼之后,和指令的操作碼部分一起存放在代碼段中,稱此操作數為立即數。立即數可以是8位或16位,在指令中立即數只能為源操作數。如:MOV AX,100H指令中源操作數100H就為立即數。
38(2)寄存器操作數指寄存器中的內容或寄存器本身作為操作數,參加指令的運算或存放運算結果。如:ADD AX,BX指令中源操作數和目的操作數均為寄存器操作數,指令的功能為將寄存器AX和BX中的內容相加,和存入AX中。(3)存儲器操作數指內存的字節(jié)、字單元、雙字單元或其中的內容作為操作數參加指令的運算或存放運算結果。如:ADD AX,[BX]指令中源操作數[BX]為存儲器操作數,指內存數據段中偏移地址為BX寄存器中內容的字單元中的內容。存儲器操作數既可作為源操作數又可作為目的操作數。39(4)隱含的寄存器操作數指令中沒有給出操作數,但實際上隱含使用了某些指定的寄存器或段寄存器。如指令DAA為將AL寄存器中的內容進行十進制調整,指令中隱含使用了AL寄存器。又如CLC、STC進借位清零及置位指令隱含對標志寄存器的CF位操作,LDS指令隱含使用了DS段寄存器。
2.有效地址EA尋訪存儲器操作數所需的偏移地址即為有效地址,簡稱EA。EA是一個16位的無符號數,代表被尋址的存儲器操作數在存儲器中的位置距該段起點(首單元)的字節(jié)數。40二、尋址方式8086/8088的尋址方式有7種:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、基址尋址、變址尋址及基變址尋址等。1.立即尋址操作數存放在指令中,緊跟在操作碼之后,它作為指令的操作數字段存放在代碼段中,這種尋址方式稱為立即尋址方式,操作數稱為立即數。
2.寄存器尋址操作數為寄存器操作數,在指令中給出了寄存器名。寄存器為8個16位的寄存器與8個8位的寄存器。413.直接尋址在直接尋址方式中,操作數的偏移地址直接包含在指令中,它存放在代碼段中指令操作碼的后面的操作數字段,而操作數在內存中。
圖3-20直接尋址方式示意圖段地址EA操作數指令42
4.寄存器間接尋址
在寄存器間接尋址方式中,存儲器操作數的偏移地址即有效地址EA,
可直接取自基址寄存器BX或BP或變址寄存器SI或DI,符號表示為:[BX]、[BP]、[SI]、[DI]。如果使用BX、SI、DI寄存器存放偏移地址,則存儲器操作數在數據段中;如果使用BP寄存器存放偏移地址,則存儲器操作數在堆棧段中。
5.基址尋址基址尋址中存儲器操作數的偏移地址為規(guī)定的基址寄存器的內容加上指令中給出的位移量?;芳拇嫫鳛锽X和BP。用BX作為基址寄存器,操作數在數據段中。用BP作為基址寄存器,操作數在堆棧段中。
圖3-23基址尋址方式示意圖段地址地址操作數基址寄存器位移量寄存器指令存儲器段寄存器EA436.變址尋址變址尋址中存儲器操作數的偏移地址為規(guī)定的變址寄存器的內容加上指令中給出的位移量。變址寄存器為SI和DI。變址尋址中通常操作數在數據段中,即操作數的段地址在DS段寄存器中。
7.基變址尋址
基變址尋址中存儲器操作數的偏移地址為規(guī)定的一個基址寄存器(BX或BP)和一個變址寄存器(SI或DI)的內容加上指令中給出的位移量。
圖3-25基變址尋址方式示意圖段地址變址值操作數基址寄存器變址寄存器位移量變址寄存器指令存儲器段寄存器EA基址值變址寄存器443.6.38086/8088指令系統(tǒng)中的常用指令8086/8088指令系統(tǒng)可分為五大類:數據傳送、算術運算、位操作、控制轉移、串操作等。
一、
數據傳送類指令數據傳送類指令負責把數據、地址或立即數傳送到寄存器或存儲單元中。所有的數據傳送指令在執(zhí)行時均不影響標志位。
存儲器寄存器立即數DS、ES、SSCS、圖3-26MOV指令的傳送方向示意圖451.數據傳送指令(MOV指令)指令格式:MOVDOPD,SOPD作用:把一個字節(jié)或一個字操作數從源傳送到目的地該指令有如下幾種形式:MOVREG,REGMOVREG16,SEGMOVREG,MEMMOVREG,IMMMOVMEM,REGMOVMEM,IMMMOVMEM16,SEGMOVSEG,REG16(除CS外)MOVSEG,MEM16(除CS外)
46使用時的注意事項:(1)不允許在兩個存儲單元之間傳送數據(數據串傳送指令除外);(2)段寄存器之間不允許傳送數據;(3)立即數和CS代碼段寄存器不能作為目的操作數;(4)操作數不能出現二義性,即存儲器操作數的類型必須明確。(5)兩操作數的類型必須匹配(一致)。(6)立即數不能直接送至段寄存器,需要利用通用器(如:AX、BX)中轉。
47例3-4指出下面指令的錯誤所在(1)MOVAL,BX ;兩操作數類型不一致(2)MOVAH,2589 ;兩操作數類型不一致(3)MOVCS,AX ;CS不能作為目的操作(4)MOV[SI],[BX] ;兩操作數不能同為存儲器操作數(5)MOVDS,2000H ;立即數不能直接送往段寄存器(6)MOV [BX],1 ;操作數出現二義性(不知是字節(jié)還是字)代碼段寄存器CS和指令指針I(yè)P的值,不能由用戶在程序中用MOV指令來改變。
482.地址傳送指令地址傳送指令主要有LEA、LDS及LES三條。(1)LEA指令指令格式:LEA REG16,MEM作用:
將存儲器操作數的偏移地址送入指定的16位寄存器REG16中。
(2)LDS指令指令格式:LDS REG16,MEM作用:
將雙字的存儲器操作數的前兩個存儲單元的內容送入指定的16位寄存器REG16中,后兩個存儲單元的內容送入DS寄存器中。
49(3)LES指令指令格式:LES REG16,MEM作用:
將雙字的存儲器操作數的前兩個存儲單元的內容送入指定的16位寄存器REG16中,后兩個存儲單元的內容送入ES寄存器中。即將地址指針的段地址送ES段寄存器,偏移地址送REG16。
3.交換指令指令格式:XCHGDOPD,SOPD作用:將一個字節(jié)或一個字的源操作數與目的操作數進行交換。DOPD和SOPD可為REGH或MEM操作數,但其中必須有一個為寄存器操作數,立即數和段寄存器不能作為XCHG指令的操作數。例如:XCHGAX,BXXCHG[BX],BL504.堆棧操作指令堆棧操作指令主要在PUSH、POP、PUSHF及POPF等4條。(1)PUSH指令指令格式:PUSHSOPD作用:將一個字的源操作數壓入棧頂。SOPD可為REG16、MEM16或SEG。執(zhí)行過程:①SP←SP-1;②(SP)←SOPDH;③SP←SP-1;④(SP)←SOPDL。結果:①(SP-1,SP-2)←SOPD;②
SP←SP-2。
51每執(zhí)行完一條PUSH指令,SP的值減2,如圖3-30所示。堆棧是以“先進后出”方式工作的一個存儲區(qū)域,它在內存的堆棧段中,它的一端固定一端活動,稱固定端為棧底,活動端為棧頂。堆棧的唯一出入口為棧頂,堆棧指針SP任何時候都指向棧頂,堆棧的最大容量為64KB,為了提高堆棧的訪問速度,堆棧的操作以字為單位進行。當堆棧為空時,棧底和棧頂重合,隨著入棧的內容的增加,棧頂的地址即SP的值減少,反之SP的值增加。
2000H1FFFH1FFEH1000H64KB堆棧段內存棧底SP堆棧段首地址設SS=1000H、SP=2000H地址的伸展方向堆棧的伸展方向1FFDH1FFCH圖3-30堆棧示意圖52(2)POP指令指令格式:POPDOPD 作用:把棧頂所指的一個字數據送到DOPD中,同時SP加2,即將棧頂的內容彈出到REG16、MEM16或除CS外的段寄存器中。執(zhí)行過程:①DOPDL
←(SP);②SP←SP+1;③DOPDH
←(SP);④SP←SP+1。結果: ①(DOPD)←(SP,SP+1);②SP←SP+2。(3)PUSHF指令指令格式:PUSHF 作用:把標志寄存器中的內容壓入堆棧保存,同時堆棧指針SP減2。
即:(SP-1,SP-2)←FLAG,
SP←SP-2。
53(4)POPF指令指令格式:POPF作用:將棧頂的內容彈出到標志寄存器中,同時堆棧指針SP加2。
即:FLAG←(SP,SP+1),SP←SP+2545.輸入/輸出指令輸入/輸出指令共有兩條,即:IN指令與OUT指令。(1)IN指令指令格式:①IN AL,端口地址;AL←8位端口的字節(jié)內容
②IN AX,端口地址;AX ←兩個8位端口的字內容
③IN AL,DX ;AL←端口地址為DX中內容的端口的字節(jié)內容
④IN AX,DX;AX←端口地址為DX中內容的兩端口的字內容作用:從一個端口輸入一個字節(jié)或字到累加器AL或AX中。
55(2)OUT指令指令格式:①OUT端口地址,AL
②OUT端口地址,AX
③OUT DX,AL
④OUT DX,AX作用:通過累加器AL或AX送一個字節(jié)或字到外設端口。IBMPC機中,所有I/O端口與CPU之間的通信由IN和OUT指令來完成。
566.標志寄存器傳送指令該類指令主要有兩條,即LAHF指令與SAHF指令。(1)LAHF指令指令格式:LAHF作用:將標志寄存器低八位的內容送入AH寄存器中,即:AH ←FLAGL。該指令不影響標志位。(2)SAHF指令指令格式:SAHF作用:將AH寄存器的內容送入標志寄存器低八位中,即:FLAGL
←AH。該指令執(zhí)行時將影響標志位。
57二、算術運算類指令8086/8088CPU可進行8位、16位(字節(jié)、字)的四種算術運算,即加、減、乘、除。參加運算的數據可以是無符號或有符號的,無符號的加、減運算,標志位CF為1表示運算結果溢出,有符號的加、減運算,標志位OF為1表示運算結果溢出。參加算術運算或邏輯運算的寄存器有: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指令對應的五種形式,它與ADD指令的唯一區(qū)別是加上了進借位CF;ADD,ADC指令執(zhí)行結果影響狀態(tài)標志位CF、OF、PF、ZF、SF、AF;ADD、ADC指令中源操作數和目的操作數不允許同時為存儲器操作數,兩操作數的類型必須一致;在進行多字節(jié)數據的加法時需要使用ADC指令,如果低字節(jié)(字)相加產生進位位,則在高字節(jié)(字)相加時將此進位位加進去。
59(3)INC指令指令格式:INC SDOPD;SDOPD←SDOPD+1INC指令執(zhí)行后不影響CF,但對其余狀態(tài)標志位的影響同ADD指令,INC指令的操作數SDOPD只能為REG或MEM,使用存儲器操作數時必須指明其類型是字節(jié)還是字??捎媒馕霾僮鞣鸓TR說明存儲器操作數的類型,其格式為:類型PTR地址表達式指令中類型可為:BYTE(字節(jié))、WORD(字)及DWORD(雙字,用在JMP指令中)如:ADDBYTEPTR[BX+2],1;目的操作數的類型為字節(jié)(單元)
60例3-13現有DS=2000H,BX=0100H,SI=0002H,內存20100H—20103H單元中的內容分別為:12H、34H、56H、78H,內存21200H—21203H單元中的內容分別為:2AH、4CH、87H、65H試說明下列各條指令執(zhí)行完后AX寄存器的內容? 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下列程序將BX(存放的是無符號數)乘以10,結果存儲到字節(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é)或字);無符號數的乘法指令字節(jié)乘法: AX ←ALSOPD字節(jié)
字乘法: DX:AX←AXSOPD字
(2)IMUL SOPD;有符號數乘法指令有符號數乘法指令與MUL相類似,但其參加乘法運算的兩操作數必須為有符號的操作數。若乘積的高半部分不是結果的低半部分的符號擴展,則CF和OF置“1”,表示AH或DX含有結果的有效數字。
654.除法指令8086/8088規(guī)定除數必須為被除數的一半字長。
(1)DIV SOPD(字節(jié)或字);無符號數除法無符號數字節(jié)除法前,將AH清0,被除數隱含在AX寄存器中,除得的商,存放在AL中,余數存放在AH中;字除法前將DX清0,除得的商,存放在AX中,余數存放在DX中。若除數為零,則產生0類型的中斷。
(2)IDIV SOPD(字節(jié)或字);有符號數除法有符號數除法指令IDIV和DIV指令類似,差別就是IDIV指令在執(zhí)行時將被除數和除數都看成是有符號數,商和余數也均為帶符號數。
66三、位操作指令位操作指令的功能是對8位或16位的寄存器或存儲單元的內容,按位進行邏輯運算或移位操作。位操作指令有三組:邏輯運算指令、移位指令和循環(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é)或字的各位可以進行算術或邏輯移位,移動的數位由移位指令中給出的的計數值確定。若移位次數為1,可將立即數1直接作為指令中的操作數,若移位的次數超過1次,則必須先將移位的次數放入CL寄存器中。邏輯移位指令實際上是將操作數當作無符號數來進行移位,所以右移時最高位添0;算術移位時,將操作數當作有符號數來處理,故右移時保持最高位不變。移位指令可以實現二進制乘以2的整數冪運算。移位指令有四條:邏輯左移SHL、邏輯右移SHR、算術左移SAL、算術右移SAR。(1)左移指令左移指令有兩條,即邏輯左移SHL指令與算術左移SAL指令。指令格式:①SHLDSOPD,COUNT ;邏輯左移②SALDSOPD,COUNT ;算術左移
69(2)右移指令右移指令亦有兩條,即邏輯右移SHR指令與算術右移SAR指令。指令格式:①SHRDSOPD,COUNT ;邏輯右移②SARDSOPD,COUNT ;算術右移
3.循環(huán)移位指令字節(jié)或字中的各位可以進行帶進位或不帶進位的循環(huán)移位。與算術或邏輯移位不同,循環(huán)移位時移出操作數的位并不丟失,而是循環(huán)送回操作數的另一端。循環(huán)移位的指令格式以及移位計數值的規(guī)定同移位指令。移動的位數為1直接給出,超過1位,則必須在CL中指定。循環(huán)移位指令中DSOPD可為16位或8位的寄存器操作數或存儲器操作數,COUNT為循環(huán)次數。循環(huán)移位指令共有4條。
70(1)ROL指令指令格式:ROLDSOPD,COUNTROL指令對操作數進行循環(huán)左移,將最高位移入標志位CF,同時將最高位移入操作數的最低位。故ROL指令又稱不帶進位位循環(huán)左移指令。(2)ROR指令指令格式:RORDSOPD,COUNTROR指令對操作數進行循環(huán)右移,將最低位移入標志位CF,同時將最低位移入操作數的最高位。故ROR指令又稱不帶進位位循環(huán)右移指令。
71(3)RCL指令指令格式:RCLDSOPD,COUNTRCL指令把進借位標志CF包含在循環(huán)中進行循環(huán)左移位,每執(zhí)行循環(huán)移位指令一次,將操作數的最高位移入標志位CF中,同時將CF中原來的內容送入操作數的最低位。故RCL指令又稱帶進位位循環(huán)左移指令。(4)RCR指令指令格式:RCRDSOPD,COUNTRCR指令把進借位標志CF包含在循環(huán)中進行循環(huán)右移位,每執(zhí)行循環(huán)移位指令一次,將操作數的最低位移入標志位CF中,同時將CF中原來的內容送入操作數的最高位。故RCR指令又稱帶進位位循環(huán)右移指令。
上述四條循環(huán)移位指令執(zhí)行后都影響標志位CF、OF,對其他標志位無影響。
72四、控制轉移類指令通常指令是順序地逐條執(zhí)行的,但實際上程序不可能總是順序執(zhí)行,而經常需要改變程序的執(zhí)行流程,控制轉移類指令就是用來改變程序的執(zhí)行流程的??刂妻D移類指令包括:無條件轉移指令和條件轉移指令;循環(huán)控制指令;子程序調用和返回指令;中斷指令和中斷返回指令。1.無條件轉移指令JMP
無條件轉移指令必須指定轉移的目標地址,該指令可將程序無條件轉移到目標地址開始的指令。無條件轉移可分為兩大類:段內轉移和段間轉移。段內轉移是指在同一段的范圍內進行轉移,只要改變IP的值即可實現段內轉移;段間轉移是要將程序的執(zhí)行轉到另一個段去執(zhí)行,此時不僅要修改IP的值,還要修改CS的值才能實現段間轉移。
73(1)段內直接轉移指令1)JMPSHORTOPRD ;段內直接短轉移功能:IP←IP+8位的位移量2)JMP NEARPTROPRD ;段內直接近轉移
功能:IP←IP+16位的位移量
(2)段內間接轉移指令JMP WORDPTROPRD;IP←(EA)指令將以EA為有效地址的存儲字單元的內容送入IP中,有效地址EA的值由操作數OPRD的尋址方式決定,OPRD的尋址方式可為除立即尋址外的其它尋址方式
74(3)段間直接轉移指令JMP FARPTROPRD;IP←OPRD的偏移地址,CS←OPRD所在段的段地址。指令的操作數是一個FAR型的標號,即該標號在另外一個代碼段。(4)段間間接轉移指令JMP DWORDPTROPRD;IP←(EA),CS←(EA+2)。指令的操作數為一個32位的存儲器操作數(地址指針),EA由OPRD的尋址方式決定。
752.條件轉移指令條件轉移指令是根據執(zhí)行該指令前有關標志位的狀態(tài)來決定程序的執(zhí)行是否發(fā)生控制轉移的指令,條件轉移指令的執(zhí)行分為兩個過程:首先測試規(guī)定的條件,然后根據測試的結果決定程序的轉向,若滿足條件則轉移到目標地址,否則程序順序執(zhí)行。條件轉移指令只有一個操作數,用以指明轉移的目標地址。條件轉移指令的操作數必須是一個短標號,即所有的條件轉移指令都是段內直接短轉移,指令的字節(jié)數為2個字節(jié),條件轉移指令的下一條指令與目標地址之間的距離在-128~+127之內。在執(zhí)行條件轉移指令時,若滿足規(guī)定的條件,IP的值改為原來IP值加上符號擴展到16位后的偏移量。所有的條件轉移指令都不影響狀態(tài)標志位
763.重復控制指令8086/8088中專門設計了重復(循環(huán))控制指令用于使一些程序段重復執(zhí)行,形成循環(huán)程序。在循環(huán)控制指令中都隱含使用了CX循環(huán)計數器,與條件轉移指令一樣,所有的重復(循環(huán))控制指令都為段內短轉移,指令執(zhí)行后對狀態(tài)標志位無影響。(1)LOOP循環(huán)指令指令格式:LOOP短標號其意義是:CX←CX-1,然后判斷CX是否等于0,若CX≠0,則轉移至短標號處執(zhí)行;否則順序執(zhí)行。在使用LOOP指令之前必須先將循環(huán)次數送入CX中。選擇當型的循環(huán)程序結構,且將CX初值置為1,則可實現“0”次循環(huán)。77(2)LOOPE/LOOPZ(等于或為零)循環(huán)指令指令格式:LOOPZ 短標號或LOOPE短標號其意義是先將CX←CX-1,然后判斷是否有CX≠0且ZF=1,有則轉移至短標號處執(zhí)行;否則(即CX=0或ZF=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024批次環(huán)保型包裝產品購銷協議總覽
- 2024年連鎖餐館加盟經營合同版
- 2024年度運動場地租賃合同(含賽事門票銷售)3篇
- 2025版酒店客房承包經營與品牌授權協議3篇
- 2024年突發(fā)事件應急預案制定合同
- 2025年度KTV員工薪酬福利體系設計合同3篇
- 2025年度三人共同投資的教育培訓合作協議3篇
- 2024年金融機構首席風險官聘用及風險管理合同3篇
- 2024年股權轉讓合同:具體條款
- 2024年財務困境解決合同3篇
- 石油形成過程科普知識講座
- 輔警心理健康知識講座
- 《棗樹常見病蟲害》課件
- 刑法試題庫大全
- 燃氣安裝人員管理制度
- 省份簡稱課件
- 公民科學素質調查問卷
- 小學健康教育試題-及答案
- 鋼構件應力超聲檢測技術規(guī)程
- -《多軸數控加工及工藝》(第二版)教案
- 體 育 課 教 學 評 價 量 表
評論
0/150
提交評論