




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
3隱含規(guī)定源串必須放在數(shù)據(jù)段,用SI尋址。DS:[SI]表示元素;
目的串必須在附加段,用DI尋址。ES:[DI]表示元素;要習(xí)慣元素(存儲單元)的表達(dá)方式!4
配合使用重復(fù)前綴REP
指令加上重復(fù)前綴,如虎添翼。
串計(jì)數(shù)器必須用CX
先從總體上了解此類指令的操作。源:::目: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串存儲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)傳送長度
*帶有重復(fù)前綴REP的格式(
REPeat前綴助記符,不能獨(dú)立使用)格式:REP
MOVSB/W/D(重復(fù)次數(shù)由CX內(nèi)容確定)功能:每傳送一個(gè)字節(jié),修改指針。CX-1,如果CX≠0,繼續(xù)傳送例:把數(shù)據(jù)段BLOCK單元開始的100個(gè)字節(jié),依次傳送到附加段BUF開始的內(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*沒有帶前綴的格式(3)存串指令STOreintoString
基本格式STOSB/W/DAL/AX/EAXES:[DI]
把一個(gè)元素AL/AX/EAX送入目的存儲區(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:表明不相等,不滿足繼續(xù)比較的條件,即使CX不為0也應(yīng)當(dāng)停。繼續(xù)重復(fù)執(zhí)行的條件:重復(fù)次數(shù)計(jì)數(shù)器CX不等于0且標(biāo)志ZF=1
在比較次數(shù)沒有完成的情況下(CX不等于0),又滿足繼續(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:表明相等,不滿足繼續(xù)比較的條件,也應(yīng)當(dāng)停。繼續(xù)重復(fù)執(zhí)行的條件:重復(fù)次數(shù)計(jì)數(shù)器CX不等于0且標(biāo)志ZF=0
在比較次數(shù)沒有完成的情況下(CX不等于0),又滿足繼續(xù)比較的條件(ZF=0),所以應(yīng)當(dāng)繼續(xù)。CX=0?CX-1CX
比較當(dāng)前元素根據(jù)DF,修改SI,DI當(dāng)前元素相等?指令結(jié)束,若ZF=0,表明兩個(gè)串對應(yīng)元素都不相等;若ZF=1,表明至少有一個(gè)元素相等配合核心指令REPECMPSB的輔助指令例:比較ST1,ST2兩個(gè)字符串,若二者相等,令A(yù)L=0;不相等令A(yù)L=FFH。設(shè)長度為20字節(jié)。MOVSI,OFFSETST1MOVDI,OFFSETST2MOVCX,20CLD
REPECMPSB;元素相等,重復(fù)比較,CX=0退出。
;如果有元素不相等,也退出
JNZNEQU;兩個(gè)串不相等,轉(zhuǎn)
XORAL,AL;串相等,設(shè)置AL=0JMPFINISH;無條件轉(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)無條件轉(zhuǎn)移指令JMP
。。。。。。。
JMP目的地址 。。。。。。。 。。。。。。。
目的地址: 。。。。。。。此類指令解決:如何向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)號
*在指令字節(jié)中,直接提供目的地址的偏移地址(有效地址)格式2:段內(nèi)間接轉(zhuǎn)移
JMP寄存器操作數(shù)
JMP存儲器操作數(shù)*在指令字節(jié)中,把目的地址的偏移地址(有效地址)存放在寄存器或存儲器中。在指令中向CPU提供的是寄存器或存儲器地址信息。例:段內(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
;目的地址的偏移地址在存儲器中。
……….. MOVSI,PNTR+2;取偏移地址,SI=003BH JMPSI
;目的地址的偏移地址在寄存器中。
…………P11: ………… …………P12: …………
格式3:段間直接轉(zhuǎn)移
JMP標(biā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)號功能:滿足所給條件,轉(zhuǎn)移;不滿足,順序執(zhí)行下一條指令
條件
P69表3.3必須會查
1)無符號數(shù)條件轉(zhuǎn)移
JA 被減數(shù)大于減數(shù) JNBEJNA 被減數(shù)小于或等于減數(shù) JBEJNC 被減數(shù)大于或等于減數(shù). JNB/JAEJC 被減數(shù)小于減數(shù) JB/JNAE2)有符號數(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)說明:*轉(zhuǎn)移范圍在16位尋址方式下為64K;32位尋址方式下為4G*均不影響標(biāo)志位*對于8086范圍為-128~+127(3)循環(huán)控制指令LOOP
格式:LOOP
短標(biāo)號
LOOPE/LOOPZ
短標(biāo)號
LOOPNZ/LOOPNE
短標(biāo)號
LCXZ
(CX=0)短標(biāo)號
P70表3.4給出了循環(huán)控制指令的循環(huán)條件4)過程調(diào)用/返回指令*過程:子程序*調(diào)用子程序和轉(zhuǎn)移的區(qū)別:是否返回。
*子程序入口地址:子程序第一條指令的第一個(gè)字節(jié)所在存儲單元的地址。所謂調(diào)用子程序,就是把其入口地址送入IP或CS:IP
*CALL類指令有兩個(gè)操作:保存返回地址傳送入口地址*調(diào)用指令CALL格式:CALLOP1(子程序入口地址)功能:1)段內(nèi)調(diào)用
把返回地址的偏移地址壓入堆棧,完成“記跡”(記住回家的路),為返回主調(diào)程序作準(zhǔn)備。把子程序的入口地址的偏移地址送入IP,轉(zhuǎn)入子程序
2)段間調(diào)用*把返回地址的段基址和偏移地址都壓入堆棧*IP入口地址的偏移地址
CS入口地址的段基址從尋址角度說明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存儲器操作數(shù)例:CALLBX;子程序入口地址應(yīng)當(dāng)存放在BX中
CALLPTER;入口地址應(yīng)當(dāng)存放在存儲器PTER字單元中c)段間直接調(diào)用
CALL子程序名d)段間間接調(diào)用
CALL存儲器操作數(shù)例:注意看段間調(diào)用的匯編語言源程序格式
.486DATASEGMENTUSE16(邏輯段最大長度為64K)
PNTERDDDISP;存放子程序入口地址
DATAENDS
;
CODE1SEGMENTUSE16;主程序在代碼段CODE1ASSUMECS:CODE1,DS:DATABEG:MOVAX,DATAMOVDS,AX
CALLFARPTRDISP;段間直接調(diào)用
CALLPNTER;段間間接調(diào)用兩種調(diào)用方法,調(diào)用同一個(gè)子程序。注意體會尋址方式CODE2ENDS;子程序代碼段結(jié)束
ENDBEG;整個(gè)程序結(jié)束MOVAH,4CHINT21HCODE1ENDS;主程序代碼段結(jié)束;
CODE2SEGMENTUSE16;子程序在代碼段CODE2ASSUMECS:CODE2
ORG0020H
DISP PROCFAR;定義子程序?yàn)檫h(yuǎn)過程
MOVAH,2;DOS功能2
MOVDL,‘A’;顯示‘A’ INT21H RET;返回主程序
DISP ENDP;子程序結(jié)束說明:1)CALLFARPTRDISP;段間直接調(diào)用注意:DISP的段基址和偏移地址是怎么確定的?在指令中又是怎么表達(dá)的?
必須用屬性修改運(yùn)算符PTR說明子程序是遠(yuǎn)過程,否則不能返回?cái)帱c(diǎn)。
。。。。。。
CALL2812:0020
CALLFAR[0000]
。。。。。。
子程序從存儲器中取入口地址,包括:基地址:偏移地址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”過程時(shí),RET的代碼是CB,CALL壓入4字節(jié)返回地址,RET彈出4字節(jié)返回地址;處理“NEAR”過程時(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 同濟(jì)大學(xué)浙江學(xué)院《口腔頜面外科學(xué)實(shí)驗(yàn)一》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東省陽江市高中名校2024-2025學(xué)年高中高三第二次教學(xué)質(zhì)量檢測試題英語試題試卷含解析
- 泉州華光職業(yè)學(xué)院《工程光學(xué)及實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 晉中職業(yè)技術(shù)學(xué)院《高級漢語寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年校外托管合同模板
- 湖南省長沙市2025年初三5月中考模擬考試(一)化學(xué)試題含解析
- 甘肅省蘭州市七里河區(qū)重點(diǎn)名校2024-2025學(xué)年初三教學(xué)質(zhì)量檢測試題(一)英語試題理試題含答案
- 湖南省祁東育英實(shí)驗(yàn)學(xué)校2025屆高三5月質(zhì)檢物理試題含解析
- 內(nèi)蒙古赤峰市2025屆高三(實(shí)驗(yàn)班)第三次質(zhì)檢物理試題含解析
- 聘請律師合同盡職調(diào)查(2025年版)
- 2024年晉城市城區(qū)城市建設(shè)投資經(jīng)營有限公司招聘考試真題
- 社工證筆試題庫及答案
- 高考寫作專項(xiàng)突破之核心概念闡釋要訣 課件
- 2025年全國質(zhì)量月活動(dòng)總結(jié)參考(2篇)
- 口腔四手操作培訓(xùn)
- 2025年月度工作日歷含農(nóng)歷節(jié)假日電子表格版
- 第37章 真菌學(xué)概論課件
- 總裁助理崗位職責(zé)
- 2024年封頂儀式發(fā)言稿模版(3篇)
- 癌癥治療協(xié)議書范例
- 《中華人民共和國機(jī)動(dòng)車駕駛?cè)丝颇恳豢荚囶}庫》
評論
0/150
提交評論