微處理器指令系統(tǒng)_第1頁(yè)
微處理器指令系統(tǒng)_第2頁(yè)
微處理器指令系統(tǒng)_第3頁(yè)
微處理器指令系統(tǒng)_第4頁(yè)
微處理器指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩110頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章從8088/8086的指令格式入手,論述:立即數(shù)尋址方式寄存器尋址方式存儲(chǔ)器尋址方式進(jìn)而熟悉8088/8086匯編語(yǔ)言指令格式,尤其是其中操作數(shù)的表達(dá)方法為展開8088/8086指令系統(tǒng)做好準(zhǔn)備第三章指令系統(tǒng)-教學(xué)重點(diǎn)

指令:是計(jì)算機(jī)用以控制各部件協(xié)調(diào)動(dòng)作的命令;

指令系統(tǒng):CPU可執(zhí)行的指令的集合;機(jī)器指令:是CPU僅能識(shí)別的指令的二進(jìn)制代碼,也稱機(jī)器碼第一節(jié)指令的基本格式操作碼說(shuō)明計(jì)算機(jī)要執(zhí)行哪種操作,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的組成部分操作數(shù)是指令執(zhí)行的參與者,即各種操作的對(duì)象有些指令不需要操作數(shù),通常的指令都有一個(gè)或兩個(gè)操作數(shù),也有個(gè)別指令有3個(gè)甚至4個(gè)操作數(shù)操作碼操作數(shù)指令由操作碼和操作數(shù)兩部分組成8086/8088符號(hào)指令的書寫格式標(biāo)號(hào)后面必須跟冒號(hào),它可缺省。指令是指令功能的代表符號(hào),它是指令語(yǔ)句的關(guān)鍵字,不可缺省。操作數(shù)是參加本操作的數(shù)據(jù)。注釋是必須以“;”開頭的說(shuō)明部分,可以用英文或中文,注釋允許缺省。[標(biāo)號(hào):]指令助記符操作數(shù)[;注釋]其中帶[]號(hào)的標(biāo)號(hào)和注釋可以缺省第一節(jié)操作數(shù)類型8086/8088系統(tǒng)中的操作數(shù)根據(jù)存放的位置不同,可以分為三類:1.立即數(shù)操作數(shù)作為指令代碼的一部分出現(xiàn)在指令中。通常作為源操作數(shù)使用。可以是各進(jìn)制數(shù)或一個(gè)可求出確定值的表達(dá)式。其尋址方式為立即數(shù)尋址。2.寄存器操作數(shù)是把操作數(shù)存放在CPU內(nèi)部的寄存器中,用來(lái)參加運(yùn)算或存放結(jié)果。書寫形式就是寄存器的名稱。其尋址方式為寄存器尋址。3.存儲(chǔ)器操作數(shù)這種操作數(shù)存放在內(nèi)存儲(chǔ)器中。CPU對(duì)存儲(chǔ)器操作數(shù)進(jìn)行操作時(shí),指令中提供操作數(shù)在存儲(chǔ)器中存放的地址。其尋址方式為存儲(chǔ)器尋址。4.I/O端口操作數(shù)這種操作數(shù)放在I/O接口的端口中,CPU通過(guò)I/O接口與輸入輸出設(shè)備交換信息。其尋址方式為I/O尋址。第一節(jié)操作數(shù)類型第二節(jié)操作數(shù)的尋址方式指令系統(tǒng)設(shè)計(jì)了多種操作數(shù)的來(lái)源尋找操作數(shù)地址的過(guò)程稱為尋址尋找操作數(shù)存放地址的各種方式叫做尋址方式理解操作數(shù)的尋址方式是理解指令功能的前提操作數(shù)采取哪一種尋址方式一方面,會(huì)影響處理器執(zhí)行指令的速度和效率另一方面,對(duì)程序設(shè)計(jì)也很重要注意:一條指令一般都有源操作數(shù)和目的操作數(shù),要說(shuō)明一條指令為何種尋址方式,應(yīng)就源操作數(shù)和目的操作數(shù)分別加以說(shuō)明。MOV指令1.立即數(shù)尋址方式指令中的操作數(shù)直接存放在機(jī)器代碼中,緊跟在操作碼之后(操作數(shù)作為指令的一部分存放在操作碼之后的主存單元中)這種操作數(shù)被稱為立即數(shù)imm可以是8位數(shù)值i8(00H~FFH)也可以是16位數(shù)值i16(0000H~FFFFH)立即數(shù)尋址方式常用來(lái)給寄存器和存儲(chǔ)單元賦值,多以常量形式出現(xiàn)演示MOVAX,0102H ;AX←0102HMOVAL,80H;AL←80H特點(diǎn)及注意事項(xiàng)執(zhí)行速度快:操作數(shù)是直接從指令中取得立即數(shù)只能作源操作數(shù),不能作目的操作數(shù)主要用來(lái)給寄存器或存儲(chǔ)器賦初值8位立即數(shù)可裝入8位或16位寄存器,16位立即數(shù)只能裝入16位寄存器。例如:MOVAL,14H和MOVAX,14H合法,而MOVAL,1234H或MOVBL,123H是錯(cuò)誤的。2.寄存器尋址方式操作數(shù)存放在CPU的內(nèi)部寄存器reg中:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4個(gè)段寄存器seg:CS、DS、SS、ES寄存器名表示其內(nèi)容(操作數(shù))演示MOVAX,BX;AX←BX2.寄存器尋址方式執(zhí)行速度快:因操作數(shù)就在CPU內(nèi)部源操作數(shù)和目的操作數(shù)都可使用寄存器尋址注意:源操作數(shù)的長(zhǎng)度必須與目的操作數(shù)一致,否則會(huì)出錯(cuò)。例如:MOVCX,AH

×

盡管CX寄存器放得下AH的內(nèi)容,但匯編程序不知道將它放到CH還是CL。特點(diǎn)3.I/O端口尋址(輸入輸出指令中講解)操作數(shù)存放在I/O端口中直接端口尋址

INAL,50H;將50H端口的字節(jié)數(shù)輸入到ALINAX,60H;將60H和61H兩個(gè)相鄰端口的16位數(shù)據(jù)輸入到AXDX寄存器間接端口尋址

MOVDX,383HOUTDX,ALMOVDX,380HINAX,DX4.存儲(chǔ)器尋址方式一條指令中,最多只能有一個(gè)存儲(chǔ)器操作數(shù),或者是源操作數(shù),或者是目的操作數(shù)存儲(chǔ)器尋址方式共有24種,按EA的計(jì)算方法不同又可分為以下幾種:1、直接尋址方式2、寄存器間接尋址方式3、寄存器相對(duì)尋址方式4、基址變址尋址方式5、相對(duì)基址變址尋址方式存儲(chǔ)器尋址的指令,其操作數(shù)總是在代碼段之外的數(shù)據(jù)段、堆棧段或附加段的存儲(chǔ)器中,指令給出的是操作數(shù)尋址信息(邏輯地址)16第3章:(1)直接尋址方式直接尋址方式的有效地址在指令中直接給出默認(rèn)的段地址在DS段寄存器,可使用段超越前綴改變,因此,段地址默認(rèn)的情況下,物理地址PA=DS×10H+EA指令中有效地址可以用數(shù)值或符號(hào)表示,數(shù)值必須加一個(gè)方括號(hào),以便與立即數(shù)相區(qū)別演示MOVAX,[2000H] ;AX←DS:[2000H]MOVAX,ES:[2000H] ;AX←ES:[2000H]第3章:(1)直接尋址方式如果要對(duì)代碼段、堆棧段或附加段寄存器所指出的存儲(chǔ)區(qū)進(jìn)行直接尋址,應(yīng)在指令中加段超越前綴。例如:數(shù)據(jù)若存放在附加段中,則應(yīng)在有效地址前加“ES:”,這里的冒號(hào)稱為修改屬性運(yùn)算符,計(jì)算物理地址時(shí)要用ES作段地址,而不再是默認(rèn)值DS。MOVAX,ES:[2000H] ;該指令的源操作數(shù)物理地址:PA=ES×10H+2000H第3章:(1)直接尋址方式在匯編語(yǔ)言中還允許用符號(hào)地址代替數(shù)值地址,實(shí)際上就是給存儲(chǔ)單元取一個(gè)名字,這樣,如果要與這些單元打交道,只要使用其名字就可以了,而不必記住具體數(shù)值是多少。MOVAX,DATA1第3章:(2)寄存器間接尋址方式①

操作數(shù)放在存儲(chǔ)器中,操作數(shù)的有效地址EA存放在指令指明的寄存器中。寄存器可以是BX、SI、DI、BP其中之一。指令中指定的寄存器是BX、DI或SI,則操作數(shù)在當(dāng)前DS數(shù)據(jù)段中,其操作數(shù)的物理地址是:

PA=DS×10H+演示MOVAX,[BX] ;AX←DS:[BX]BXSIDI第3章:(2)寄存器間接尋址方式②

指令中若指明BP為間址寄存器,則操作數(shù)在堆棧段中。此時(shí),用SS寄存器內(nèi)容作段地址,操作數(shù)的實(shí)際地址PA=SS×10H+BPMOVAX,[BP] ;AX←SS:[BP]若在指令中規(guī)定是段超越的,則BP的內(nèi)容也可以與其它的段寄存器相加,形成操作數(shù)地址。MOVAX,DS:[BP] ;AX←DS:[BP]演示第3章:(3)寄存器相對(duì)尋址方式指定BX,BP,SI,DI的內(nèi)容進(jìn)行的是間接尋址。但是,和寄存器間接尋址方式不同的是:指令中還要指定一個(gè)8位或16位的位移量DISP,操作數(shù)的有效地址EA則等于間址寄存器內(nèi)容和位移量之和,結(jié)果按16位歸算。寄存器間接尋址寄存器相對(duì)尋址第3章:(3)寄存器相對(duì)尋址方式對(duì)于寄存器為BX,SI,DI的情況,用段寄存器DS的內(nèi)容作段首址;而對(duì)于寄存器BP,則使用段寄存器SS的內(nèi)容作段首址。操作數(shù)的實(shí)際地址為:第3章:(3)寄存器相對(duì)尋址方式演示MOVAX,[SI+06H] ;AX←DS:[SI+06H]MOVAX,06H[SI] ;AX←DS:[SI+06H]采用寄存器相對(duì)尋址的指令,也可使用段超越前綴。第3章:(4)基址變址尋址方式通常將BX和BP看作基址寄存器,將SI、DI看作變址寄存器。在基址變址尋址方式中存儲(chǔ)器操作數(shù)的有效地址EA由指令指定的一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和確定。第3章:(4)基址變址尋址方式基址在BX,段寄存器使用DS;基址在BP中,段寄存器使用SS。第3章:(4)基址變址尋址方式演示MOVAX,[BX+SI] ;AX←DS:[BX+SI]MOVAX,[BX][SI] ;AX←DS:[BX+SI]采用基址變址尋址的指令,也可使用段超越前綴PA計(jì)算公式中,BX可與SI或DI組合,BP也可與SI或DI組合,但BX不可與BP組合第3章:(5)相對(duì)基址變址尋址方式操作數(shù)的有效地址EA是由指令指定的一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容再加上8位或16位位移量之和。第3章:(5)相對(duì)基址變址尋址方式對(duì)應(yīng)BX基址寄存器默認(rèn)是DS,對(duì)應(yīng)BP基址寄存器默認(rèn)是SS;可用段超越前綴改變。演示MOVAX,[BX+DI+6] ;AX←DS:[BX+DI+6]MOVAX,6[BX+DI]MOVAX,6[BX][DI]第3章:存儲(chǔ)器尋址方式中的變量變量指示內(nèi)存中的數(shù)據(jù),變量名具有地址屬性。存儲(chǔ)器尋找方式中經(jīng)常采用變量形式變量的定義WVARDW1234H;定義16位變量WVAR,具有初值1234H;假設(shè)其偏移地址為10H單獨(dú)引用變量名是直接尋址方式MOVAX,WVAR;指令功能:AX=1234H;等同于MOVAX,[0010H]第3章:相對(duì)尋址方式中的位移量在寄存器相對(duì)和相對(duì)基址加變址尋址方式中,其位移量不僅可用常量表示,也可用符號(hào)表示這個(gè)符號(hào)可以是變量名,例如WVAR變量,而且支持多種表達(dá)形式MOVAX,[DI+WVAR]

;等同于MOVAX,WVAR[DI]MOVAX,[BX+SI+WVAR]

;等同于MOVAX,WVAR[BX+SI]

;等同于MOVAX,WVAR[BX][SI]對(duì)尋址方式作一總結(jié)對(duì)尋址方式作一總結(jié)對(duì)尋址方式作一總結(jié)對(duì)尋址方式作一總結(jié)例題:分別指出下列指令中源操作數(shù)和目的操作數(shù)的尋址方式。若是存儲(chǔ)器尋址,試用表達(dá)式表示出EA=?,PA=?(1)MOVSI,2100H(2)MOV[SI],AX(3)MOVAX,ES:[BX](4)MOVAX,[BX+SI+20H](5)MOVCX,DISP[BX]例題2:一些寄存器的內(nèi)容和一些存儲(chǔ)單元的內(nèi)容如下圖所示。試指出下列各條指令執(zhí)行后,AX中的內(nèi)容。(1)MOVAX,2010H(2)MOVAX,[1200H](3)MOVAX,1100H[BX](4)MOVAX,1100H[BX+SI]0100H0002H3000HBXSIDSCPU12H34H56H78H︰

2AH4CHB7H65H31100H31101H31102H31103H31200H31201H31202H31203HM1.以下指令中,設(shè)執(zhí)行前:DS=3000H,BX=0600H,SI=00B0H,ES=2000H,SS=1000H,CS=3500H,BP=0050H。(1)執(zhí)行指令MOVAX,BX后,AX=()H,BX=()H,該指令的源操作數(shù)是()尋址方式。(2)執(zhí)行指令A(yù)DDAX,[BX][SI],其源操作數(shù)物理地址為()H,源操作數(shù)是()尋址方式。復(fù)習(xí)題2.80X86微處理器的尋址方式有_______、_____、________和________四種。3.根據(jù)以下要求用一條指令寫出相應(yīng)的操作:(1)用寄存器BX間接尋址2000H內(nèi)存單元,并將2000H單元的內(nèi)容傳送至AX寄存器中。(2)用寄存器BX和SI的基址變址尋址方式把存儲(chǔ)器中的一個(gè)字傳送至AX寄存器中。

MOV指令的功能立即數(shù)尋址方式寄存器尋址方式直接尋址方式間接尋址方式相對(duì)尋址方式基址變址尋址方式相對(duì)基址變址尋址方式總結(jié)一、指令的基本格式二、尋址方式作業(yè)習(xí)題3-1、習(xí)題3-31.寄存器間接尋址方式中,操作數(shù)在()中。

8086/8088CPU指令系統(tǒng)的操作數(shù)的來(lái)源有()、()、()、()。3.

習(xí)題下列三條指令語(yǔ)句中,()是錯(cuò)誤的。A.MOVAX,[SI][DI]B.MOVAX,200HC.MOVAX,ARRAY[SI+2]

4.

若(CS)=5200H時(shí),物理地址為5A238H,那么(CS)變成7800H時(shí),物理地址為多少?

5.設(shè)(BX)=637DH,(SI)=2A9BH,位移量=0C237H,(DS)=3100H,求下列尋址方式產(chǎn)生的有效地址和物理地址:(1)直接尋址;(2)用BX的寄存器間接尋址;(3)用BX的寄存器相對(duì)尋址;

(4)用BX和SI的基址變址尋址;(5)用BX和SI的基址變址且相對(duì)尋址7.將左邊的詞匯和右邊的說(shuō)明聯(lián)系起來(lái),括號(hào)內(nèi)填入所選的A、B、C、D等。(1)EU()A總線接口部件,實(shí)現(xiàn)執(zhí)行部件所需要的所有總線操作(2)BIU()B唯一代表存儲(chǔ)器空間中的每個(gè)字節(jié)單元的地址(3)堆棧()C保存當(dāng)前棧頂偏移地址的寄存器(4)SP()D以后進(jìn)先出方式工作的存儲(chǔ)空間(5)物理地址()E執(zhí)行部件,由算術(shù)邏輯單元(ALU)和寄存器等組成第三節(jié)8086/8088指令系統(tǒng)8086/8088指令系統(tǒng)包含133條基本指令。這些指令與尋址方式組合,再加上不同的數(shù)據(jù)形式——有的為字處理,有的為字節(jié)處理,可構(gòu)成上千種指令。這些指令按功能可分為六類:①數(shù)據(jù)傳送類②算術(shù)運(yùn)算類③邏輯運(yùn)算與移位類④串操作類⑤控制轉(zhuǎn)移類⑥處理器控制類第三節(jié)8086/8088指令系統(tǒng)實(shí)現(xiàn)CPU內(nèi)部寄存器之間、CPU和存儲(chǔ)器之間以及CPU和I/O端口之間的數(shù)據(jù)傳送。3.1數(shù)據(jù)傳送類指令功能特點(diǎn)含兩個(gè)操作數(shù);除SAHF和POPF指令外,數(shù)據(jù)傳送指令不影響標(biāo)志寄存器的內(nèi)容重點(diǎn)掌握MOVXCHGPUSHPOPLEA1.通用數(shù)據(jù)傳送指令提供方便靈活的通用傳送操作有4條指令MOVPUSHPOPXCHGMOVXCHGPUSHPOP(1)傳送指令MOV(move)指令格式:MOVdst,src;src→dst把一個(gè)字節(jié)或字的操作數(shù)從源地址傳送至目的地址MOVreg/mem,imm;立即數(shù)送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存演示MOV指令--立即數(shù)傳送MOVCL,’A’ ;CL←41H,字節(jié)傳送MOVDX,0FFH

;DX←00FFH,字傳送MOVSI,200H

;SI←0200H,字傳送MOVBVAR,0AH

;字節(jié)傳送;假設(shè)BVAR是一個(gè)字節(jié)變量,定義如下:BVARDB0MOVWVAR,0BH

;字傳送;假設(shè)WVAR是一個(gè)字變量,定義如下:WVARDW0明確指令是字節(jié)操作還是字操作以字母開頭的常數(shù)要有前導(dǎo)0MOV指令--寄存器傳送MOVAH,AL ;AH←AL,字節(jié)傳送MOVBVAR,CH ;BVAR←CH,字節(jié)傳送MOVAX,BX ;AX←BX,字傳送MOVDS,AX ;DS←AX,字傳送MOV[BX],AL ;[BX]←AL,字節(jié)傳送

寄存器具有明確的字節(jié)和字類型MOV指令--存儲(chǔ)器傳送MOVAL,[BX] ;AL←DS:[BX]MOVDX,[BP] ;DX←SS:[BP+0]MOVDX,[BP+4] ;DX←SS:[BP+4]MOVES,[SI] ;ES←DS:[SI]

不存在存儲(chǔ)器向存儲(chǔ)器的傳送指令MOV指令--段寄存器傳送MOV[SI],DSMOVAX,DS

;AX←DSMOVES,AX ;ES←AX←DS

對(duì)段寄存器的操作不靈活例1:請(qǐng)指出下列指令中的錯(cuò)誤。(1)MOVAH,400H(2)MOVDS,2000H(3)MOV[BX],[SI]MOV指令傳送功能圖解MOV指令也并非任意傳送!立即數(shù)段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存儲(chǔ)器

非法指令的主要現(xiàn)象:兩個(gè)操作數(shù)的類型不一致無(wú)法確定是字節(jié)量還是字量操作兩個(gè)操作數(shù)都是存儲(chǔ)器段寄存器之間直接傳送數(shù)據(jù)立即數(shù)作為目的操作數(shù)CS和IP作為目的操作數(shù)向段寄存器送立即數(shù)非法指令--兩個(gè)操作數(shù)類型不一致在絕大多數(shù)雙操作數(shù)指令中,目的操作數(shù)和源操作數(shù)必須具有一致的數(shù)據(jù)類型,或者同為字量,或者同為字節(jié)量,否則為非法指令

MOVAL,050AH ;非法指令,

MOVSI,DL ;非法指令,

修正:;MOVAX,050AH

修正: ;MOVDH,0

;MOVSI,DX非法指令--無(wú)法確定是字節(jié)量還是字量操作當(dāng)無(wú)法通過(guò)任一個(gè)操作數(shù)確定是何種操作類型時(shí),需要利用匯編語(yǔ)言的操作符顯式指明

MOV[BX+SI],255 ;非法指令,修正: ;MOVBYTEPTR[BX+SI],255

;BYTEPTR說(shuō)明是字節(jié)操作 ;MOVWORDPTR[BX+SI],255

;WORDPTR說(shuō)明是字操作非法指令--兩個(gè)操作數(shù)都是存儲(chǔ)器8086指令系統(tǒng)除串操作指令外,不允許兩個(gè)操作數(shù)都是存儲(chǔ)單元(存儲(chǔ)器操作數(shù))

MOVBUF2,BUF1 ;非法指令,修正:

;假設(shè)BUF2和BUF1是兩個(gè)字變量

;MOVAX,BUF1

;MOVBUF2,AX

;假設(shè)BUF2和BUF1是兩個(gè)字節(jié)變量

;MOVAL,BUF1

;MOVBUF2,AL非法指令--段寄存器的操作有一些限制8086指令系統(tǒng)中,能直接對(duì)段寄存器操作的指令只有MOV等個(gè)別傳送指令,并且不靈活

MOVDS,ES ;非法指令,修正: ;MOVAX,ES

;MOVDS,AX MOVDS,100H ;非法指令,修正: ;MOVAX,100H

;MOVDS,AX

MOVCS,[SI] ;非法指令

一般數(shù)據(jù)傳送指令例子判斷下列指令的正確性:MOVAL,BXMOVAX,[SI]05HMOV[BX][BP],BXMOVDS,1000HMOVDX,09HMOV[1200],[SI]作業(yè)講評(píng):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.

試說(shuō)明下列各指令單獨(dú)執(zhí)行后相關(guān)寄存器或存儲(chǔ)單元的內(nèi)容。(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實(shí)現(xiàn)CPU內(nèi)部寄存器之間或內(nèi)部寄存器與存儲(chǔ)器之間的內(nèi)容交換,不影響標(biāo)志寄存器。XCHGreg,reg/mem;regreg/mem演示例:數(shù)據(jù)交換MOVAX,1199H ;AX=1199HXCHGAH,AL

;等同于XCHGAL,AHMOVWVAR,5566H ;WVAR是一個(gè)字量變量XCHGAX,WVAR

;等同于XCHGWVAR,AX

XCHGAL,BYTEPTRWVAR+1

;“BYTEPTRWVAR+1”強(qiáng)制為字節(jié)量,只取高字節(jié)與AL類型交換,否則數(shù)據(jù)類型不匹配;AX=9911H;AX=5566H,WVAR=9911H;AX=5599H,WVAR=6611H使用XCHG指令時(shí)應(yīng)注意:dst和src不能同時(shí)為存儲(chǔ)器操作數(shù);任一個(gè)操作數(shù)都不能使用段寄存器和IP,也不能使用立即數(shù)。堆棧的引入以三層子程序嵌套為例,逐級(jí)進(jìn)入子程序時(shí),A、B、C三點(diǎn)都有斷點(diǎn)和現(xiàn)場(chǎng)需要保護(hù),順序?yàn)锳→B→C;當(dāng)子程序sub3執(zhí)行結(jié)束,逐級(jí)返回時(shí),最后被保護(hù)的C點(diǎn)數(shù)據(jù)應(yīng)最先恢復(fù),最先保護(hù)的A點(diǎn)數(shù)據(jù)應(yīng)最后恢復(fù)。為此,通常在內(nèi)存中開辟一段區(qū)域,結(jié)合軟硬件技術(shù),使其具有保護(hù)數(shù)據(jù)和后進(jìn)先出的功能。ABCmainsub1sub2sub3(3)堆棧操作指令堆棧以“后進(jìn)先出”或“先進(jìn)后出”的原則存取信息存取地址由一個(gè)專門的地址寄存器SP來(lái)管理堆棧段段基址由SS提供,偏移地址由SP提供棧頂:堆棧指針始終指向堆棧中最后存入信息的那個(gè)單元,稱該單元為棧頂。棧底:在信息的存與取的過(guò)程中,棧頂是不斷移動(dòng)的,也稱它為堆棧區(qū)的動(dòng)端,而堆棧區(qū)的另端則是固定不變的,這端我們又稱其為棧底。

棧底0010H00FFH00FEH00FDHSP0000H初始化堆棧:堆棧只有兩種基本操作:進(jìn)棧和出棧,對(duì)應(yīng)兩條指令PUSH和POP進(jìn)棧指令PUSH指令格式:PUSHsrcSP-1→SP,srcH→(SP),SP-1→SP,srcL→(SP)該指令不影響標(biāo)志寄存器。PUSHr16/m16/seg

;SP←SP-2

;SS:[SP]←r16/m16/seg演示例如:PUSHAXPUSH[2000H] PUSHCSMOVSS,1050HMOVSP,000EHPUSHAX(設(shè)AX=1234H)PUSHBX(設(shè)BX=5CF8H)例題:出棧指令POP指令格式:POPdst(SP)→dstL,SP+1→SP,(SP)→dstH,SP+1→SP該指令不影響標(biāo)志寄存器。POPr16/m16/seg

;r16/m16/seg←SS:[SP]

;SP←SP+2POPBXPOP[2000H]POPDS演示堆棧操作注意事項(xiàng):堆棧操作的單位是字,進(jìn)棧和出棧只針對(duì)字量字量數(shù)據(jù)從棧頂壓入和彈出時(shí),都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)CS寄存器可進(jìn)棧,但不能隨意彈出一個(gè)數(shù)據(jù)到CS堆棧容量有限,因此進(jìn)棧和出棧要成對(duì)出現(xiàn),否則將有數(shù)據(jù)殘留在堆棧中,時(shí)間一長(zhǎng),堆棧會(huì)滿的!進(jìn)棧和出棧指令用于程序保存或恢復(fù)數(shù)據(jù)或中斷時(shí)保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。輸入/輸出(I/O)指令執(zhí)行輸入指令時(shí),CPU可以從一個(gè)8位端口讀入1個(gè)字節(jié)到AL中,也可以從兩個(gè)連續(xù)的8位端口讀1個(gè)字到AX中。例:INAL,50H;INAX,70H將50H端口的字節(jié)讀入AL將70H、71H兩端口的值讀入AX2.輸入/輸出指令(累加器專用傳送指令)2.輸入/輸出指令(累加器專用傳送指令)(1)輸入指令I(lǐng)NAL,PORT;將port端口字節(jié)數(shù)據(jù)輸入到ALINAX,PORT;將port和port+1兩端口的內(nèi)容輸入到AX,其中port的內(nèi)容輸入到AL,port+1的內(nèi)容輸入到AHINAL,DX;從DX所指的端口中輸入一字節(jié)到ALINAX,DX;從DX和DX+1所指的兩個(gè)端口輸一個(gè)字到AX,低地址端口的值輸?shù)紸L,高地址端口的值輸?shù)紸H直接端口尋址DX寄存器間接端口尋址I/O尋址(2)輸出指令OUTPORT,AL;將AL中的一個(gè)字節(jié)數(shù)據(jù)輸出到PORT端口OUTPORT,AX;將AX中的字?jǐn)?shù)據(jù)輸出到PORT和PORT+1兩端口OUTDX,AL;將AL中的字節(jié)輸出到DX所指的端口OUTDX,AX;將AL中低位字節(jié)輸出到DX所指的端口,同時(shí)將AH中的高位字節(jié)輸出到DX+1所指的端口例:從端口2F0H輸入數(shù)據(jù)的程序段為:MOVDX,02F0HINAX,DX8086的地址——目標(biāo)傳送指令是用來(lái)對(duì)尋址機(jī)構(gòu)進(jìn)行控制的。此類指令傳送到16位目標(biāo)寄存器中的是存儲(chǔ)器操作數(shù)的地址,而不是它的內(nèi)容。3.地址——目標(biāo)傳送指令這類指令有3條:LEALDSLES將存儲(chǔ)器操作數(shù)的有效地址送至指定的16位通用寄存器(1)有效地址送寄存器(LEA)指令LEAr16,src;src的EA→r16例:

MOVBX,400H MOVSI,3CH LEABX,[BX+SI+0F62H]

;BX←400H+3CH+0F62H=139EH例:地址傳送與內(nèi)容傳送WVARDW4142H ;假設(shè)偏移地址為04H…MOVAX,WVAR

;內(nèi)容傳送:AX=4142HLEASI,WVAR

;地址傳送:SI=0004H;等同于LEASI,[0004H]MOVCX,[SI] ;內(nèi)容傳送:CX=4142HMOVDI,OFFSETWVAR

;=MOVDI,0004H

;利用操作符OFFSET獲取變量的有效地址MOVDX,[DI] ;內(nèi)容傳送:DX=4142H該指令完成一個(gè)32位地址指針的傳送。地址指針包括段地址和偏移量部分。指令把源操作數(shù)src指定的4個(gè)字節(jié)地址指針傳送到兩個(gè)目標(biāo)寄存器。(2)數(shù)據(jù)段指針?biāo)图拇嫫鱈DS指令LDSr16,src;其中,地址指針的前2個(gè)字節(jié)(低地址中的字)傳到某一寄存器r16(通常為SI),后2個(gè)字節(jié)(高地址中的字)傳到DS中。例:LDSSI,[2100]在指令執(zhí)行前,設(shè)(DS)=3000H,在DS段中,有效地址EA為2100~2103H的4個(gè)字節(jié),其中存放著一個(gè)地址指針,如圖所示,則指令執(zhí)行后,SI=0140H,DS=2000H該指令和LDSr16,src功能類似,不同的只是用ES代替DS,這時(shí)常指定DI作寄存器r16。(3)附加段指針?biāo)图拇嫫鱈ES指令LESr16,src;其中,地址指針的前2個(gè)字節(jié)傳到某一寄存器R16中,后2個(gè)字節(jié)傳到ES中。使用LDS和LES指令時(shí)應(yīng)注意:R16不能使用段寄存器Src一定是存儲(chǔ)器操作數(shù),其尋址方式可以是以前所學(xué)存儲(chǔ)器尋址中的一種

通過(guò)這些指令可以讀出當(dāng)前標(biāo)志寄存器中各狀態(tài)位的內(nèi)容,也可以對(duì)各狀態(tài)位設(shè)置新的值。這類指令有4條。源操作數(shù)和目的操作數(shù)都隱含在操作碼中。4.標(biāo)志傳送指令這類指令有4條:LAHFSAHFPUSHFPOPF(1)讀取標(biāo)志指令(LAHF)LAHF;FL→AH,標(biāo)志寄存器低8位送AH1514131211109876543210

OFDFIFTFSFZF

AF

PF

CFD7D6D4D2D0AH(2)設(shè)置標(biāo)志指令(SAHF)SAHF;AH→FL,AH的內(nèi)容送標(biāo)志寄存器低8位1514131211109876543210

OFDFIFTFSFZF

AF

PF

CFD7D6D4D2D0AH(3)標(biāo)志寄存器的入棧指令(PUSHF)和出棧指令(POPF)PUSHF;標(biāo)志寄存器的內(nèi)容入棧同時(shí)修改堆棧指針:(SP-2)→SP。POPF;將堆棧頂部的一個(gè)字彈出到標(biāo)志寄存器,同時(shí)修改堆棧指針:(SP+2)→SP。這兩條指令分別可以用作在中斷服務(wù)程序和子程序的應(yīng)用中,保存主程序的標(biāo)志和恢復(fù)主程序的標(biāo)志。MOV指令的功能XCHG指令的功能XLAT指令的功能PUSH指令的功能POP指令的功能LDS指令DS=3000H01H00H20H40HEA=2100H32100HSIDS總結(jié)一、數(shù)據(jù)傳送類指令通用傳送指令(MOV、PUSH、POP、XCHG)累加器專用傳送指令(IN、OUT)地址——目標(biāo)傳送指令(LEA、LDS、LES)習(xí)題1.指出下列指令中的錯(cuò)誤,并改正。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]單元中的內(nèi)容為260FH,寫出下列每條指令單獨(dú)執(zhí)行后AX的結(jié)果。MOVAX,1020H(2)XCHGAX,[1020H](3)MOVAX,[1020H](4)LEAAX,[1020H]3.在堆棧內(nèi),有效地址為2500H到2505H單元內(nèi)依次存放10H、20H、30H、40H、50H、60H六個(gè)數(shù),已知SP=2502H,執(zhí)行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,執(zhí)行指令PUSHAX后,存放數(shù)據(jù)21H的物理地址是()。A.20102HB.20101HC.200FEHD.200FFH

D5.交換寄存器SI、DI的內(nèi)容,正確的程序段是()。A.MOVAX,SIMOVBX,DIXCHGBX,AX

C.MOVAX,SIMOVSI,AXMOVDI,AXB.PUSHSIPUSHDIPOPDIPOPSID.D

PUSHSIPUSHDIPOPSIPOPDI6.若已知SP=2000H,AX=1234H,BX=5678H

執(zhí)行指令

PUSHAXPUSHBXPOPAXPOPBX

執(zhí)行后,SP=

,AX=

,BX=

。7.BX=1000H,DS=2000H,(21000H)=3000H,(23000H)=4000H,則XCHGBX,[BX]執(zhí)行完后BX=

H((BX))=

H(一個(gè)字的內(nèi)容)

([BX])==

H(21000H)=

H(一個(gè)字的內(nèi)容)8.SP=1000H,SS=3000H,(31000H)=2000H,DS=4000H,BX=1200H,則POP[BX]指令執(zhí)行完后SP=

H,BX=

H(41200H)=

H(一個(gè)字的內(nèi)容)第3章:3.2算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令用來(lái)執(zhí)行二進(jìn)制的算術(shù)運(yùn)算:加減乘除。這類指令會(huì)根據(jù)運(yùn)算結(jié)果影響狀態(tài)標(biāo)志,有時(shí)要利用某些標(biāo)志才能得到正確的結(jié)果;使用他們時(shí)請(qǐng)留心有關(guān)狀態(tài)標(biāo)志。重點(diǎn)掌握加法指令:ADD、ADC、INC減法指令:SUB、SBB、DEC、CMP、NEG第3章:3.2算術(shù)運(yùn)算類指令(1)無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)均不溢出0000000000111100+000011110CS=0,CP=0OF=0⊕0=0作為無(wú)符號(hào)數(shù)312+15作為帶符號(hào)數(shù)+3(+12)++15CF=0,無(wú)溢出OF=0,無(wú)溢出CF=0第3章:3.2算術(shù)運(yùn)算類指令(2)無(wú)符號(hào)數(shù)溢出,帶符號(hào)數(shù)不溢出0000111101101100+000000101CS=1,CP=1OF=1⊕1=0作為無(wú)符號(hào)數(shù)6252+258>255作為帶符號(hào)數(shù)+6(-4)++2CF=1,溢出OF=0,無(wú)溢出CF=1第3章:3.2算術(shù)運(yùn)算類指令(3)無(wú)符號(hào)數(shù)不溢出,帶符號(hào)數(shù)溢出0000011110001011+100000110CS=0,CP=1OF=0⊕1=1作為無(wú)符號(hào)數(shù)8123+131作為帶符號(hào)數(shù)+8(+123)++131>+127CF=0,無(wú)溢出OF=1,溢出CF=0第3章:3.2算術(shù)運(yùn)算類指令(4)無(wú)符號(hào)數(shù)溢出,帶符號(hào)數(shù)溢出1000111101110101+011111001CS=1,CP=0OF=1⊕0=1作為無(wú)符號(hào)數(shù)135245+380>255作為帶符號(hào)數(shù)-121(-11)+-132<-128CF=1,溢出OF=1,溢出CF=1歸納上面4種情況:用CF可檢測(cè)無(wú)符號(hào)數(shù)是否溢出,用OF可檢測(cè)帶符號(hào)數(shù)是否溢出。無(wú)符號(hào)數(shù)運(yùn)算結(jié)果溢出是在其結(jié)果超出了最大表示范圍的唯一原因下發(fā)生的,溢出也就是產(chǎn)生進(jìn)位,這不叫出錯(cuò)。并且在多字節(jié)數(shù)的相加過(guò)程中,正式利用溢出的CF來(lái)傳遞低位字節(jié)向高位字節(jié)的進(jìn)位。而帶符號(hào)數(shù)運(yùn)算產(chǎn)生溢出則表示運(yùn)算結(jié)果出錯(cuò)。第3章:3.2算術(shù)運(yùn)算類指令算術(shù)運(yùn)算的特點(diǎn)有:在加、減、乘、除基本運(yùn)算指令中,除+1/-1指令外,都具有兩個(gè)操作數(shù)這類指令執(zhí)行后,除+1、-1指令不影響CF標(biāo)志外,其它對(duì)CF、OF、ZF、SF、PF和AF等6位標(biāo)志均可產(chǎn)生影響。由這6位狀態(tài)標(biāo)志反映的操作結(jié)果的性質(zhì)如下:第3章:1.加法和減法指令加法指令:ADD,ADC和INC減法指令:SUB,SBB,DEC,NEG和CMP他們分別執(zhí)行字或字節(jié)的加法和減法運(yùn)算,除INC和DEC不影響CF標(biāo)志外,其他按定義影響全部狀態(tài)標(biāo)志位操作數(shù)組合:運(yùn)算指令助記符reg,imm/reg/mem運(yùn)算指令助記符mem,imm/reg第3章:(1)加法和減法指令

ADD

dst,src

;加法:dst←dst+src

;ADD指令使目的操作數(shù)加上源操作數(shù),和的結(jié)果送到目的操作數(shù)

SUB

dst,src

;減法:dst←dst-src

;SUB指令使目的操作數(shù)減去源操作數(shù),差的結(jié)果送到目的操作數(shù)第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,標(biāo)志不變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)帶進(jìn)位加和減指令A(yù)DC

dst,src

;加法:dst←dst+src+CF

;ADC指令除完成ADD加法運(yùn)算外,還要加上進(jìn)位CF,結(jié)果送到目的操作數(shù)SBB

dst,src

;減法:dst←dst-src-CF

;SBB指令除完成SUB減法運(yùn)算外,還要減去借位CF,結(jié)果送到目的操作數(shù)第3章:例(無(wú)符號(hào)雙字加法和減法)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

;做減法運(yùn)算:dst-src

;CMP指令將目的操作數(shù)減去源操作數(shù),但差值不回送目的操作數(shù)比較指令通過(guò)減法運(yùn)算影響狀態(tài)標(biāo)志,用于比較兩個(gè)操作數(shù)的大小關(guān)系CMPAX,BXCMPAL,100第3章:(4)增量和減量指令I(lǐng)NC

reg/mem

;增量(加1):reg/mem←reg/mem+1DEC

reg/mem

;減量(減1):reg/mem←reg/mem-1INC指令和DEC指令是單操作數(shù)指令與加法和減法指令實(shí)現(xiàn)的加1和減1不同的是:INC和DEC不影響CF標(biāo)志INCSI ;SI←SI+1DECBYTEPTR[SI] ;[SI]←[SI]-1第3章:(5)求補(bǔ)指令NEG(negtive)NEGreg/mem

;reg/mem←0-reg/memNEG指令對(duì)操作數(shù)執(zhí)行求補(bǔ)運(yùn)算,即用零減去操作數(shù),然后結(jié)果返回操作數(shù)求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加1NEG指令對(duì)標(biāo)志的影響與用零作減法的SUB指令一樣NEG指令也是一個(gè)單操作數(shù)指令第3章:例題(求補(bǔ)運(yùn)算)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碼加法調(diào)整指令DAA指令用于對(duì)壓縮BCD碼相加的結(jié)果進(jìn)行調(diào)整,使結(jié)果仍為壓縮BCD碼。微處理器中,運(yùn)算器的核心是二進(jìn)制加法器,逢二進(jìn)一,當(dāng)BCD碼≤

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論