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

下載本文檔

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

文檔簡介

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

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

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

×

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

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

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

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

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

指令中若指明BP為間址寄存器,則操作數(shù)在堆棧段中。此時,用SS寄存器內(nèi)容作段地址,操作數(shù)的實際地址PA=SS×10H+BPMOVAX,[BP] ;AX←SS:[BP]若在指令中規(guī)定是段超越的,則BP的內(nèi)容也可以與其它的段寄存器相加,形成操作數(shù)地址。MOVAX,DS:[BP] ;AX←DS:[BP]演示第3章:(3)寄存器相對尋址方式指定BX,BP,SI,DI的內(nèi)容進行的是間接尋址。但是,和寄存器間接尋址方式不同的是:指令中還要指定一個8位或16位的位移量DISP,操作數(shù)的有效地址EA則等于間址寄存器內(nèi)容和位移量之和,結(jié)果按16位歸算。寄存器間接尋址寄存器相對尋址第3章:(3)寄存器相對尋址方式對于寄存器為BX,SI,DI的情況,用段寄存器DS的內(nèi)容作段首址;而對于寄存器BP,則使用段寄存器SS的內(nèi)容作段首址。操作數(shù)的實際地址為:第3章:(3)寄存器相對尋址方式演示MOVAX,[SI+06H] ;AX←DS:[SI+06H]MOVAX,06H[SI] ;AX←DS:[SI+06H]采用寄存器相對尋址的指令,也可使用段超越前綴。第3章:(4)基址變址尋址方式通常將BX和BP看作基址寄存器,將SI、DI看作變址寄存器。在基址變址尋址方式中存儲器操作數(shù)的有效地址EA由指令指定的一個基址寄存器和一個變址寄存器的內(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計算公式中,BX可與SI或DI組合,BP也可與SI或DI組合,但BX不可與BP組合第3章:(5)相對基址變址尋址方式操作數(shù)的有效地址EA是由指令指定的一個基址寄存器和一個變址寄存器的內(nèi)容再加上8位或16位位移量之和。第3章:(5)相對基址變址尋址方式對應(yīng)BX基址寄存器默認是DS,對應(yīng)BP基址寄存器默認是SS;可用段超越前綴改變。演示MOVAX,[BX+DI+6] ;AX←DS:[BX+DI+6]MOVAX,6[BX+DI]MOVAX,6[BX][DI]第3章:存儲器尋址方式中的變量變量指示內(nèi)存中的數(shù)據(jù),變量名具有地址屬性。存儲器尋找方式中經(jīng)常采用變量形式變量的定義WVARDW1234H;定義16位變量WVAR,具有初值1234H;假設(shè)其偏移地址為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]對尋址方式作一總結(jié)對尋址方式作一總結(jié)對尋址方式作一總結(jié)對尋址方式作一總結(jié)例題:分別指出下列指令中源操作數(shù)和目的操作數(shù)的尋址方式。若是存儲器尋址,試用表達式表示出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)容和一些存儲單元的內(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的基址變址尋址方式把存儲器中的一個字傳送至AX寄存器中。

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

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

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

4.

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

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

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

;字傳送;假設(shè)WVAR是一個字變量,定義如下: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指令--存儲器傳送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指令也并非任意傳送!立即數(shù)段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存儲器

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

MOVAL,050AH ;非法指令,

MOVSI,DL ;非法指令,

修正:;MOVAX,050AH

修正: ;MOVDH,0

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

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

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

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

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

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

;MOVAX,BUF1

;MOVBUF2,AX

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

;MOVAL,BUF1

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

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è)講評: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.

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

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

;等同于XCHGWVAR,AX

XCHGAL,BYTEPTRWVAR+1

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

棧底0010H00FFH00FEH00FDHSP0000H初始化堆棧:堆棧只有兩種基本操作:進棧和出棧,對應(yīng)兩條指令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(設(shè)AX=1234H)PUSHBX(設(shè)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演示堆棧操作注意事項:堆棧操作的單位是字,進棧和出棧只針對字量字量數(shù)據(jù)從棧頂壓入和彈出時,都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)CS寄存器可進棧,但不能隨意彈出一個數(shù)據(jù)到CS堆棧容量有限,因此進棧和出棧要成對出現(xiàn),否則將有數(shù)據(jù)殘留在堆棧中,時間一長,堆棧會滿的!進棧和出棧指令用于程序保存或恢復(fù)數(shù)據(jù)或中斷時保護現(xiàn)場和恢復(fù)現(xiàn)場。輸入/輸出(I/O)指令執(zhí)行輸入指令時,CPU可以從一個8位端口讀入1個字節(jié)到AL中,也可以從兩個連續(xù)的8位端口讀1個字到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所指的兩個端口輸一個字到AX,低地址端口的值輸?shù)紸L,高地址端口的值輸?shù)紸H直接端口尋址DX寄存器間接端口尋址I/O尋址(2)輸出指令OUTPORT,AL;將AL中的一個字節(jié)數(shù)據(jù)輸出到PORT端口OUTPORT,AX;將AX中的字數(shù)據(jù)輸出到PORT和PORT+1兩端口OUTDX,AL;將AL中的字節(jié)輸出到DX所指的端口OUTDX,AX;將AL中低位字節(jié)輸出到DX所指的端口,同時將AH中的高位字節(jié)輸出到DX+1所指的端口例:從端口2F0H輸入數(shù)據(jù)的程序段為:MOVDX,02F0HINAX,DX8086的地址——目標傳送指令是用來對尋址機構(gòu)進行控制的。此類指令傳送到16位目標寄存器中的是存儲器操作數(shù)的地址,而不是它的內(nèi)容。3.地址——目標傳送指令這類指令有3條:LEALDSLES將存儲器操作數(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該指令完成一個32位地址指針的傳送。地址指針包括段地址和偏移量部分。指令把源操作數(shù)src指定的4個字節(jié)地址指針傳送到兩個目標寄存器。(2)數(shù)據(jù)段指針送寄存器LDS指令LDSr16,src;其中,地址指針的前2個字節(jié)(低地址中的字)傳到某一寄存器r16(通常為SI),后2個字節(jié)(高地址中的字)傳到DS中。例:LDSSI,[2100]在指令執(zhí)行前,設(shè)(DS)=3000H,在DS段中,有效地址EA為2100~2103H的4個字節(jié),其中存放著一個地址指針,如圖所示,則指令執(zhí)行后,SI=0140H,DS=2000H該指令和LDSr16,src功能類似,不同的只是用ES代替DS,這時常指定DI作寄存器r16。(3)附加段指針送寄存器LES指令LESr16,src;其中,地址指針的前2個字節(jié)傳到某一寄存器R16中,后2個字節(jié)傳到ES中。使用LDS和LES指令時應(yīng)注意:R16不能使用段寄存器Src一定是存儲器操作數(shù),其尋址方式可以是以前所學(xué)存儲器尋址中的一種

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

OFDFIFTFSFZF

AF

PF

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

OFDFIFTFSFZF

AF

PF

CFD7D6D4D2D0AH(3)標志寄存器的入棧指令(PUSHF)和出棧指令(POPF)PUSHF;標志寄存器的內(nèi)容入棧同時修改堆棧指針:(SP-2)→SP。POPF;將堆棧頂部的一個字彈出到標志寄存器,同時修改堆棧指針:(SP+2)→SP。這兩條指令分別可以用作在中斷服務(wù)程序和子程序的應(yīng)用中,保存主程序的標志和恢復(fù)主程序的標志。MOV指令的功能XCHG指令的功能XLAT指令的功能PUSH指令的功能POP指令的功能LDS指令DS=3000H01H00H20H40HEA=2100H32100HSIDS總結(jié)一、數(shù)據(jù)傳送類指令通用傳送指令(MOV、PUSH、POP、XCHG)累加器專用傳送指令(IN、OUT)地址——目標傳送指令(LEA、LDS、LES)習(xí)題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]單元中的內(nèi)容為260FH,寫出下列每條指令單獨執(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六個數(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(一個字的內(nèi)容)

([BX])==

H(21000H)=

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

H,BX=

H(41200H)=

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

dst,src

;加法:dst←dst+src+CF

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

dst,src

;減法:dst←dst-src-CF

;SBB指令除完成SUB減法運算外,還要減去借位CF,結(jié)果送到目的操作數(shù)第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指令將目的操作數(shù)減去源操作數(shù),但差值不回送目的操作數(shù)比較指令通過減法運算影響狀態(tài)標志,用于比較兩個操作數(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ù)指令與加法和減法指令實現(xiàn)的加1和減1不同的是:INC和DEC不影響CF標志INCSI ;SI←SI+1DECBYTEPTR[SI] ;[SI]←[SI]-1第3章:(5)求補指令NEG(negtive)NEGreg/mem

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論