




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章從8088/8086的指令格式入手,論述:立即數尋址方式寄存器尋址方式存儲器尋址方式進而熟悉8088/8086匯編語言指令格式,尤其是其中操作數的表達方法為展開8088/8086指令系統做好準備第三章指令系統-教學重點
指令:是計算機用以控制各部件協調動作的命令;
指令系統:CPU可執行的指令的集合;機器指令:是CPU僅能識別的指令的二進制代碼,也稱機器碼第一節指令的基本格式操作碼說明計算機要執行哪種操作,如傳送、運算、移位、跳轉等操作,它是指令中不可缺少的組成部分操作數是指令執行的參與者,即各種操作的對象有些指令不需要操作數,通常的指令都有一個或兩個操作數,也有個別指令有3個甚至4個操作數操作碼操作數指令由操作碼和操作數兩部分組成8086/8088符號指令的書寫格式標號后面必須跟冒號,它可缺省。指令是指令功能的代表符號,它是指令語句的關鍵字,不可缺省。操作數是參加本操作的數據。注釋是必須以“;”開頭的說明部分,可以用英文或中文,注釋允許缺省。[標號:]指令助記符操作數[;注釋]其中帶[]號的標號和注釋可以缺省第一節操作數類型8086/8088系統中的操作數根據存放的位置不同,可以分為三類:1.立即數操作數作為指令代碼的一部分出現在指令中。通常作為源操作數使用。可以是各進制數或一個可求出確定值的表達式。其尋址方式為立即數尋址。2.寄存器操作數是把操作數存放在CPU內部的寄存器中,用來參加運算或存放結果。書寫形式就是寄存器的名稱。其尋址方式為寄存器尋址。3.存儲器操作數這種操作數存放在內存儲器中。CPU對存儲器操作數進行操作時,指令中提供操作數在存儲器中存放的地址。其尋址方式為存儲器尋址。4.I/O端口操作數這種操作數放在I/O接口的端口中,CPU通過I/O接口與輸入輸出設備交換信息。其尋址方式為I/O尋址。第一節操作數類型第二節操作數的尋址方式指令系統設計了多種操作數的來源尋找操作數地址的過程稱為尋址尋找操作數存放地址的各種方式叫做尋址方式理解操作數的尋址方式是理解指令功能的前提操作數采取哪一種尋址方式一方面,會影響處理器執行指令的速度和效率另一方面,對程序設計也很重要注意:一條指令一般都有源操作數和目的操作數,要說明一條指令為何種尋址方式,應就源操作數和目的操作數分別加以說明。MOV指令1.立即數尋址方式指令中的操作數直接存放在機器代碼中,緊跟在操作碼之后(操作數作為指令的一部分存放在操作碼之后的主存單元中)這種操作數被稱為立即數imm可以是8位數值i8(00H~FFH)也可以是16位數值i16(0000H~FFFFH)立即數尋址方式常用來給寄存器和存儲單元賦值,多以常量形式出現演示MOVAX,0102H ;AX←0102HMOVAL,80H;AL←80H特點及注意事項執行速度快:操作數是直接從指令中取得立即數只能作源操作數,不能作目的操作數主要用來給寄存器或存儲器賦初值8位立即數可裝入8位或16位寄存器,16位立即數只能裝入16位寄存器。例如:MOVAL,14H和MOVAX,14H合法,而MOVAL,1234H或MOVBL,123H是錯誤的。2.寄存器尋址方式操作數存放在CPU的內部寄存器reg中:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4個段寄存器seg:CS、DS、SS、ES寄存器名表示其內容(操作數)演示MOVAX,BX;AX←BX2.寄存器尋址方式執行速度快:因操作數就在CPU內部源操作數和目的操作數都可使用寄存器尋址注意:源操作數的長度必須與目的操作數一致,否則會出錯。例如:MOVCX,AH
×
盡管CX寄存器放得下AH的內容,但匯編程序不知道將它放到CH還是CL。特點3.I/O端口尋址(輸入輸出指令中講解)操作數存放在I/O端口中直接端口尋址
INAL,50H;將50H端口的字節數輸入到ALINAX,60H;將60H和61H兩個相鄰端口的16位數據輸入到AXDX寄存器間接端口尋址
MOVDX,383HOUTDX,ALMOVDX,380HINAX,DX4.存儲器尋址方式一條指令中,最多只能有一個存儲器操作數,或者是源操作數,或者是目的操作數存儲器尋址方式共有24種,按EA的計算方法不同又可分為以下幾種:1、直接尋址方式2、寄存器間接尋址方式3、寄存器相對尋址方式4、基址變址尋址方式5、相對基址變址尋址方式存儲器尋址的指令,其操作數總是在代碼段之外的數據段、堆棧段或附加段的存儲器中,指令給出的是操作數尋址信息(邏輯地址)16第3章:(1)直接尋址方式直接尋址方式的有效地址在指令中直接給出默認的段地址在DS段寄存器,可使用段超越前綴改變,因此,段地址默認的情況下,物理地址PA=DS×10H+EA指令中有效地址可以用數值或符號表示,數值必須加一個方括號,以便與立即數相區別演示MOVAX,[2000H] ;AX←DS:[2000H]MOVAX,ES:[2000H] ;AX←ES:[2000H]第3章:(1)直接尋址方式如果要對代碼段、堆棧段或附加段寄存器所指出的存儲區進行直接尋址,應在指令中加段超越前綴。例如:數據若存放在附加段中,則應在有效地址前加“ES:”,這里的冒號稱為修改屬性運算符,計算物理地址時要用ES作段地址,而不再是默認值DS。MOVAX,ES:[2000H] ;該指令的源操作數物理地址:PA=ES×10H+2000H第3章:(1)直接尋址方式在匯編語言中還允許用符號地址代替數值地址,實際上就是給存儲單元取一個名字,這樣,如果要與這些單元打交道,只要使用其名字就可以了,而不必記住具體數值是多少。MOVAX,DATA1第3章:(2)寄存器間接尋址方式①
操作數放在存儲器中,操作數的有效地址EA存放在指令指明的寄存器中。寄存器可以是BX、SI、DI、BP其中之一。指令中指定的寄存器是BX、DI或SI,則操作數在當前DS數據段中,其操作數的物理地址是:
PA=DS×10H+演示MOVAX,[BX] ;AX←DS:[BX]BXSIDI第3章:(2)寄存器間接尋址方式②
指令中若指明BP為間址寄存器,則操作數在堆棧段中。此時,用SS寄存器內容作段地址,操作數的實際地址PA=SS×10H+BPMOVAX,[BP] ;AX←SS:[BP]若在指令中規定是段超越的,則BP的內容也可以與其它的段寄存器相加,形成操作數地址。MOVAX,DS:[BP] ;AX←DS:[BP]演示第3章:(3)寄存器相對尋址方式指定BX,BP,SI,DI的內容進行的是間接尋址。但是,和寄存器間接尋址方式不同的是:指令中還要指定一個8位或16位的位移量DISP,操作數的有效地址EA則等于間址寄存器內容和位移量之和,結果按16位歸算。寄存器間接尋址寄存器相對尋址第3章:(3)寄存器相對尋址方式對于寄存器為BX,SI,DI的情況,用段寄存器DS的內容作段首址;而對于寄存器BP,則使用段寄存器SS的內容作段首址。操作數的實際地址為:第3章:(3)寄存器相對尋址方式演示MOVAX,[SI+06H] ;AX←DS:[SI+06H]MOVAX,06H[SI] ;AX←DS:[SI+06H]采用寄存器相對尋址的指令,也可使用段超越前綴。第3章:(4)基址變址尋址方式通常將BX和BP看作基址寄存器,將SI、DI看作變址寄存器。在基址變址尋址方式中存儲器操作數的有效地址EA由指令指定的一個基址寄存器和一個變址寄存器的內容之和確定。第3章:(4)基址變址尋址方式基址在BX,段寄存器使用DS;基址在BP中,段寄存器使用SS。第3章:(4)基址變址尋址方式演示MOVAX,[BX+SI] ;AX←DS:[BX+SI]MOVAX,[BX][SI] ;AX←DS:[BX+SI]采用基址變址尋址的指令,也可使用段超越前綴PA計算公式中,BX可與SI或DI組合,BP也可與SI或DI組合,但BX不可與BP組合第3章:(5)相對基址變址尋址方式操作數的有效地址EA是由指令指定的一個基址寄存器和一個變址寄存器的內容再加上8位或16位位移量之和。第3章:(5)相對基址變址尋址方式對應BX基址寄存器默認是DS,對應BP基址寄存器默認是SS;可用段超越前綴改變。演示MOVAX,[BX+DI+6] ;AX←DS:[BX+DI+6]MOVAX,6[BX+DI]MOVAX,6[BX][DI]第3章:存儲器尋址方式中的變量變量指示內存中的數據,變量名具有地址屬性。存儲器尋找方式中經常采用變量形式變量的定義WVARDW1234H;定義16位變量WVAR,具有初值1234H;假設其偏移地址為10H單獨引用變量名是直接尋址方式MOVAX,WVAR;指令功能:AX=1234H;等同于MOVAX,[0010H]第3章:相對尋址方式中的位移量在寄存器相對和相對基址加變址尋址方式中,其位移量不僅可用常量表示,也可用符號表示這個符號可以是變量名,例如WVAR變量,而且支持多種表達形式MOVAX,[DI+WVAR]
;等同于MOVAX,WVAR[DI]MOVAX,[BX+SI+WVAR]
;等同于MOVAX,WVAR[BX+SI]
;等同于MOVAX,WVAR[BX][SI]對尋址方式作一總結對尋址方式作一總結對尋址方式作一總結對尋址方式作一總結例題:分別指出下列指令中源操作數和目的操作數的尋址方式。若是存儲器尋址,試用表達式表示出EA=?,PA=?(1)MOVSI,2100H(2)MOV[SI],AX(3)MOVAX,ES:[BX](4)MOVAX,[BX+SI+20H](5)MOVCX,DISP[BX]例題2:一些寄存器的內容和一些存儲單元的內容如下圖所示。試指出下列各條指令執行后,AX中的內容。(1)MOVAX,2010H(2)MOVAX,[1200H](3)MOVAX,1100H[BX](4)MOVAX,1100H[BX+SI]0100H0002H3000HBXSIDSCPU12H34H56H78H︰
2AH4CHB7H65H31100H31101H31102H31103H31200H31201H31202H31203HM1.以下指令中,設執行前:DS=3000H,BX=0600H,SI=00B0H,ES=2000H,SS=1000H,CS=3500H,BP=0050H。(1)執行指令MOVAX,BX后,AX=()H,BX=()H,該指令的源操作數是()尋址方式。(2)執行指令ADDAX,[BX][SI],其源操作數物理地址為()H,源操作數是()尋址方式。復習題2.80X86微處理器的尋址方式有_______、_____、________和________四種。3.根據以下要求用一條指令寫出相應的操作:(1)用寄存器BX間接尋址2000H內存單元,并將2000H單元的內容傳送至AX寄存器中。(2)用寄存器BX和SI的基址變址尋址方式把存儲器中的一個字傳送至AX寄存器中。
MOV指令的功能立即數尋址方式寄存器尋址方式直接尋址方式間接尋址方式相對尋址方式基址變址尋址方式相對基址變址尋址方式總結一、指令的基本格式二、尋址方式作業習題3-1、習題3-31.寄存器間接尋址方式中,操作數在()中。
8086/8088CPU指令系統的操作數的來源有()、()、()、()。3.
習題下列三條指令語句中,()是錯誤的。A.MOVAX,[SI][DI]B.MOVAX,200HC.MOVAX,ARRAY[SI+2]
4.
若(CS)=5200H時,物理地址為5A238H,那么(CS)變成7800H時,物理地址為多少?
5.設(BX)=637DH,(SI)=2A9BH,位移量=0C237H,(DS)=3100H,求下列尋址方式產生的有效地址和物理地址:(1)直接尋址;(2)用BX的寄存器間接尋址;(3)用BX的寄存器相對尋址;
(4)用BX和SI的基址變址尋址;(5)用BX和SI的基址變址且相對尋址7.將左邊的詞匯和右邊的說明聯系起來,括號內填入所選的A、B、C、D等。(1)EU()A總線接口部件,實現執行部件所需要的所有總線操作(2)BIU()B唯一代表存儲器空間中的每個字節單元的地址(3)堆棧()C保存當前棧頂偏移地址的寄存器(4)SP()D以后進先出方式工作的存儲空間(5)物理地址()E執行部件,由算術邏輯單元(ALU)和寄存器等組成第三節8086/8088指令系統8086/8088指令系統包含133條基本指令。這些指令與尋址方式組合,再加上不同的數據形式——有的為字處理,有的為字節處理,可構成上千種指令。這些指令按功能可分為六類:①數據傳送類②算術運算類③邏輯運算與移位類④串操作類⑤控制轉移類⑥處理器控制類第三節8086/8088指令系統實現CPU內部寄存器之間、CPU和存儲器之間以及CPU和I/O端口之間的數據傳送。3.1數據傳送類指令功能特點含兩個操作數;除SAHF和POPF指令外,數據傳送指令不影響標志寄存器的內容重點掌握MOVXCHGPUSHPOPLEA1.通用數據傳送指令提供方便靈活的通用傳送操作有4條指令MOVPUSHPOPXCHGMOVXCHGPUSHPOP(1)傳送指令MOV(move)指令格式:MOVdst,src;src→dst把一個字節或字的操作數從源地址傳送至目的地址MOVreg/mem,imm;立即數送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存演示MOV指令--立即數傳送MOVCL,’A’ ;CL←41H,字節傳送MOVDX,0FFH
;DX←00FFH,字傳送MOVSI,200H
;SI←0200H,字傳送MOVBVAR,0AH
;字節傳送;假設BVAR是一個字節變量,定義如下:BVARDB0MOVWVAR,0BH
;字傳送;假設WVAR是一個字變量,定義如下:WVARDW0明確指令是字節操作還是字操作以字母開頭的常數要有前導0MOV指令--寄存器傳送MOVAH,AL ;AH←AL,字節傳送MOVBVAR,CH ;BVAR←CH,字節傳送MOVAX,BX ;AX←BX,字傳送MOVDS,AX ;DS←AX,字傳送MOV[BX],AL ;[BX]←AL,字節傳送
寄存器具有明確的字節和字類型MOV指令--存儲器傳送MOVAL,[BX] ;AL←DS:[BX]MOVDX,[BP] ;DX←SS:[BP+0]MOVDX,[BP+4] ;DX←SS:[BP+4]MOVES,[SI] ;ES←DS:[SI]
不存在存儲器向存儲器的傳送指令MOV指令--段寄存器傳送MOV[SI],DSMOVAX,DS
;AX←DSMOVES,AX ;ES←AX←DS
對段寄存器的操作不靈活例1:請指出下列指令中的錯誤。(1)MOVAH,400H(2)MOVDS,2000H(3)MOV[BX],[SI]MOV指令傳送功能圖解MOV指令也并非任意傳送!立即數段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存儲器
非法指令的主要現象:兩個操作數的類型不一致無法確定是字節量還是字量操作兩個操作數都是存儲器段寄存器之間直接傳送數據立即數作為目的操作數CS和IP作為目的操作數向段寄存器送立即數非法指令--兩個操作數類型不一致在絕大多數雙操作數指令中,目的操作數和源操作數必須具有一致的數據類型,或者同為字量,或者同為字節量,否則為非法指令
MOVAL,050AH ;非法指令,
MOVSI,DL ;非法指令,
修正:;MOVAX,050AH
修正: ;MOVDH,0
;MOVSI,DX非法指令--無法確定是字節量還是字量操作當無法通過任一個操作數確定是何種操作類型時,需要利用匯編語言的操作符顯式指明
MOV[BX+SI],255 ;非法指令,修正: ;MOVBYTEPTR[BX+SI],255
;BYTEPTR說明是字節操作 ;MOVWORDPTR[BX+SI],255
;WORDPTR說明是字操作非法指令--兩個操作數都是存儲器8086指令系統除串操作指令外,不允許兩個操作數都是存儲單元(存儲器操作數)
MOVBUF2,BUF1 ;非法指令,修正:
;假設BUF2和BUF1是兩個字變量
;MOVAX,BUF1
;MOVBUF2,AX
;假設BUF2和BUF1是兩個字節變量
;MOVAL,BUF1
;MOVBUF2,AL非法指令--段寄存器的操作有一些限制8086指令系統中,能直接對段寄存器操作的指令只有MOV等個別傳送指令,并且不靈活
MOVDS,ES ;非法指令,修正: ;MOVAX,ES
;MOVDS,AX MOVDS,100H ;非法指令,修正: ;MOVAX,100H
;MOVDS,AX
MOVCS,[SI] ;非法指令
一般數據傳送指令例子判斷下列指令的正確性:MOVAL,BXMOVAX,[SI]05HMOV[BX][BP],BXMOVDS,1000HMOVDX,09HMOV[1200],[SI]作業講評:P1123.(DS)=2000H,(BX)=0100H,(AX)=1200H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,
(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H.
試說明下列各指令單獨執行后相關寄存器或存儲單元的內容。(1)MOVAX,1800H(2)MOVAX,BX(3)MOVBX,[1200H](4)MOVDX,1100[BX](5)MOV[BX][SI],AL(6)MOVAX,1100[BX][SI](2)交換指令XCHG(exchange)指令格式:XCHGdst,src;dstsrc實現CPU內部寄存器之間或內部寄存器與存儲器之間的內容交換,不影響標志寄存器。XCHGreg,reg/mem;regreg/mem演示例:數據交換MOVAX,1199H ;AX=1199HXCHGAH,AL
;等同于XCHGAL,AHMOVWVAR,5566H ;WVAR是一個字量變量XCHGAX,WVAR
;等同于XCHGWVAR,AX
XCHGAL,BYTEPTRWVAR+1
;“BYTEPTRWVAR+1”強制為字節量,只取高字節與AL類型交換,否則數據類型不匹配;AX=9911H;AX=5566H,WVAR=9911H;AX=5599H,WVAR=6611H使用XCHG指令時應注意:dst和src不能同時為存儲器操作數;任一個操作數都不能使用段寄存器和IP,也不能使用立即數。堆棧的引入以三層子程序嵌套為例,逐級進入子程序時,A、B、C三點都有斷點和現場需要保護,順序為A→B→C;當子程序sub3執行結束,逐級返回時,最后被保護的C點數據應最先恢復,最先保護的A點數據應最后恢復。為此,通常在內存中開辟一段區域,結合軟硬件技術,使其具有保護數據和后進先出的功能。ABCmainsub1sub2sub3(3)堆棧操作指令堆棧以“后進先出”或“先進后出”的原則存取信息存取地址由一個專門的地址寄存器SP來管理堆棧段段基址由SS提供,偏移地址由SP提供棧頂:堆棧指針始終指向堆棧中最后存入信息的那個單元,稱該單元為棧頂。棧底:在信息的存與取的過程中,棧頂是不斷移動的,也稱它為堆棧區的動端,而堆棧區的另端則是固定不變的,這端我們又稱其為棧底。
棧底0010H00FFH00FEH00FDHSP0000H初始化堆棧:堆棧只有兩種基本操作:進棧和出棧,對應兩條指令PUSH和POP進棧指令PUSH指令格式:PUSHsrcSP-1→SP,srcH→(SP),SP-1→SP,srcL→(SP)該指令不影響標志寄存器。PUSHr16/m16/seg
;SP←SP-2
;SS:[SP]←r16/m16/seg演示例如:PUSHAXPUSH[2000H] PUSHCSMOVSS,1050HMOVSP,000EHPUSHAX(設AX=1234H)PUSHBX(設BX=5CF8H)例題:出棧指令POP指令格式:POPdst(SP)→dstL,SP+1→SP,(SP)→dstH,SP+1→SP該指令不影響標志寄存器。POPr16/m16/seg
;r16/m16/seg←SS:[SP]
;SP←SP+2POPBXPOP[2000H]POPDS演示堆棧操作注意事項:堆棧操作的單位是字,進棧和出棧只針對字量字量數據從棧頂壓入和彈出時,都是低地址字節送低字節,高地址字節送高字節CS寄存器可進棧,但不能隨意彈出一個數據到CS堆棧容量有限,因此進棧和出棧要成對出現,否則將有數據殘留在堆棧中,時間一長,堆棧會滿的!進棧和出棧指令用于程序保存或恢復數據或中斷時保護現場和恢復現場。輸入/輸出(I/O)指令執行輸入指令時,CPU可以從一個8位端口讀入1個字節到AL中,也可以從兩個連續的8位端口讀1個字到AX中。例:INAL,50H;INAX,70H將50H端口的字節讀入AL將70H、71H兩端口的值讀入AX2.輸入/輸出指令(累加器專用傳送指令)2.輸入/輸出指令(累加器專用傳送指令)(1)輸入指令INAL,PORT;將port端口字節數據輸入到ALINAX,PORT;將port和port+1兩端口的內容輸入到AX,其中port的內容輸入到AL,port+1的內容輸入到AHINAL,DX;從DX所指的端口中輸入一字節到ALINAX,DX;從DX和DX+1所指的兩個端口輸一個字到AX,低地址端口的值輸到AL,高地址端口的值輸到AH直接端口尋址DX寄存器間接端口尋址I/O尋址(2)輸出指令OUTPORT,AL;將AL中的一個字節數據輸出到PORT端口OUTPORT,AX;將AX中的字數據輸出到PORT和PORT+1兩端口OUTDX,AL;將AL中的字節輸出到DX所指的端口OUTDX,AX;將AL中低位字節輸出到DX所指的端口,同時將AH中的高位字節輸出到DX+1所指的端口例:從端口2F0H輸入數據的程序段為:MOVDX,02F0HINAX,DX8086的地址——目標傳送指令是用來對尋址機構進行控制的。此類指令傳送到16位目標寄存器中的是存儲器操作數的地址,而不是它的內容。3.地址——目標傳送指令這類指令有3條:LEALDSLES將存儲器操作數的有效地址送至指定的16位通用寄存器(1)有效地址送寄存器(LEA)指令LEAr16,src;src的EA→r16例:
MOVBX,400H MOVSI,3CH LEABX,[BX+SI+0F62H]
;BX←400H+3CH+0F62H=139EH例:地址傳送與內容傳送WVARDW4142H ;假設偏移地址為04H…MOVAX,WVAR
;內容傳送:AX=4142HLEASI,WVAR
;地址傳送:SI=0004H;等同于LEASI,[0004H]MOVCX,[SI] ;內容傳送:CX=4142HMOVDI,OFFSETWVAR
;=MOVDI,0004H
;利用操作符OFFSET獲取變量的有效地址MOVDX,[DI] ;內容傳送:DX=4142H該指令完成一個32位地址指針的傳送。地址指針包括段地址和偏移量部分。指令把源操作數src指定的4個字節地址指針傳送到兩個目標寄存器。(2)數據段指針送寄存器LDS指令LDSr16,src;其中,地址指針的前2個字節(低地址中的字)傳到某一寄存器r16(通常為SI),后2個字節(高地址中的字)傳到DS中。例:LDSSI,[2100]在指令執行前,設(DS)=3000H,在DS段中,有效地址EA為2100~2103H的4個字節,其中存放著一個地址指針,如圖所示,則指令執行后,SI=0140H,DS=2000H該指令和LDSr16,src功能類似,不同的只是用ES代替DS,這時常指定DI作寄存器r16。(3)附加段指針送寄存器LES指令LESr16,src;其中,地址指針的前2個字節傳到某一寄存器R16中,后2個字節傳到ES中。使用LDS和LES指令時應注意:R16不能使用段寄存器Src一定是存儲器操作數,其尋址方式可以是以前所學存儲器尋址中的一種
通過這些指令可以讀出當前標志寄存器中各狀態位的內容,也可以對各狀態位設置新的值。這類指令有4條。源操作數和目的操作數都隱含在操作碼中。4.標志傳送指令這類指令有4條:LAHFSAHFPUSHFPOPF(1)讀取標志指令(LAHF)LAHF;FL→AH,標志寄存器低8位送AH1514131211109876543210
OFDFIFTFSFZF
AF
PF
CFD7D6D4D2D0AH(2)設置標志指令(SAHF)SAHF;AH→FL,AH的內容送標志寄存器低8位1514131211109876543210
OFDFIFTFSFZF
AF
PF
CFD7D6D4D2D0AH(3)標志寄存器的入棧指令(PUSHF)和出棧指令(POPF)PUSHF;標志寄存器的內容入棧同時修改堆棧指針:(SP-2)→SP。POPF;將堆棧頂部的一個字彈出到標志寄存器,同時修改堆棧指針:(SP+2)→SP。這兩條指令分別可以用作在中斷服務程序和子程序的應用中,保存主程序的標志和恢復主程序的標志。MOV指令的功能XCHG指令的功能XLAT指令的功能PUSH指令的功能POP指令的功能LDS指令DS=3000H01H00H20H40HEA=2100H32100HSIDS總結一、數據傳送類指令通用傳送指令(MOV、PUSH、POP、XCHG)累加器專用傳送指令(IN、OUT)地址——目標傳送指令(LEA、LDS、LES)習題1.指出下列指令中的錯誤,并改正。MOVBL,30A0H(2)MOV0010H,AL(3)XCHGAL,BX(4)MOV[AX],3456H(5)PUSHAL(6)POPCS(7)MOVDS,1000H(8)MOV[BX],[1000H](9)LDS(BX),[1000H](10)LEABX,CX2.已知AX=4A0BH,[1020H]單元中的內容為260FH,寫出下列每條指令單獨執行后AX的結果。MOVAX,1020H(2)XCHGAX,[1020H](3)MOVAX,[1020H](4)LEAAX,[1020H]3.在堆棧內,有效地址為2500H到2505H單元內依次存放10H、20H、30H、40H、50H、60H六個數,已知SP=2502H,執行POPBX指令后,有()。A.SP=2502H,BX=1020HB.SP=2504H,BX=4030HC.SP=2504H,BX=3040HD.SP=2500H,BX=2010H
B4.假定SS=2000H,SP=0100H,AX=2107H,執行指令PUSHAX后,存放數據21H的物理地址是()。A.20102HB.20101HC.200FEHD.200FFH
D5.交換寄存器SI、DI的內容,正確的程序段是()。A.MOVAX,SIMOVBX,DIXCHGBX,AX
C.MOVAX,SIMOVSI,AXMOVDI,AXB.PUSHSIPUSHDIPOPDIPOPSID.D
PUSHSIPUSHDIPOPSIPOPDI6.若已知SP=2000H,AX=1234H,BX=5678H
執行指令
PUSHAXPUSHBXPOPAXPOPBX
執行后,SP=
,AX=
,BX=
。7.BX=1000H,DS=2000H,(21000H)=3000H,(23000H)=4000H,則XCHGBX,[BX]執行完后BX=
H((BX))=
H(一個字的內容)
([BX])==
H(21000H)=
H(一個字的內容)8.SP=1000H,SS=3000H,(31000H)=2000H,DS=4000H,BX=1200H,則POP[BX]指令執行完后SP=
H,BX=
H(41200H)=
H(一個字的內容)第3章:3.2算術運算類指令算術運算類指令用來執行二進制的算術運算:加減乘除。這類指令會根據運算結果影響狀態標志,有時要利用某些標志才能得到正確的結果;使用他們時請留心有關狀態標志。重點掌握加法指令:ADD、ADC、INC減法指令:SUB、SBB、DEC、CMP、NEG第3章:3.2算術運算類指令(1)無符號數和帶符號數均不溢出0000000000111100+000011110CS=0,CP=0OF=0⊕0=0作為無符號數312+15作為帶符號數+3(+12)++15CF=0,無溢出OF=0,無溢出CF=0第3章:3.2算術運算類指令(2)無符號數溢出,帶符號數不溢出0000111101101100+000000101CS=1,CP=1OF=1⊕1=0作為無符號數6252+258>255作為帶符號數+6(-4)++2CF=1,溢出OF=0,無溢出CF=1第3章:3.2算術運算類指令(3)無符號數不溢出,帶符號數溢出0000011110001011+100000110CS=0,CP=1OF=0⊕1=1作為無符號數8123+131作為帶符號數+8(+123)++131>+127CF=0,無溢出OF=1,溢出CF=0第3章:3.2算術運算類指令(4)無符號數溢出,帶符號數溢出1000111101110101+011111001CS=1,CP=0OF=1⊕0=1作為無符號數135245+380>255作為帶符號數-121(-11)+-132<-128CF=1,溢出OF=1,溢出CF=1歸納上面4種情況:用CF可檢測無符號數是否溢出,用OF可檢測帶符號數是否溢出。無符號數運算結果溢出是在其結果超出了最大表示范圍的唯一原因下發生的,溢出也就是產生進位,這不叫出錯。并且在多字節數的相加過程中,正式利用溢出的CF來傳遞低位字節向高位字節的進位。而帶符號數運算產生溢出則表示運算結果出錯。第3章:3.2算術運算類指令算術運算的特點有:在加、減、乘、除基本運算指令中,除+1/-1指令外,都具有兩個操作數這類指令執行后,除+1、-1指令不影響CF標志外,其它對CF、OF、ZF、SF、PF和AF等6位標志均可產生影響。由這6位狀態標志反映的操作結果的性質如下:第3章:1.加法和減法指令加法指令:ADD,ADC和INC減法指令:SUB,SBB,DEC,NEG和CMP他們分別執行字或字節的加法和減法運算,除INC和DEC不影響CF標志外,其他按定義影響全部狀態標志位操作數組合:運算指令助記符reg,imm/reg/mem運算指令助記符mem,imm/reg第3章:(1)加法和減法指令
ADD
dst,src
;加法:dst←dst+src
;ADD指令使目的操作數加上源操作數,和的結果送到目的操作數
SUB
dst,src
;減法:dst←dst-src
;SUB指令使目的操作數減去源操作數,差的結果送到目的操作數第3章:例題(加法)MOVAX,7348H ;AX=7348HADDAL,27H
;AL=48H+27H=6FH,AX=736FH
;OF=0,SF=0,ZF=0,PF=1,CF=0ADDAX,3FFFH
;AX=736FH+3FFFH=B36EH
;OF=1,SF=1,ZF=0,PF=0,CF=03章:例題(減法)SUBAH,0F0H
;AH=B3H-F0H=C3H,AX=C36EH
;OF=0,SF=1,ZF=0,PF=1,CF=1MOVWORDPTR[200H],0EF00H
;[200H]=EF00H,標志不變SUB[200H],AX
;[200H]=EF00H-C36EH=2B92H
;OF=0,SF=0,ZF=0,PF=0,CF=0SUBSI,SI ;SI=0
;OF=0,SF=0,ZF=1,PF=1,CF=0第3章:(2)帶進位加和減指令ADC
dst,src
;加法:dst←dst+src+CF
;ADC指令除完成ADD加法運算外,還要加上進位CF,結果送到目的操作數SBB
dst,src
;減法:dst←dst-src-CF
;SBB指令除完成SUB減法運算外,還要減去借位CF,結果送到目的操作數第3章:例(無符號雙字加法和減法)MOVAX,7856H ;AX=7856HMOVDX,8234H ;DX=8234HADDAX,8998H ;AX=01EEH,CF=1ADCDX,1234H ;DX=9469H,CF=0SUBAX,4491H ;AX=BD5DH,CF=1SBBDX,8000H ;DX=1468H,CF=0DX.AX=82347856H+12348998H-80004491H=1468BD5DH第3章:(3)比較指令CMP(compare)CMP
dst,src
;做減法運算:dst-src
;CMP指令將目的操作數減去源操作數,但差值不回送目的操作數比較指令通過減法運算影響狀態標志,用于比較兩個操作數的大小關系CMPAX,BXCMPAL,100第3章:(4)增量和減量指令INC
reg/mem
;增量(加1):reg/mem←reg/mem+1DEC
reg/mem
;減量(減1):reg/mem←reg/mem-1INC指令和DEC指令是單操作數指令與加法和減法指令實現的加1和減1不同的是:INC和DEC不影響CF標志INCSI ;SI←SI+1DECBYTEPTR[SI] ;[SI]←[SI]-1第3章:(5)求補指令NEG(negtive)NEGreg/mem
;reg/mem←0-reg/memNEG指令對操作數執行求補運算,即用零減去操作數,然后結果返回操作數求補運算也可以表達成:將操作數按位取反后加1NEG指令對標志的影響與用零作減法的SUB指令一樣NEG指令也是一個單操作數指令第3章:例題(求補運算)MOVAX,0FF64HNEGAL
;AL=0-64H=9CH,AX=FF9CH
;OF=0,SF=1,ZF=0,PF=1,CF=1SUBAL,9DH
;AL=9CH-9DH=FFH,AX=FFFFH
;OF=0,SF=1,ZF=0,PF=1,CF=1NEGAX
;AX=0-FFFFH=0001H
;OF=0,SF=0,ZF=0,PF=0,CF=1DECAL
;AL=01H-1=0,AX=0000H
;OF=0,SF=0,ZF=1,PF=1,CF=1NEGAX
;AX=0-0=0
;OF=0,SF=0,ZF=1,PF=1,CF=0第3章:(6)壓縮BCD碼加法調整指令DAA指令用于對壓縮BCD碼相加的結果進行調整,使結果仍為壓縮BCD碼。微處理器中,運算器的核心是二進制加法器,逢二進一,當BCD碼≤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 消防工程施工組織設計方案-
- 機電安裝工程質量通病防治措施1
- 2025閥門組件生產供應合同
- 《國際政策的協調與合作》課件
- 2025年幼兒園教學器材采購合同
- 2025合同協議范本
- 2025租房子的合同范本
- 《設定起點:課件制作基礎》
- 工作場所職業病危害警示標識培訓
- 《智能掃描儀》課件
- 2024年江蘇省常州市中考一模英語試卷(含答案解析)
- 醫療設備(耗材)配送整體計劃方案投標方案
- 小學生中醫藥文化知識科普傳承中醫文化弘揚國粹精神課件
- 消防維保公司勞動合同
- 2024年4月貴州省自考00995商法(二)試題及答案含評分參考
- 以竹代塑的挑戰與對策
- 2024年美國商用車和乘用車市場現狀及上下游分析報告
- 幼兒園語言故事《阿里巴巴和四十大盜》課件
- 浙教版八年級信息技術上冊《第8課網頁的數據呈現》課件
- 便秘課件完整版本
- 2024-2029年波分復用器(WDM)行業市場現狀供需分析及重點企業投資評估規劃分析研究報告
評論
0/150
提交評論