版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
本教案內(nèi)容第3章8086CPU指令系統(tǒng)匯編語言指令8086指令分類數(shù)據(jù)與轉(zhuǎn)移地址的尋址方式數(shù)據(jù)傳送類指令算術運算類指令邏輯運算類指令移位類指令標志位操作指令轉(zhuǎn)移指令循環(huán)控制指令子程序調(diào)用返回指令中斷調(diào)用返回指令字符串操作指令I/O輸入輸出指令其它指令宏指令13.循環(huán)控制指令
為了便于循環(huán)控制,8086/8088CPU專門設置了一類循環(huán)控制類指令:3.10循環(huán)控制指令23.10循環(huán)控制指令格式:LOOPLABEL
;(CX)←(CX)-1,(CX)≠0時轉(zhuǎn)LABELLOOPZ/LOOPELABEL
;(CX)←(CX)-1,(CX)≠0且ZF=1時轉(zhuǎn)LABELLOOPNZ/LOOPNELABEL
;(CX)←(CX)-1,(CX)≠0且ZF=0時轉(zhuǎn)LABELJCXZLABEL
;CX=0時轉(zhuǎn)LABEL說明:循環(huán)控制指令的尋址方式均為段內(nèi)直接轉(zhuǎn)移,而且為短轉(zhuǎn)移方式。33.10循環(huán)控制指令1.LOOP指令LOOP(Loop)指令為常用的循環(huán)控制指令,(CX)的內(nèi)容為設定的循環(huán)次數(shù),每循環(huán)一次(CX)的內(nèi)容減1,直到(CX)為零時退出循環(huán)。其循環(huán)結(jié)構(gòu)為: MOVCX,次數(shù) ;循環(huán)準備標號: ;循環(huán)體 LOOP標號這里的“標號”與“LOOP標號”指令之間至多包含128字節(jié),這是因為循環(huán)控制指令為短轉(zhuǎn)移指令。
43.10循環(huán)控制指令2.LOOPZ/LOOPE指令LOOPZ/LOOPE(Loopifzero/equal)指令與LOOP指令類似,只是當(CX)≠0且ZF=1時才轉(zhuǎn)至LABEL,因此是否循環(huán),除了與設定的循環(huán)次數(shù)有關外,還與循環(huán)中設定的條件是否滿足有關。例如:MOVCX,10
L1:
CMPAX,BX;若(AX)≠(BX),即ZF=0,則退出循環(huán)LOOPZL1這種指令非常適合于在指定區(qū)域中查找不同的“字符”,當找到不同的“字符”時,會自動提出循環(huán)。
53.10循環(huán)控制指令3.LOOPNZ/LOOPNELOOPNZ/LOOPNE(Loopifnotzero/notequal)指令的功能與LOOPZ/LOOPE指令相反,只是當(CX)≠0且ZF=0時才轉(zhuǎn)至LABEL。例如:MOVCX,10
L2:
CMPAX,BX;若(AX)=(BX),即ZF=1,則退出循環(huán)LOOPNZL2這種指令非常適合于在區(qū)域中查找指定的“字符”,當找到指定的“字符”時,會自動退出循環(huán)。
63.10循環(huán)控制指令4.JCXZ指令JCXZ(JumpifregisterCX=0)指令經(jīng)常與循環(huán)指令配合使用。如果循環(huán)次數(shù)(CX)設定為0,則要循環(huán)65536次(最大的循環(huán)次數(shù)),這一點與常規(guī)表示不同。為此,應該在進入循環(huán)前檢查(CX)的值,如果(CX)為0,則跳過循環(huán),這時可以采用JCXZ指令完成,其結(jié)構(gòu)為:MOVCX,VAR1 ;設定循環(huán)次數(shù),可能為0JCXZDONE ;當(CX)=0時,跳過循環(huán) ;循環(huán)準備L3: ;循環(huán)體LOOPL3DONE:7本教案內(nèi)容第3章8086CPU指令系統(tǒng)匯編語言指令8086指令分類數(shù)據(jù)與轉(zhuǎn)移地址的尋址方式數(shù)據(jù)傳送類指令算術運算類指令邏輯運算類指令移位類指令標志位操作指令轉(zhuǎn)移指令循環(huán)控制指令子程序調(diào)用返回指令中斷調(diào)用返回指令字符串操作指令I/O輸入輸出指令其它指令宏指令83.11子程序調(diào)用返回指令概念:子程序為功能確定、且獨立的程序段。優(yōu)點:可以將任何一段獨立的程序歸整為一個子程序,當需要該段程序時,只需調(diào)用子程序即可,調(diào)用后會自動返回到調(diào)用指令的下一條指令。因此采用子程序設計時,可以簡化程序設計。從調(diào)試程序的角度,由于原本在多處出現(xiàn)的程序段,縮減為子程序調(diào)用指令,使調(diào)試程序更加方便。93.11子程序調(diào)用返回指令缺點:采用子程序設計后。由于調(diào)用子程序和從子程序中返回需要執(zhí)行指令,并且為保護某些寄存器的內(nèi)容,需要進行壓入堆棧和彈出堆棧的操作,因此會使程序執(zhí)行速度受到一定的影響。
103.11子程序調(diào)用返回指令實現(xiàn):子程序調(diào)用是通過自動修改(IP)和/或(CS)的內(nèi)容實現(xiàn)的。為了確保子程序調(diào)用后能夠返回到調(diào)用指令之后,CALL指令會自動保存返回地址(IP和/或CS),而RET指令會自動返回到CALL指令的下一條指令。
113.11子程序調(diào)用返回指令一、子程序調(diào)用指令CALL子程序調(diào)用指令CALL(Callprocedure)有兩種格式:CALLLABEL ;調(diào)用入口地址為;標號LABEL的子程序CALLOPR ;調(diào)用子程序,其入口地址;為操作數(shù)OPR的內(nèi)容
123.11子程序調(diào)用返回指令CALLLABEL ;調(diào)用入口地址為;標號LABEL的子程序分三種情況:(1)當標號LABEL與CALL指令不在同一個段內(nèi)時,子程序調(diào)用在段間進行,其完成的操作有:CS入棧,IP入棧;(IP)←LABEL的偏移地址;(CS)←LABEL的段地址。指令的尋址方式為段間直接尋址。133.11子程序調(diào)用返回指令(2)當標號LABEL與CALL指令在同一個段內(nèi),且可以采用8位有符號數(shù)表示其相對位移量時,則子程序調(diào)用在段內(nèi)進行,其完成的操作有:IP入棧;(IP)←(IP)+DISP8。指令的尋址方式為段內(nèi)直接尋址,也稱為相對尋址。(3)當標號LABEL與CALL指令在同一個段內(nèi),且需要采用16位有符號數(shù)表示其相對位移量時,則子程序調(diào)用在段內(nèi)進行,其完成的操作有:IP入棧;(IP)←(IP)+DISP16。指令的尋址方式為段內(nèi)直接尋址,也稱相對尋址。143.11子程序調(diào)用返回指令CALLOPR ;調(diào)用子程序,其入口地址;為操作數(shù)OPR的內(nèi)容分為三種情況:(1)當OPR為16位的通用寄存器REG16時,則子程序調(diào)用在段內(nèi)進行,其完成的操作有:IP入棧;(IP)←(REG16)。指令的尋址方式為段內(nèi)間接尋址。153.11子程序調(diào)用返回指令(2)當OPR為16位的存儲單元RAM時,則子程序調(diào)用在段內(nèi)進行,其完成的操作有:IP入棧;(IP)←(RAM)。指令的尋址方式為段內(nèi)間接尋址。(3)當OPR為32位的存儲單元RAM時,則子程序調(diào)用在段間進行,其完成的操作有:CS入棧,IP入棧;(IP)←(RAM),(CS)←(RAM+2)。指令的尋址方式為段間間接尋址。163.11子程序調(diào)用返回指令二、子程序返回指令RET子程序返回指令RET(Returnfromprocedure)有三種格式:RET ;用于段內(nèi)子程序的返回,完成IP出棧,即(IP)←(SP)RETF ;用于段間子程序的返回,完成IP出棧,CS出棧RETn ;完成RET(或RETF)指令功能后,(SP)←(SP)+n173.11子程序調(diào)用返回指令三、過程定義在IBMPC匯編過程中,子程序通常以過程方式編寫。過程定義格式:過程名PROC[類型]
RET過程名ENDP其中,過程名是用戶給子程序起的名字,它可以看作為標號,具有段地址、偏移地址和類型的屬性。子程序的類型可以取NEAR(近程過程,可供段內(nèi)調(diào)用)和FAR(遠程過程,可供段間調(diào)用),當類型缺省時,表示NEAR(近程過程)。
18一個子程序名一但定義,就具有以下三個屬性段地址段內(nèi)偏移地址類型FARNEAR(可缺?。┚褪亲映绦虻谝粭l指令的地址3.11子程序調(diào)用返回指令193.11子程序調(diào)用返回指令子程序還可以是另一種形式:〈標號〉:
RET20子程序調(diào)用與返回指令應用結(jié)構(gòu)①段內(nèi)子程序調(diào)用與返回;主程序CODESEGMENTASSUMECS:CODESTART:
……3.11子程序調(diào)用返回指令21………;子程序SUB1SUB1PROCNEAR
RET;SUB1ENDPCODEENDSENDSTARTCALL
NEARPTR
SUB1可以省略●IP←((SP))●SP←(SP)+2●SP←(SP)-2●((SP))←返回地址(IP)●IP←(IP)+16位DISP3.11子程序調(diào)用返回指令22
;主程序CODEMSEGMENTASSUMECS:CODEMSTART:CALLFARPTRSUB2MOVAH,4CHINT21HCODEMENDS……
;子程序CODESSEGMENTASSUMECS:CODESSUB2PROCFAR
RETF;也可以寫成RETSUB2ENDPCODESENDSENDSTART……①IP←((SP))SP←(SP)+2②CS←((SP))SP←(SP)+2①SP←(SP)-2((SP))←返回地址(CS)②SP←(SP)-2((SP))←返回地址(IP)③IP←OFFSETSUB2CS←SEGSUB2233.11子程序調(diào)用返回指令例3.32子程序設計,編寫子程序?qū)崿F(xiàn)統(tǒng)計一個字(AX)中“1”的個數(shù)。解:利用移位指令或循環(huán)移位指令,每次對CF位進行檢測位:當CF=1時,則總個數(shù)加1;當CF=0時,則總個數(shù)不變。這種操作可以采用有條件轉(zhuǎn)移指令來實現(xiàn),但更方便的方式是采用ADC指令實現(xiàn)。子程序如下:
243.11子程序調(diào)用返回指令COUNTER1PROCNEARPUSHAX MOVCX,16 XORBL,BLCOU1: SHRAX,1 ADCBL,0 LOOPCOU1POPAXRETCOUNTER1ENDP253.11子程序調(diào)用返回指令例3.33子程序應用。利用上例設計的子程序,統(tǒng)計字型變量VAR1中1的個數(shù)。解:在數(shù)據(jù)段中定義變量VAR1和CounterVar1:
VAR1 DW 1234H CounterVar1 DB?則可在代碼段中編寫程序: MOVAX,VAR1 CALLCOUNTER1 MOV CounterVar1,BL執(zhí)行后,結(jié)果單元CounterVar1的值為5,說明1234H中包含有5個“1”。
26本教案內(nèi)容第3章8086CPU指令系統(tǒng)匯編語言指令8086指令分類數(shù)據(jù)與轉(zhuǎn)移地址的尋址方式數(shù)據(jù)傳送類指令算術運算類指令邏輯運算類指令移位類指令標志位操作指令轉(zhuǎn)移指令循環(huán)控制指令子程序調(diào)用返回指令中斷調(diào)用返回指令字符串操作指令I/O輸入輸出指令其它指令宏指令273.12中斷調(diào)用與返回指令計算機在程序運行過程中,由于發(fā)生了某些“緊急事件”,需要進行特殊處理(轉(zhuǎn)向中斷服務子程序執(zhí)行),處理后返回到程序中斷處繼續(xù)執(zhí)行,這種過程稱為中斷處理過程。這里的“緊急事件”可以是由硬件產(chǎn)生的,例如系統(tǒng)掉電、硬件故障、定時計數(shù)器溢出等;可以是執(zhí)行指令產(chǎn)生的,例如除法溢出等;還可以是專門的中斷調(diào)用指令所產(chǎn)生的。本節(jié)主要介紹專門的中斷調(diào)用指令、中斷服務子程序的結(jié)構(gòu)和中斷返回指令。283.12中斷調(diào)用與返回指令一、中斷調(diào)用指令INT中斷調(diào)用指令INT(Interrupt)的格式為:
INT n這表示調(diào)用第n號中斷,n為中斷類型號,其值可以是0~255。當執(zhí)行該指令時,會進行下列操作:PSW、CS、IP入棧;清除IF、TF標志;從中斷向量表中取出中斷向量(中斷向量為中斷服務子程序的入口地址);轉(zhuǎn)到中斷服務子程序進行執(zhí)行;中斷服務子程序的最后一條指令應該是中斷返回指令,執(zhí)行該指令可以返回到程序中斷處繼續(xù)執(zhí)行。293.12中斷調(diào)用與返回指令二、中斷返回指令IRET中斷返回指令IRET(Interruptreturn)的格式為:
IRET表示從中斷服務子程序返回主程序。執(zhí)行該指令時,會完成IP、CS、PSW的出棧操作,其次序與INTn指令的入棧次序相反。由于修改了IP和CS的內(nèi)容,從而實現(xiàn)的程序的返回功能。 303.12中斷調(diào)用與返回指令三、中斷向量表每個中斷服務子程序的入口地址(稱為中斷向量)為32位(16位的偏移地址和16位的段地址),占用4個地址單元。計算機中采用最低的1024個地址單元(稱為0頁)來存儲中斷向量,因此,n號中斷的中斷向量存放地址為:4×n,調(diào)用該中斷時,可以從該地址獲得中斷服務子程序的入口地址。313.12中斷調(diào)用與返回指令四、中斷服務子程序結(jié)構(gòu)由于中斷是隨時可能調(diào)用的程序,我們無法預知其調(diào)用的位置,這樣在設計中斷服務子程序時,應該確保所有寄存器的內(nèi)容保持不變。因此在中斷服務子程序的入口處,應該將用到的寄存器通過堆棧進行保護,在中斷程序的返回之前,從堆棧中恢復寄存器的內(nèi)容。中斷服務子程序的結(jié)構(gòu)為:323.12中斷調(diào)用與返回指令<中斷子程序名>: PUSHAX ;保護現(xiàn)場 PUSHSI
;中斷子程序主體 POPSI ;恢復現(xiàn)場 POPAX IRET ;中斷返回333.12中斷調(diào)用與返回指令五、系統(tǒng)功能調(diào)用IBMPC/XT機器提供了許多中斷服務子程序,在編寫程序時可以直接進行調(diào)用。系統(tǒng)功能調(diào)用分兩類:(1)BIOS功能調(diào)用,它是以系統(tǒng)中所支持的硬件為對象的,例如13H號功能為磁盤服務,17H號功能為打印機服務;(2)DOS功能調(diào)用,它以軟件方式支持的功能,例如常用的DOS功能調(diào)用有21H、20H、25H、26H等,詳細說明參見附錄B。34本教案內(nèi)容第3章8086CPU指令系統(tǒng)匯編語言指令8086指令分類數(shù)據(jù)與轉(zhuǎn)移地址的尋址方式數(shù)據(jù)傳送類指令算術運算類指令邏輯運算類指令移位類指令標志位操作指令轉(zhuǎn)移指令循環(huán)控制指令子程序調(diào)用返回指令中斷調(diào)用返回指令字符串操作指令I/O輸入輸出指令其它指令宏指令35所謂字符串是指一組代碼或數(shù)據(jù),并不一定是常規(guī)的由字符構(gòu)成的。字符串操作指令就是對這組代碼或數(shù)據(jù)進行相同功能處理的指令。字符串存放在一個連續(xù)的存儲區(qū)域中。3.13字符串操作指令363.13字符串操作指令8086系統(tǒng)提供了5類字符串操作指令:字符串傳送MOVS(Movebyteorwordstring)字符串比較CMPS(Comparebyteorwordstring)字符串掃描SCAS(Scanbyteorwordstring)字符串裝入LODS(Loadbyteorwordstring)字符串存儲STOS(Storebyteorwordstring)
373.13字符串操作指令由于這類指令要對一組代碼進行操作,希望能夠成批處理數(shù)據(jù),這需要字符串指令與重復前綴配合使用。重復前綴REP(Repeatstringoperation)重復前綴REPZ/REPE(Repeatstringoperationwhileequal/zero)重復前綴REPNZ/REPNE(Repeatstringoperationwhilenotequal/notzero)38?字符串處理指令既可以按字節(jié)操作,也可以按字操作,且DST和SRC的尋址方式均為隱含尋址。這類指令要遵循的共同約定如下:3.13字符串操作指令39①若源串在存儲器,則存儲器地址由DS:SI確定;
若源串在寄存器,則:字操作時,在AX中字節(jié)操作時,在AL中3.13字符串操作指令40②
若目的串在存儲器,則存儲器地址必須由ES:DI確定;若目的串在寄存器,則:字操作時,在AX中字節(jié)操作時,在AL中3.13字符串操作指令41
③字符串操作指令CPU執(zhí)行后,(SI)或(DI)會自動地修改,其修改方向受DF控制。3.13字符串操作指令421時,會自動地減1或20時,會自動地增1或2當DF=受操作類型控制,字節(jié)操作時,增/減1字操作時,增/減23.13字符串操作指令43④字符串處理指令的重復次數(shù)。
(重復執(zhí)行的次數(shù))→CX3.13字符串操作指令44?
字符串操作指令有:
3.13字符串操作指令45助記符格式主要功能MOVSDST,SRCMOVSBMOVSW(ES:DI)←(DS:SI)字操作時:(SI)←(SI)±2(DI)←(DI)±2字節(jié)操作時:(SI)←(SI)±1(DI)←(DI)±1字節(jié)傳送字傳送3.13字符串操作指令一、字符串傳送指令在MOVSDST,SRC中,當DST和SRC同為字節(jié)類型時,等同于MOVSB指令;當DST和SRC同為字類型時,等同于MOVSW指令。463.13字符串操作指令例如指令MOVSVAR1,VAR2并不是完成VAR1變量的內(nèi)容傳送到VAR2,而是將(DS:SI)中的內(nèi)容傳送到由(ES:DI)指定的位置,當VAR1和VAR2均為字節(jié)型變量時,該指令等同于MOVSB,當VAR1和VAR2均為字型變量時,該指令等同于MOVSW。473.13字符串操作指令說明:字符串傳送指令對PSW的標志位無影響。字符串傳送指令每次只能完成一個字和字節(jié)的傳送,而實際應用中,經(jīng)常需要將一塊存儲區(qū)域的內(nèi)容整體搬移到另一個位置,為此,8086提供了重復前綴。483.13字符串操作指令二、重復前綴有三種形式:REPREPZ/REPEREPNZ/REPNE它們放在字符串操作指令之前,表示重復執(zhí)行該指令,重復次數(shù)由CX決定。49助記符格式主要功能REPMINST
當(CX)≠0時,重復執(zhí)行MINST,(CX)-1→(CX);MINSTSTOSWSTOSBMOVSWMOVSB3.13字符串操作指令1.重復前綴REP相當于LOOP指令503.13字符串操作指令當REP與MOVS指令配合時,有REPMOVSB
;(ES:DI)←(DS:SI)(字節(jié)傳送),;(SI)←(SI)±1,(DI)←(DI)±1,;(CX)←(CX)-1,(CX)≠0時重復執(zhí)行,;即當(CX)=0時退出循環(huán)REPMOVSW
;與REPMOVSB指令類似,;只是每次傳送一個字51助記符格式主要功能
REPE/REPZCINST
當(CX)≠0時,且ZF=1時,重復執(zhí)行CINST,(CX)-1→(CX);3.13字符串操作指令CINSTCMPSSCAS2.重復前綴REPZ/REPE相當于LOOPZ/LOOPE指令52助記符格式主要功能
REPNE/REPNZCINST當(CX)≠0時,且ZF=0時,重復執(zhí)行CINST,(CX)-1→(CX).3.13字符串操作指令CINSTSCASCMPS3.重復前綴REPNZ/REPNE相當于LOOPNZ/LOOPNE指令53助記符格式主要功能CMPSDST,SRCCMPSBCMPSW(DS:SI)-(ES:DI)建立標志字操作時:(SI)←(SI)±2(DI)←(DI)±2字節(jié)操作時:(SI)←(SI)±1(DI)←(DI)±1字節(jié)比較字比較3.13字符串操作指令三、字符串比較指令543.13字符串操作指令指令CMPS與CMP類似,比較結(jié)果不進行保存,只是用于設置PSW中的標志位,但是,在字符串比較指令中,采用“源操作數(shù)”減去“目的操作數(shù)”,而在CMP指令中,采用“目的操作數(shù)”減去“源操作數(shù)”。因此,對比較結(jié)果的轉(zhuǎn)移的條件是不同的:CMPDST,SRCCMPSDST,SRCJGABCJGABC當(DST)>(SRC)時轉(zhuǎn)ABC當(ES:DI)<(DS:SI)時轉(zhuǎn)ABC這一點應特別引起注意。553.13字符串操作指令字符串比較指令會正常影響PSW中的6個標志位。CMPS指令經(jīng)常與REPZ/REPE、REPNZ/REPNE配合使用,其含義有所不同。1.REPZCMPS比較兩字符串時,當遇到第一個不相同的字符時,就跳出比較循環(huán)(ZF=0)。2.REPNZCMPS比較兩字符串時,當遇到第一個相同的字符時,就跳出比較循環(huán)(ZF=1)。56助記符格式主要功能SCASDSTSCABSCAW字掃描時:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級數(shù)學(四則混合運算)計算題專項練習與答案匯編
- 校園停車設施規(guī)劃與交通流線優(yōu)化實踐
- 武漢市金融租賃合同
- 設備購買合同
- 加工廠出租合同
- 2025年華東師大版必修1地理上冊月考試卷含答案
- 2025年人教新課標選修3物理上冊階段測試試卷含答案
- 2025年人教A版七年級物理上冊月考試卷含答案
- 2025年外研版三年級起點九年級數(shù)學下冊階段測試試卷含答案
- 2025年人教版選擇性必修1化學上冊階段測試試卷含答案
- 【公開課】同一直線上二力的合成+課件+2024-2025學年+人教版(2024)初中物理八年級下冊+
- 高職組全國職業(yè)院校技能大賽(嬰幼兒照護賽項)備賽試題庫(含答案)
- 2024年公安部直屬事業(yè)單位招聘筆試參考題庫附帶答案詳解
- NB-T 47013.15-2021 承壓設備無損檢測 第15部分:相控陣超聲檢測
- 裝飾工程施工技術ppt課件(完整版)
- SJG 05-2020 基坑支護技術標準-高清現(xiàn)行
- 汽車維修價格表
- 司爐崗位應急處置卡(燃氣)參考
- 10KV供配電工程施工組織設計
- 終端攔截攻略
- 藥物外滲處理及預防【病房護士安全警示教育培訓課件】--ppt課件
評論
0/150
提交評論