版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3隱含規(guī)定源串必須放在數(shù)據(jù)段,用SI尋址。DS:[SI]表示元素;
目的串必須在附加段,用DI尋址。ES:[DI]表示元素;要習(xí)慣元素(存儲(chǔ)單元)的表達(dá)方式!4
配合使用重復(fù)前綴REP
指令加上重復(fù)前綴,如虎添翼。
串計(jì)數(shù)器必須用CX
先從總體上了解此類(lèi)指令的操作。源:::目:SI+NSIDI+NDISISI-NDIDI-N用CLD(ClearDF)設(shè)置DF=0,增址修改;也可用STD,設(shè)置減址AL/AX/EAXAL/AX/EAX關(guān)鍵字AL/AX/EAXDF:標(biāo)志寄存器中的D10string1
string2
N=1/2/4
數(shù)據(jù)段
附加段
DS
ES
串傳送MOVSB/W/DDS:[SI]
ES:[DI]串裝入LODSB/W/DDS:[SI]AL/AX/EAX串存儲(chǔ)STOSB/W/DAL/AX/EAX
ES:[DI]串比較CMPSB/W/DDS:[SI]—
ES:[DI]串掃描SCASB/W/D關(guān)鍵字(AL/AX/EAX)—ES:[DI](1)串傳送指令MOVeString基本格式
MOVSB/MOVSW/MOVSD
字節(jié)字雙字
指令的三個(gè)‘動(dòng)作’:
DS:[SI]
ES:[DI](傳送)
SI±NSI(修改“源”)
DI±NDI(修改“目的”)CLD
CLearDFDF=0,增址修改STDSeTDF
DF=1,減址修改使用該指令的輔助指令(使用該指令的準(zhǔn)備工作)1)SI,DI賦值;2)確定增址或減址;3)傳送長(zhǎng)度
*帶有重復(fù)前綴REP的格式(
REPeat前綴助記符,不能獨(dú)立使用)格式:REP
MOVSB/W/D(重復(fù)次數(shù)由CX內(nèi)容確定)功能:每傳送一個(gè)字節(jié),修改指針。CX-1,如果CX≠0,繼續(xù)傳送例:把數(shù)據(jù)段BLOCK單元開(kāi)始的100個(gè)字節(jié),依次傳送到附加段BUF開(kāi)始的內(nèi)存區(qū)。用三種方法完成傳送,目的:學(xué)習(xí)指令,比較指令。MOVSB解1:用MOV指令
MOVSI,OFFSETBLOCK ;指向源串
MOVDI,OFFSETBUF ;指向目的串
MOVCX,100 ;計(jì)數(shù)器初值LAST:. MOVAL,[SI]
;從源串取一字節(jié)
MOVES:[DI],AL
;送入目的串
INCSI
;指向源串下一個(gè)字符
INCDI
;指向目的串下一個(gè)字符
LOOPLAST
;傳送100個(gè)字節(jié)
……….. ;CX-1,不為0轉(zhuǎn)LAST解2:用MOVSB指令配合核心指令的輔助指令
MOVSI,OFFSETBLOCK
;指向源串
MOVDI,OFFSETBUF
;指向目的串
CLD
;增址修改.. MOVCX,100 ;計(jì)數(shù)器初值
LAST:.MOVSB
;傳送,修改地址指針
LOOPLAST ;100個(gè)字節(jié)未完,繼續(xù)
………. ;已完,……..解3用帶重復(fù)前綴的傳送指令REPMOVSB配合核心指令的輔助指令
MOVSI,OFFSETBLOCK
;指向源串
MOVDI,OFFSETBUF
;指向目的串
MOVCX,100
;計(jì)數(shù)器初值
CLD
;增址修改
REP.MOVSB
;傳送100個(gè)字節(jié)
……….(2)取串指令LOaDfromString
基本格式LODSB/W/DDS:[SI]
AL/AX/EAX
把DS:[SI]中的一個(gè)元素送入AL/AX/EAX*沒(méi)有帶前綴的格式(3)存串指令STOreintoString
基本格式STOSB/W/DAL/AX/EAXES:[DI]
把一個(gè)元素AL/AX/EAX送入目的存儲(chǔ)區(qū)*帶有重復(fù)前綴REP的形式REPSTOSB/W/D(4)串比較指令CoMPareString*基本格式CMPSB/W/DDS:[SI]
和ES:[DI]的當(dāng)前元素比較,并按DF標(biāo)志修改地址。當(dāng)前元素相等?ZF標(biāo)志置1ZF標(biāo)志置0指令結(jié)束CMPS指令功能示意*指令的三個(gè)‘動(dòng)作’:
DS:[SI]―ES:[DI](比較)
SI±NSI(修改)
DI±NDI(修改)*帶有重復(fù)前綴的串比較指令
格式1:REPE
CMPSB/W/D(REPE=REPZ)
比較,如果相等且CX≠0,重復(fù)基本指令CMPSB/W/DCX=0?CX-1CX
比較當(dāng)前元素根據(jù)DF,修改SI,DI當(dāng)前元素相等?停止重復(fù)操作的條件:重復(fù)次數(shù)計(jì)數(shù)器CX等于0或ZF=0;
CX等于0:計(jì)數(shù)器為0,應(yīng)當(dāng)停;
ZF=0:表明不相等,不滿(mǎn)足繼續(xù)比較的條件,即使CX不為0也應(yīng)當(dāng)停。繼續(xù)重復(fù)執(zhí)行的條件:重復(fù)次數(shù)計(jì)數(shù)器CX不等于0且標(biāo)志ZF=1
在比較次數(shù)沒(méi)有完成的情況下(CX不等于0),又滿(mǎn)足繼續(xù)比較的條件(ZF=1),所以應(yīng)當(dāng)繼續(xù)。
指令結(jié)束,若ZF=1,表明兩個(gè)串完全相等;若ZF=0,表明至少有一個(gè)元素不相等格式2:REPNE
CMPSB/W/D
比較,不相等且CX≠0,重復(fù)執(zhí)行基本指令CMPSB/W/D
停止重復(fù)的條件:重復(fù)次數(shù)計(jì)數(shù)器CX等于0或ZF=1;
CX等于0:計(jì)數(shù)器為0,應(yīng)當(dāng)停;
ZF=1:表明相等,不滿(mǎn)足繼續(xù)比較的條件,也應(yīng)當(dāng)停。繼續(xù)重復(fù)執(zhí)行的條件:重復(fù)次數(shù)計(jì)數(shù)器CX不等于0且標(biāo)志ZF=0
在比較次數(shù)沒(méi)有完成的情況下(CX不等于0),又滿(mǎn)足繼續(xù)比較的條件(ZF=0),所以應(yīng)當(dāng)繼續(xù)。CX=0?CX-1CX
比較當(dāng)前元素根據(jù)DF,修改SI,DI當(dāng)前元素相等?指令結(jié)束,若ZF=0,表明兩個(gè)串對(duì)應(yīng)元素都不相等;若ZF=1,表明至少有一個(gè)元素相等配合核心指令REPECMPSB的輔助指令例:比較ST1,ST2兩個(gè)字符串,若二者相等,令A(yù)L=0;不相等令A(yù)L=FFH。設(shè)長(zhǎng)度為20字節(jié)。MOVSI,OFFSETST1MOVDI,OFFSETST2MOVCX,20CLD
REPECMPSB;元素相等,重復(fù)比較,CX=0退出。
;如果有元素不相等,也退出
JNZNEQU;兩個(gè)串不相等,轉(zhuǎn)
XORAL,AL;串相等,設(shè)置AL=0JMPFINISH;無(wú)條件轉(zhuǎn)
NEQU:MOVAL,0FFH;不相等,AL=FFFINISH:HLT;HALT,暫停執(zhí)行指令
配合核心指令的輔助指令(5)串搜索指令SCAnString*基本格式:SCASB/W/D
功能:關(guān)鍵字―ES:[DI](搜索/比較)DI±N→DI(修改)*帶重復(fù)前綴串搜索指令格式1REPE
SCASB/W/D
功能:比較結(jié)果相等,重復(fù)執(zhí)行基本指令SCASB/W/D
格式1REPNE
SCASB/W/D
功能:比較結(jié)果不相等,重復(fù)執(zhí)行基本指令SCASB/W/D例:FIRSTDB-1,35,-75,55,5,-100,0,92,-8,10
MOVCX,10;
MOVDI,OFFSETFIRSTMOVAL,0;關(guān)鍵字
REPNESCASB自己看(6)從端口輸入字符串指令(7)向端口輸出字符串指令3.2.5控制轉(zhuǎn)移指令
(1)無(wú)條件轉(zhuǎn)移指令JMP
。。。。。。。
JMP目的地址 。。。。。。。 。。。。。。。
目的地址: 。。。。。。。此類(lèi)指令解決:如何向CPU提供目的地址的有關(guān)信息①短轉(zhuǎn)移(SHORT):在段內(nèi)的短距離(-128~127)轉(zhuǎn)移。
②段內(nèi)轉(zhuǎn)移(NEAR):目標(biāo)地址與轉(zhuǎn)移指令都在同一段內(nèi)。
③段間轉(zhuǎn)移(FAR):目標(biāo)地址與轉(zhuǎn)移指令分別位于不同的段內(nèi),轉(zhuǎn)移時(shí)CS和IP(EIP)中的值都要發(fā)生改變。格式1:段內(nèi)直接轉(zhuǎn)移
JMP標(biāo)號(hào)
*在指令字節(jié)中,直接提供目的地址的偏移地址(有效地址)格式2:段內(nèi)間接轉(zhuǎn)移
JMP寄存器操作數(shù)
JMP存儲(chǔ)器操作數(shù)*在指令字節(jié)中,把目的地址的偏移地址(有效地址)存放在寄存器或存儲(chǔ)器中。在指令中向CPU提供的是寄存器或存儲(chǔ)器地址信息。例:段內(nèi)間接轉(zhuǎn)移指令的應(yīng)用DATASEGMENTORG1000HPNTRDWP11;匯編后,P11的偏移地址送PNTR字單元
DWP12;P12的偏移地址送PNTR+2字單元;(設(shè)匯編后
P11偏移地址=0039H
;P12的偏移地址=003BH)DATAENDSTD窗口
DS:1000H3900
3B00CODESEGMENTASSUMECS:CODE,DS:DATA
START:………..
MOVBX,OFFSETPNTR;BX=1000H JMP[BX];從1000H,1001H中取16位地址;0039送IP,即轉(zhuǎn)向P11
;目的地址的偏移地址在存儲(chǔ)器中。
……….. MOVSI,PNTR+2;取偏移地址,SI=003BH JMPSI
;目的地址的偏移地址在寄存器中。
…………P11: ………… …………P12: …………
格式3:段間直接轉(zhuǎn)移
JMP標(biāo)號(hào).
段間間接轉(zhuǎn)移
JMP內(nèi)存操作數(shù)*段內(nèi)轉(zhuǎn)移只需把偏移地址送到IP即可,而段寄存器CS不變。段間轉(zhuǎn)移CS和IP都要發(fā)生變化?。?)條件轉(zhuǎn)移指令
JCC
格式:JCC
OP1
條件轉(zhuǎn)移地址標(biāo)號(hào)功能:滿(mǎn)足所給條件,轉(zhuǎn)移;不滿(mǎn)足,順序執(zhí)行下一條指令
條件
P69表3.3必須會(huì)查
1)無(wú)符號(hào)數(shù)條件轉(zhuǎn)移
JA 被減數(shù)大于減數(shù) JNBEJNA 被減數(shù)小于或等于減數(shù) JBEJNC 被減數(shù)大于或等于減數(shù). JNB/JAEJC 被減數(shù)小于減數(shù) JB/JNAE2)有符號(hào)數(shù)條件轉(zhuǎn)移
JG 被減數(shù)(真值)大于減數(shù)(真值) JNLEJGE
被減數(shù)(真值)大于或等于減數(shù)(真值)
JNLJL 被減數(shù)(真值)小于減數(shù)(真值) JNGEJLE
被減數(shù)(真值)小于或等于減數(shù)(真值) JNG備注:JB
JumponBelow;低于JNAE
JumponNotAboveorEqual;不高于或等于JNB.JumponNotBelow.;不低于JAE..JumponAboveorEqual.;高于或等于JE
JumponEqual;等于JNE.JumponNotEqual.;不等于JPE…JumponParityEven;偶JPO.JumponParityOdd.;奇JA
JumponAbove.;高于JNBE…JumponNotBeloworEqual.;不低于或等于JNA.JumponNotAbove;不高于JBE.JumponBeloworEqual;低于或等于JNLE
JumponNotLessorEqual;不小于或等于JNL.JumponNotLess;不小于轉(zhuǎn)JNGE
JumponNotGreaterorEqual;不大于或等于轉(zhuǎn)JNG.JumponNotGreater.;不大于轉(zhuǎn)說(shuō)明:*轉(zhuǎn)移范圍在16位尋址方式下為64K;32位尋址方式下為4G*均不影響標(biāo)志位*對(duì)于8086范圍為-128~+127(3)循環(huán)控制指令LOOP
格式:LOOP
短標(biāo)號(hào)
LOOPE/LOOPZ
短標(biāo)號(hào)
LOOPNZ/LOOPNE
短標(biāo)號(hào)
LCXZ
(CX=0)短標(biāo)號(hào)
P70表3.4給出了循環(huán)控制指令的循環(huán)條件4)過(guò)程調(diào)用/返回指令*過(guò)程:子程序*調(diào)用子程序和轉(zhuǎn)移的區(qū)別:是否返回。
*子程序入口地址:子程序第一條指令的第一個(gè)字節(jié)所在存儲(chǔ)單元的地址。所謂調(diào)用子程序,就是把其入口地址送入IP或CS:IP
*CALL類(lèi)指令有兩個(gè)操作:保存返回地址傳送入口地址*調(diào)用指令CALL格式:CALLOP1(子程序入口地址)功能:1)段內(nèi)調(diào)用
把返回地址的偏移地址壓入堆棧,完成“記跡”(記住回家的路),為返回主調(diào)程序作準(zhǔn)備。把子程序的入口地址的偏移地址送入IP,轉(zhuǎn)入子程序
2)段間調(diào)用*把返回地址的段基址和偏移地址都?jí)喝攵褩?IP入口地址的偏移地址
CS入口地址的段基址從尋址角度說(shuō)明OP1的內(nèi)容:a)段內(nèi)直接調(diào)用(用得很普遍)CALL子程序名
。。。。。
CALL0023H
。。。。。0023H
子程序第一條指令。。。。。匯編后,子程序名就是子程序的入口地址例:。。。。。
CALLHEXASC
。。。。。
HEXASC
子程序第一條指令。。。。。匯編后,如果分配給HEXASC的有效地址是0023H,那么以上程序段相當(dāng)于b)段內(nèi)間接調(diào)用
CALL寄存器操作數(shù)
CALL存儲(chǔ)器操作數(shù)例:CALLBX;子程序入口地址應(yīng)當(dāng)存放在BX中
CALLPTER;入口地址應(yīng)當(dāng)存放在存儲(chǔ)器PTER字單元中c)段間直接調(diào)用
CALL子程序名d)段間間接調(diào)用
CALL存儲(chǔ)器操作數(shù)例:注意看段間調(diào)用的匯編語(yǔ)言源程序格式
.486DATASEGMENTUSE16(邏輯段最大長(zhǎng)度為64K)
PNTERDDDISP;存放子程序入口地址
DATAENDS
;
CODE1SEGMENTUSE16;主程序在代碼段CODE1ASSUMECS:CODE1,DS:DATABEG:MOVAX,DATAMOVDS,AX
CALLFARPTRDISP;段間直接調(diào)用
CALLPNTER;段間間接調(diào)用兩種調(diào)用方法,調(diào)用同一個(gè)子程序。注意體會(huì)尋址方式CODE2ENDS;子程序代碼段結(jié)束
ENDBEG;整個(gè)程序結(jié)束MOVAH,4CHINT21HCODE1ENDS;主程序代碼段結(jié)束;
CODE2SEGMENTUSE16;子程序在代碼段CODE2ASSUMECS:CODE2
ORG0020H
DISP PROCFAR;定義子程序?yàn)檫h(yuǎn)過(guò)程
MOVAH,2;DOS功能2
MOVDL,‘A’;顯示‘A’ INT21H RET;返回主程序
DISP ENDP;子程序結(jié)束說(shuō)明:1)CALLFARPTRDISP;段間直接調(diào)用注意:DISP的段基址和偏移地址是怎么確定的?在指令中又是怎么表達(dá)的?
必須用屬性修改運(yùn)算符PTR說(shuō)明子程序是遠(yuǎn)過(guò)程,否則不能返回?cái)帱c(diǎn)。
。。。。。。
CALL2812:0020
CALLFAR[0000]
。。。。。。
子程序從存儲(chǔ)器中取入口地址,包括:基地址:偏移地址CALLFARPTRDISP段基址2812,由系統(tǒng)分配;偏移地址0020,由ORG確定2)該例用兩種尋址方式調(diào)用同一個(gè)子程序,在屏幕上顯示兩個(gè)‘A’。直接尋址
間接尋址
2812:0020DS:0000
2000
1228TD窗口(5)返回指令RET1)段內(nèi)返回:把返回地址的偏移地址送IP,返回主調(diào)程序
2)段間返回:把返回地址的偏移地址送IP
把返回地址的基地址送CS
2)再進(jìn)行SP+N→SP的操作。(以便使SP指向堆棧中存放參數(shù)的單元,這樣,在主程序中可以用POP指令很方便地取出參數(shù)。)(3)帶參數(shù)的返回指令格式:RETN(N為偶數(shù))功能:1)把返回地址送入IP或CS:IP后,RET是指令系統(tǒng)中唯一有不同操作碼(CB/C3)的指令。當(dāng)匯編程序處理“FAR”過(guò)程時(shí),RET的代碼是CB,CALL壓入4字節(jié)返回地址,RET彈出4字節(jié)返回地址;處理“NEAR”過(guò)程時(shí),RET的代碼是C3,CALL壓入2字節(jié)返回地址,RET彈出2字節(jié)返回地址例(RET)
。。。。。CALLSUBRLSUBRH。。。。。。。。。。。。。。。。。。。。子程序。。。。。
RET調(diào)用指令有兩個(gè)動(dòng)作:*把返回地址0013壓入堆棧;*把子程序入口地址SUBR送入IP0010001100120013SUBR
RET指令把返回地址0013H送入IP返回?cái)帱c(diǎn);如果是段間調(diào)用,則段基址送入CS,0013H送入IP例(RETN):設(shè)返回地址為2815:0023,CCCC是子程序回送主程序的參數(shù),堆棧內(nèi)容如圖示。執(zhí)行RET4
指令1)2815:0023
送CS:IP,SP+4SP指向FFFAH
2)SP+4SP指向FFFEH,
如果執(zhí)行POPAX
則:AX=CCCC主程序堆棧子程序參數(shù)
FFFF
XXFFFDCCFFFC
FF
FFFB
DD
SP+4..
FFFA
BB
FFF9EE
RET4FFF8
..28
FFF7..25
SP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【名師一號(hào)】2022屆高三地理一輪復(fù)習(xí)演練:選修5-自然災(zāi)害與防治5-5-
- 湖北省黃石市大冶市2024-2025學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(無(wú)答案)
- 2024-2025學(xué)年部編版歷史九年級(jí)上冊(cè)期末復(fù)習(xí)練習(xí)題(含答案)
- 【創(chuàng)新設(shè)計(jì)】2021屆高考化學(xué)(廣東專(zhuān)用)一輪總復(fù)習(xí)限時(shí)訓(xùn)練:第三章-課時(shí)1-鈉及其化合物
- 四年級(jí)數(shù)學(xué)(小數(shù)加減運(yùn)算)計(jì)算題專(zhuān)項(xiàng)練習(xí)與答案
- 《滴眼藥水的護(hù)理》課件
- 《皮膚外用類(lèi)用藥》課件
- 《汽車(chē)底盤(pán)機(jī)械系統(tǒng)檢測(cè)與修復(fù)》-考試題庫(kù)及答案 項(xiàng)目二 行駛系統(tǒng)檢修試題及答案
- 人教版初二八年級(jí)下冊(cè)歷史《香港及澳門(mén)回歸》
- 2024-2025學(xué)年七年級(jí)數(shù)學(xué)上學(xué)期期末模擬卷(冀教版)(原卷版)
- 監(jiān)理人員安全生產(chǎn)培訓(xùn)
- 2024-2030年中國(guó)電力檢修行業(yè)運(yùn)行狀況及投資前景趨勢(shì)分析報(bào)告
- 河北省百師聯(lián)盟2023-2024學(xué)年高二上學(xué)期期末大聯(lián)考?xì)v史試題(解析版)
- 中央空調(diào)系統(tǒng)運(yùn)行與管理考核試卷
- 核電工程排水隧道專(zhuān)項(xiàng)施工方案
- 2021年四川省涼山州九年級(jí)中考適應(yīng)性考試?yán)砜凭C合(試卷)
- 骨科疼痛的評(píng)估及護(hù)理
- 民辦學(xué)校招生教師培訓(xùn)
- 【MOOC】概率論與數(shù)理統(tǒng)計(jì)-南京郵電大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年度軟件開(kāi)發(fā)分包合同技術(shù)要求與交底2篇
- 居家養(yǎng)老人員培訓(xùn)管理制度
評(píng)論
0/150
提交評(píng)論