




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第2 2章章第第2章:章:2.2.7 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 控制轉(zhuǎn)移類指令用于實(shí)現(xiàn)分支、循環(huán)、控制轉(zhuǎn)移類指令用于實(shí)現(xiàn)分支、循環(huán)、過程等程序結(jié)構(gòu),是僅次于傳送指令過程等程序結(jié)構(gòu),是僅次于傳送指令的常用指令的常用指令重點(diǎn)掌握:重點(diǎn)掌握: JMP/JCC/LOOP/JCXZ CALL/RET INT n/IRET 常用系統(tǒng)功能調(diào)用常用系統(tǒng)功能調(diào)用 控制轉(zhuǎn)移類指令通過控制轉(zhuǎn)移類指令通過改變改變IP(和(和CS)值,值,實(shí)現(xiàn)程序執(zhí)行順序的改變實(shí)現(xiàn)程序執(zhí)行順序的改變第第2章:目標(biāo)地址的尋址方式章:目標(biāo)地址的尋址方式相對尋址方式相對尋址方式指令代碼中提供目的地址指令代碼中提供目的地址相對相對于當(dāng)前
2、于當(dāng)前IP的位移的位移量,轉(zhuǎn)移到的目的地址(轉(zhuǎn)移后的量,轉(zhuǎn)移到的目的地址(轉(zhuǎn)移后的IP值)就是值)就是當(dāng)前當(dāng)前IP值加上位移量值加上位移量直接尋址方式直接尋址方式指令代碼中提供目的邏輯地址,轉(zhuǎn)移后的指令代碼中提供目的邏輯地址,轉(zhuǎn)移后的CS和和IP值值直接直接來自指令操作碼后的目的地址操作數(shù)來自指令操作碼后的目的地址操作數(shù)間接尋址方式間接尋址方式指令代碼中指示寄存器或存儲單元,目的地址指令代碼中指示寄存器或存儲單元,目的地址從寄存器或存儲單元中從寄存器或存儲單元中間接間接獲得獲得用標(biāo)號表達(dá)用標(biāo)號表達(dá)用標(biāo)號表達(dá)用標(biāo)號表達(dá)用寄存器或存儲器操作數(shù)表達(dá)用寄存器或存儲器操作數(shù)表達(dá)第第2章:目標(biāo)地址的尋址范
3、圍:段內(nèi)尋址章:目標(biāo)地址的尋址范圍:段內(nèi)尋址段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移近轉(zhuǎn)移(近轉(zhuǎn)移(near)在當(dāng)前代碼段在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移(范圍內(nèi)轉(zhuǎn)移( 32KB范圍)范圍)不需要更改不需要更改CS段地址,段地址,只要改變只要改變IP偏移地偏移地址址注意(注意((IP)(IP)16位偏移量位偏移量 ;系統(tǒng)根據(jù);系統(tǒng)根據(jù)目的地址自動(dòng)生成)目的地址自動(dòng)生成)段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移短轉(zhuǎn)移(短轉(zhuǎn)移(short)轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)128127范圍的轉(zhuǎn)移范圍的轉(zhuǎn)移操作:操作:(IP)(IP)8位偏移量位偏移量 ;系統(tǒng)根據(jù);系統(tǒng)根據(jù)目的地址自動(dòng)生成目的地址自動(dòng)生成代碼段代碼
4、段代碼段代碼段第第2章:目標(biāo)地址的尋址范圍:段間尋址章:目標(biāo)地址的尋址范圍:段間尋址段間轉(zhuǎn)移段間轉(zhuǎn)移遠(yuǎn)轉(zhuǎn)移(遠(yuǎn)轉(zhuǎn)移(far)從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,可以在可以在1MB范圍范圍需要需要更改更改CS段地址和段地址和IP偏移地址偏移地址目標(biāo)地址必須用一個(gè)目標(biāo)地址必須用一個(gè)32位數(shù)表達(dá),叫位數(shù)表達(dá),叫做做32位遠(yuǎn)指針,它就是邏輯地址位遠(yuǎn)指針,它就是邏輯地址代碼段代碼段代碼段代碼段 實(shí)際編程時(shí),匯編程序會根據(jù)目標(biāo)地址的屬實(shí)際編程時(shí),匯編程序會根據(jù)目標(biāo)地址的屬性,性,自動(dòng)處理自動(dòng)處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移 程序員可用操作符程序員可用操作符s
5、hort、near ptr 或或far ptr 強(qiáng)制成為需要的轉(zhuǎn)移類型強(qiáng)制成為需要的轉(zhuǎn)移類型第第2章:章:2.2.7.1 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令只要執(zhí)行無條件轉(zhuǎn)移指令只要執(zhí)行無條件轉(zhuǎn)移指令JMP,就使程序轉(zhuǎn)到指,就使程序轉(zhuǎn)到指定的目標(biāo)地址,從目標(biāo)地址處開始執(zhí)行指令定的目標(biāo)地址,從目標(biāo)地址處開始執(zhí)行指令操作數(shù)操作數(shù)label是要轉(zhuǎn)移到的是要轉(zhuǎn)移到的目標(biāo)地址目標(biāo)地址(目的地址目的地址、轉(zhuǎn)移地址轉(zhuǎn)移地址)JMP指令分成指令分成4種類型:種類型: 段內(nèi)轉(zhuǎn)移、相對尋址段內(nèi)轉(zhuǎn)移、相對尋址 段內(nèi)轉(zhuǎn)移、間接尋址段內(nèi)轉(zhuǎn)移、間接尋址 段間轉(zhuǎn)移、直接尋址段間轉(zhuǎn)移、直接尋址 段間轉(zhuǎn)移、間接尋址段間轉(zhuǎn)移、間接尋址
6、JMP labelJMP label;程序轉(zhuǎn)向;程序轉(zhuǎn)向labellabel標(biāo)號指定的地址標(biāo)號指定的地址第第2章:無條件轉(zhuǎn)移指令章:無條件轉(zhuǎn)移指令JMP(jump) JMP label;段內(nèi)轉(zhuǎn)移、相對尋址段內(nèi)轉(zhuǎn)移、相對尋址;IPIP位移量位移量 JMP r16/m16;段內(nèi)轉(zhuǎn)移、間接尋址段內(nèi)轉(zhuǎn)移、間接尋址;IPr16/m16 JMP far ptr label;段間轉(zhuǎn)移、直接尋址段間轉(zhuǎn)移、直接尋址;IP偏移地址偏移地址,CS段地址段地址 JMP far ptr mem;段間轉(zhuǎn)移,間接尋址段間轉(zhuǎn)移,間接尋址;IPmem,CSmem2演示演示演示演示演示演示演示演示演示演示第第2章:章:2.2.7
7、.2 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令Jcc根據(jù)指定的條件確定程序根據(jù)指定的條件確定程序是否發(fā)生轉(zhuǎn)移。其通用格式為:是否發(fā)生轉(zhuǎn)移。其通用格式為:Jcc label;條件滿足條件滿足,發(fā)生轉(zhuǎn)移發(fā)生轉(zhuǎn)移;IPIP8位位移量;位位移量;否則,順序執(zhí)行否則,順序執(zhí)行l(wèi)abel是一個(gè)標(biāo)號、一個(gè)是一個(gè)標(biāo)號、一個(gè)8位位移量,表示位位移量,表示Jcc指令指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移址的地址位移label只支持短轉(zhuǎn)移的相對尋址方式只支持短轉(zhuǎn)移的相對尋址方式第第2章:章:Jcc指令的分類指令的分類Jcc指令不影響標(biāo)志,但要利用
8、標(biāo)志(指令不影響標(biāo)志,但要利用標(biāo)志(表表2-4)根據(jù)利用的標(biāo)志位不同,分成三種情況:根據(jù)利用的標(biāo)志位不同,分成三種情況: 判斷單個(gè)標(biāo)志位狀態(tài)判斷單個(gè)標(biāo)志位狀態(tài) 比較無符號數(shù)高低比較無符號數(shù)高低 比較有符號數(shù)大小比較有符號數(shù)大小 Jcc指令實(shí)際雖然只有指令實(shí)際雖然只有16條,但卻有條,但卻有30個(gè)助記符個(gè)助記符 采用多個(gè)助記符,目的是為了方便記憶和使用采用多個(gè)助記符,目的是為了方便記憶和使用第第2章:章:1. 判斷單個(gè)標(biāo)志位狀態(tài)判斷單個(gè)標(biāo)志位狀態(tài) JZ/JE和和JNZ/JNE利用零標(biāo)志利用零標(biāo)志ZF,判斷結(jié)果是否為零(或相等),判斷結(jié)果是否為零(或相等) JS和和JNS利用符號標(biāo)志利用符號標(biāo)志S
9、F,判斷結(jié)果是正是負(fù),判斷結(jié)果是正是負(fù) JO和和JNO利用溢出標(biāo)志利用溢出標(biāo)志OF,判斷結(jié)果是否產(chǎn)生溢出,判斷結(jié)果是否產(chǎn)生溢出 JP/JPE和和JNP/JPO利用奇偶標(biāo)志利用奇偶標(biāo)志PF,判斷結(jié)果中,判斷結(jié)果中“1”的個(gè)數(shù)是偶是奇的個(gè)數(shù)是偶是奇 JC/JB/JNAE和和JNC/JNB/JAE利用進(jìn)位標(biāo)志利用進(jìn)位標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位,判斷結(jié)果是否進(jìn)位或借位第第2章:例題章:例題2.15題目:題目:將將AX中存放的無符號數(shù)除以中存放的無符號數(shù)除以2,如果是奇,如果是奇數(shù)則加數(shù)則加1后除以后除以2問題:問題:如何判斷如何判斷AX中的數(shù)據(jù)是奇數(shù)還是偶數(shù)?中的數(shù)據(jù)是奇數(shù)還是偶數(shù)?解答:解答:
10、判斷判斷AX最低位是最低位是“0”(偶數(shù)),還是(偶數(shù)),還是“1”(奇數(shù))??梢杂梦徊僮黝愔噶睿ㄆ鏀?shù))。可以用位操作類指令1:用邏輯與指令將除最低位外的其他位變成用邏輯與指令將除最低位外的其他位變成0,保留最低位,保留最低位不變。判斷這個(gè)數(shù)據(jù)是不變。判斷這個(gè)數(shù)據(jù)是0,AX就是偶數(shù);否則,為奇數(shù)就是偶數(shù);否則,為奇數(shù)2:將最低位用移位指令移至進(jìn)位標(biāo)志,判斷進(jìn)位標(biāo)志是將最低位用移位指令移至進(jìn)位標(biāo)志,判斷進(jìn)位標(biāo)志是0,AX就是偶數(shù);否則,為奇數(shù)就是偶數(shù);否則,為奇數(shù)3:將最低位用移位指令移至最高位(符號位),判斷符號將最低位用移位指令移至最高位(符號位),判斷符號標(biāo)志是標(biāo)志是0,AX就是偶數(shù);否則
11、,為奇數(shù)就是偶數(shù);否則,為奇數(shù)第第2章:例題章:例題2.15解答解答1 用用JZ指令實(shí)現(xiàn)指令實(shí)現(xiàn)test ax,01h;測試;測試AX的最低位的最低位D0(不用(不用AND指令,以免改變指令,以免改變AX)jz even;標(biāo)志;標(biāo)志ZF1,即,即D00:AX內(nèi)是偶數(shù),程序轉(zhuǎn)移內(nèi)是偶數(shù),程序轉(zhuǎn)移add ax,1;標(biāo)志;標(biāo)志ZF0,即,即D01:AX內(nèi)的奇數(shù),加內(nèi)的奇數(shù),加1even:shr ax,1;AXAX2用右移一位的方法實(shí)現(xiàn)除以用右移一位的方法實(shí)現(xiàn)除以2。本例中用本例中用RCR指令比指令比SHR指令更好。指令更好。第第2章:例題章:例題2.15解答解答2 用用JNC指令實(shí)現(xiàn)指令實(shí)現(xiàn)mov
12、bx,axshr bx,1;將;將AX的最低位的最低位D0移進(jìn)移進(jìn)CFjnc even;標(biāo)志;標(biāo)志CF0,即,即D00:AX內(nèi)是偶數(shù),程序轉(zhuǎn)移內(nèi)是偶數(shù),程序轉(zhuǎn)移add ax,1;標(biāo)志;標(biāo)志CF1,即,即D01:AX內(nèi)的奇數(shù),加內(nèi)的奇數(shù),加1even:shr ax,1;AXAX2還可用還可用SAR、ROR和和RCR指令指令第第2章:例題章:例題2.15解答解答3 用用JNS指令實(shí)現(xiàn)指令實(shí)現(xiàn)mov bx,axror bx,1;將;將AX的最低位的最低位D0移進(jìn)最高位(符號位移進(jìn)最高位(符號位SF)jns even;標(biāo)志;標(biāo)志SF0,即,即D00:AX內(nèi)是偶數(shù),程序轉(zhuǎn)移內(nèi)是偶數(shù),程序轉(zhuǎn)移add ax
13、,1;標(biāo)志;標(biāo)志SF1,即,即D01:AX內(nèi)的奇數(shù),加內(nèi)的奇數(shù),加1even:shr ax,1;AXAX2錯(cuò)誤!錯(cuò)誤!循環(huán)指令不影響循環(huán)指令不影響SF等標(biāo)志等標(biāo)志ADD BX,0;增加一條指令;增加一條指令第第2章:例章:例2.16 判斷是否為字母判斷是否為字母Y;寄存器;寄存器AL中是字母中是字母Y(含大小寫),則令(含大小寫),則令A(yù)H0,否則令否則令A(yù)H1cmp al,y;比較;比較AL與小寫字母與小寫字母yje next;相等,轉(zhuǎn)移;相等,轉(zhuǎn)移cmp al,Y ;不相等,;不相等,;繼續(xù)比較;繼續(xù)比較AL與大寫字母與大寫字母Yje next;相等,轉(zhuǎn)移;相等,轉(zhuǎn)移mov ah,-1;不
14、相等,令;不相等,令A(yù)H1jmp done;無條件轉(zhuǎn)移指令;無條件轉(zhuǎn)移指令next:mov ah,0;相等的處理:令;相等的處理:令A(yù)H0done:第第2章:例章:例2.17 偶校驗(yàn)偶校驗(yàn);對;對DL寄存器中寄存器中8位數(shù)據(jù)進(jìn)行偶校驗(yàn)位數(shù)據(jù)進(jìn)行偶校驗(yàn);校驗(yàn)位存入;校驗(yàn)位存入CF標(biāo)志標(biāo)志test dl,0ffh;使使CF0,同時(shí)設(shè)置,同時(shí)設(shè)置PF標(biāo)志標(biāo)志jpe done;DL中中“1”的個(gè)數(shù)為偶數(shù)的個(gè)數(shù)為偶數(shù);正好正好CF0,轉(zhuǎn)向,轉(zhuǎn)向donestc;DL中中“1”的個(gè)數(shù)為奇數(shù),設(shè)置的個(gè)數(shù)為奇數(shù),設(shè)置CF1done:;完成完成第第2章:章:2. 比較無符號數(shù)高低比較無符號數(shù)高低無符號數(shù)的大小用高
15、(無符號數(shù)的大小用高(Above)、低()、低(Below)表示,需要利用表示,需要利用CF確定高低、利用確定高低、利用ZF標(biāo)志確定相標(biāo)志確定相等(等(Equal)兩數(shù)的高低分成兩數(shù)的高低分成4種關(guān)系,對應(yīng)種關(guān)系,對應(yīng)4條指令條指令JB(JNAE):目的操作數(shù)低于(不高于等于)源操作數(shù)):目的操作數(shù)低于(不高于等于)源操作數(shù)JNB(JAE):目的操作數(shù)不低于(高于等于)源操作數(shù)):目的操作數(shù)不低于(高于等于)源操作數(shù)JBE(JNA):目的操作數(shù)低于等于(不高于)源操作數(shù)):目的操作數(shù)低于等于(不高于)源操作數(shù)JNBE(JA):目的操作數(shù)不低于等于(高于)源操作數(shù)):目的操作數(shù)不低于等于(高于)
16、源操作數(shù)第第2章:章:3. 比較有符號數(shù)大小比較有符號數(shù)大小判斷有符號數(shù)的大(判斷有符號數(shù)的大(Greater)、小()、?。↙ess),),需要組合需要組合OF、SF標(biāo)志、并利用標(biāo)志、并利用ZF標(biāo)志確定相等標(biāo)志確定相等與否與否兩數(shù)的大小分成兩數(shù)的大小分成4種關(guān)系,分別對應(yīng)種關(guān)系,分別對應(yīng)4條指令條指令JL(JNGE):目的操作數(shù)小于(不大于等于)源操作數(shù)):目的操作數(shù)小于(不大于等于)源操作數(shù)JNL(JGE):目的操作數(shù)不小于(大于等于)源操作數(shù)):目的操作數(shù)不小于(大于等于)源操作數(shù)JLE(JNG):目的操作數(shù)小于等于(不大于)源操作數(shù)):目的操作數(shù)小于等于(不大于)源操作數(shù)JNLE(JG
17、):目的操作數(shù)不小于等于(大于)源操作數(shù)):目的操作數(shù)不小于等于(大于)源操作數(shù)第第2章:例章:例2.17 求較大值求較大值cmp ax,bx;比較比較AX和和BXjae next;若若AXBX,轉(zhuǎn)移,轉(zhuǎn)移xchg ax,bx ;若若AXBX,交換,交換next:mov wmax,ax如果如果AX和和BX存放的是有符號數(shù),存放的是有符號數(shù),則條件轉(zhuǎn)移指令應(yīng)采用則條件轉(zhuǎn)移指令應(yīng)采用JGE指令指令第第2章:例章:例2.17 求較大值(另解)求較大值(另解)cmp ax,bx;比較比較AX和和BXjae nextmov wmax, bx;若若AXBX,wmaxBXjmp donenext:mov w
18、max,ax;若若AXBX,wmaxAXdone: 第第2章:例章:例2.17 求較大值(另解對比)求較大值(另解對比)cmp ax,bx;比較比較AX和和BXjbe nextmov wmax, ax;若若AXBX,wmaxAXjmp donenext:mov wmax,bx;若若AXBX,wmaxBXdone: 第第2章:章:2.2.8 循環(huán)指令循環(huán)指令一段代碼序列多次重復(fù)執(zhí)行就是循環(huán)一段代碼序列多次重復(fù)執(zhí)行就是循環(huán)8088設(shè)計(jì)有針對設(shè)計(jì)有針對CX計(jì)數(shù)器的計(jì)數(shù)循環(huán)指令計(jì)數(shù)器的計(jì)數(shù)循環(huán)指令LOOP label;循環(huán)指令循環(huán)指令;首先;首先CXCX1;然后判斷;若;然后判斷;若CX0,轉(zhuǎn)移,轉(zhuǎn)移
19、JCXZ label;為為0循環(huán)指令循環(huán)指令:如果:如果CX0,則轉(zhuǎn)移,則轉(zhuǎn)移label操作數(shù)采用相對短尋址方式操作數(shù)采用相對短尋址方式還有還有LOOPZ/LOOPE和和LOOPNZ/LOOPNE兩條兩條指令指令dec cxjnz label第第2章:例章:例2.18 數(shù)據(jù)塊傳送(字節(jié))數(shù)據(jù)塊傳送(字節(jié))mov cx,400h;設(shè)置循環(huán)次數(shù):;設(shè)置循環(huán)次數(shù):1K1024400Hmov si,offset sbuf;設(shè)置循環(huán)初值:;設(shè)置循環(huán)初值:SI指向數(shù)據(jù)段源緩沖區(qū)開始指向數(shù)據(jù)段源緩沖區(qū)開始mov di,offset dbuf;DI指向附加段目的緩沖區(qū)開始(附加段)指向附加段目的緩沖區(qū)開始(附
20、加段)again:mov al,si;循環(huán)體:實(shí)現(xiàn)數(shù)據(jù)傳送;循環(huán)體:實(shí)現(xiàn)數(shù)據(jù)傳送mov es:di,al;每次傳送一個(gè)字節(jié);每次傳送一個(gè)字節(jié)inc si;SI和和DI指向下一個(gè)單元指向下一個(gè)單元inc diloop again;循環(huán)條件判定:循環(huán)次數(shù)減;循環(huán)條件判定:循環(huán)次數(shù)減1,不為,不為0轉(zhuǎn)移(循環(huán))轉(zhuǎn)移(循環(huán))第第2章:例章:例2.18 數(shù)據(jù)塊傳送(字)數(shù)據(jù)塊傳送(字)mov cx,200h;設(shè)置循環(huán)次數(shù):;設(shè)置循環(huán)次數(shù):1K2200Hmov si,offset sbuf;設(shè)置循環(huán)初值:;設(shè)置循環(huán)初值:SI指向數(shù)據(jù)段源緩沖區(qū)開始指向數(shù)據(jù)段源緩沖區(qū)開始mov di,offset dbuf;
21、DI指向附加段目的緩沖區(qū)開始(附加段)指向附加段目的緩沖區(qū)開始(附加段)again:mov ax,si;循環(huán)體:實(shí)現(xiàn)數(shù)據(jù)傳送;循環(huán)體:實(shí)現(xiàn)數(shù)據(jù)傳送mov es:di,ax;每次傳送一個(gè)字;每次傳送一個(gè)字add si,2;指向下一個(gè)(字)單元;指向下一個(gè)(字)單元add di,2loop again;循環(huán)條件判定:循環(huán)次數(shù)減;循環(huán)條件判定:循環(huán)次數(shù)減1,不為,不為0轉(zhuǎn)移(循環(huán))轉(zhuǎn)移(循環(huán))2、 過程過程( 子程序子程序 )調(diào)用指令調(diào)用指令子程序子程序程序中具有獨(dú)立功能的部分編寫成獨(dú)立程序模塊。程序中具有獨(dú)立功能的部分編寫成獨(dú)立程序模塊。子程序(過程)定義子程序(過程)定義格式:格式: 符號名符號
22、名 PROC 類型類型 符號名符號名 ENDP 子程序調(diào)用和返回指令:子程序調(diào)用和返回指令: CALL RET(RETURN) 過程有兩種類型:過程有兩種類型:按過程與調(diào)用語句間的位置,過程有兩種類型。按過程與調(diào)用語句間的位置,過程有兩種類型。NEAR類型:調(diào)用指令與過程在同一個(gè)段中類型:調(diào)用指令與過程在同一個(gè)段中FAR類型:調(diào)用指令與過程不在同一個(gè)段中類型:調(diào)用指令與過程不在同一個(gè)段中CALL指令和指令和RET指令都不影響條件碼。指令都不影響條件碼。演示演示(1)、)、 CALL( Call a procedure)調(diào)用調(diào)用 CALL調(diào)用指令調(diào)用指令調(diào)用地址由指令給出調(diào)用地址由指令給出CAL
23、L調(diào)用指令有調(diào)用指令有4 4種:種: 段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用段間直接調(diào)用段間直接調(diào)用 段內(nèi)間接調(diào)用段內(nèi)間接調(diào)用段間間接調(diào)用段間間接調(diào)用段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用格式:格式:CALL DST ;(SP)(SP)-2, (SP)+1,(SP)(IP); (IP) (IP)+D16 DST給出轉(zhuǎn)向地址(子程序的入口地址)。給出轉(zhuǎn)向地址(子程序的入口地址)。 D16機(jī)器指令中的位移量(轉(zhuǎn)向地址和返回地址之差)。機(jī)器指令中的位移量(轉(zhuǎn)向地址和返回地址之差)。 位移量為位移量為D16范圍范圍-32768+32767H,占有兩個(gè)字節(jié)。,占有兩個(gè)字節(jié)。工作過程如下:工作過程如下:例:例: 過程過程 code
24、SEGMENT ;code段段 CALL subp ;調(diào)用調(diào)用 指令指令 YYY入棧入棧 ,D16 =subp-yyy XXX: PROC NEAR ;過程定義過程定義 RET ;返回返回 subp ENDP code ENDS例:兩個(gè)數(shù)據(jù)變量例:兩個(gè)數(shù)據(jù)變量X與與Y相乘相乘,子程序可以直接訪問模子程序可以直接訪問模塊中的變量。塊中的變量。DATASG SEGMENT X DW 100 Y DW 10DATASG ENDSCODESG SEGMENT MAIN PROC FAR ASSUME CS:CODESG, DS:DATA SG START: CALL subp RET MAIN END
25、Psubp PROC NEAR MOV AX,XMOV BX,Y MUL BXRETsubp ENDCODESG ENDS END START 段內(nèi)間接調(diào)用:段內(nèi)間接調(diào)用:格式:格式: CALL DST; WORD PTR OPR OPR 為為16位寄存器,位寄存器, 或存儲器(除立即數(shù)以外的任何一種尋址方式)或存儲器(除立即數(shù)以外的任何一種尋址方式) (SP)(SP)-2 (SP)+1,(,(SP)(IP) (IP)(EA) EA由由DST尋址方式所確定的有效地址。尋址方式所確定的有效地址。 段間直接調(diào)用:段間直接調(diào)用:格式:格式:CALL FAR PTR DST;(SP)(SP)-2(SP
26、)(SP)-2 例例 : CSEG1 SEGMENT CALL FAR PTR subp;處的處的CS:IP入棧轉(zhuǎn)入棧轉(zhuǎn)subp : CSEG1 ENDSCSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS 段間間接調(diào)用:段間間接調(diào)用:格式:格式: CALL DWORD PTR DST執(zhí)行操作:執(zhí)行操作: (SP)(SP)-2 (SP)(SP)-2 EA由由DST的尋址方式確定的有效地址。的尋址方式確定的有效地址。(2)、 RET( Reture from procedure)返回返回 RET返回指令返回指令放在子程序的末尾放在子程序的末尾使子程序在
27、功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。*為能準(zhǔn)確返回為能準(zhǔn)確返回 ,返回指令類型與調(diào)用指令類型相對應(yīng)。,返回指令類型與調(diào)用指令類型相對應(yīng)。段內(nèi)返回段內(nèi)返回段間返回段間返回 段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回段間帶立即數(shù)返回段間帶立即數(shù)返回在子程序調(diào)用時(shí),返回地址入棧在子程序調(diào)用時(shí),返回地址入棧 返回時(shí):將返回地址出棧返回時(shí):將返回地址出棧 (IP)(段內(nèi)或段間)。)(段內(nèi)或段間)。 (CS)(段間)。)(段間)。段內(nèi)返回:段內(nèi)返回:格式:格式: RET; 機(jī)器碼:機(jī)器碼: C3H或者或者C2H (IP)(SP)+1,(,(SP) (SP)(SP)+2段間返回:
28、段間返回:格式:格式: RET; 機(jī)器碼:機(jī)器碼: CBH或或CAH (IP)(SP)+1,(,(SP) (SP)(SP)+2 (CS)(SP)+1,(,(SP) (SP)(SP)+2段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回格式:格式:RET EXP;執(zhí)行操作:執(zhí)行操作: (IP)(SP)+1,(,(SP) (SP)(SP)+2 EXP是一個(gè)表達(dá)式是一個(gè)表達(dá)式計(jì)算出來的常數(shù)成為機(jī)器指令中位移量計(jì)算出來的常數(shù)成為機(jī)器指令中位移量D16,修改堆棧,修改堆棧 指針。指針。例如:例如:RET EXP 堆棧使用情況堆棧使用情況: ASSUME CS:CODE,DS:DATA MAIN PROC FAR STAR
29、T: MOV AX,DATA MOV DS,AX PUSH BX PUSH CX CS:XXXX MOV AH,4CH INT 21H MAIN ENDP(BX)(BX)(SP)(SP)(CX)(CX)XXXXHXXXXHPUSH BXPUSH BXPUSH CXPUSH CXCALL DELCHARCALL DELCHARRET 4RET 4RETRETDELCHAR PROC DELCHAR ENDP END STARTRET EXP 堆棧使用情況堆棧使用情況: 段間帶立即數(shù)返回:段間帶立即數(shù)返回:格式:格式:RET EXP; (IP)(SP)+1,(,(SP)(SP)(SP)+2(CS)
30、(SP)+1,(,(SP)(SP)(SP)+2(SP)(SP)+D16 CALL指令和指令和RET指令都不影響條件碼。指令都不影響條件碼。例例:學(xué)習(xí)使用學(xué)習(xí)使用 段內(nèi)、段間直接調(diào)用指令的使用及堆棧情況段內(nèi)、段間直接調(diào)用指令的使用及堆棧情況主程序主程序 MAIN在一個(gè)代碼段中在一個(gè)代碼段中子程序子程序 PRO-A PRO-B PRO-C 在另一個(gè)代碼段在另一個(gè)代碼段程序調(diào)用關(guān)系程序調(diào)用關(guān)系:另一個(gè)代碼段另一個(gè)代碼段 PRO-A PRO-B CALL near ptr PRO-B CALL near ptr PRO-C (IP)=2500H (IP)=4000H CALL near ptr PRO
31、-C RET (IP)=3700H PRO-C RET RET (SP)=0100H MAINCALL far ptr PRO-A(CS)=0500H (IP)=1000H 棧頂TOS棧頂TOS0100H0100H0500H0500H1000H1000H00FCH00FCH0500H0500H1000H1000H2500H2500H00FAH00FAHSPSP(1)(1)SPSPTOSTOSSPSP(2)(2)(3)(3)TOSTOS4000H4000H2500H2500H1000H1000H0500H0500H00F8H00F8H4000H4000H2500H2500H1000H1000H0
32、500H0500H4000H4000H2500H2500H1000H1000H00FAH00FAH0500H0500H00FCH00FCHTOSTOSTOSTOSTOSTOSSPSPSPSPSPSP(4)(4)(5)(5)(6)(6)4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H00FAH00FAH00FCH00FCH0100H0100HTOSTOSSPSPSPSPSPSP(9)(9)(8)(8)(7)
33、(7)TOSTOSTOSTOS堆棧情況:堆棧情況: 第第2章:例章:例2.19 十六進(jìn)制轉(zhuǎn)換為十六進(jìn)制轉(zhuǎn)換為ASCII碼的子程序碼的子程序;子程序:;子程序:將將DLDL低低4 4位的一位位的一位1616進(jìn)制數(shù)進(jìn)制數(shù)轉(zhuǎn)換轉(zhuǎn)換成成ASCIIASCII碼碼htoaschtoascprocprocand dl,0fhand dl,0fh;只??;只取DLDL的低的低4 4位位or dl,30hor dl,30h;DLDL高高4 4位變成位變成3 3cmp dl,39hcmp dl,39h;是;是0 09 9,還是,還是0Ah0Ah0Fh ?0Fh ?jbe htoendjbe htoend;是;是0
34、09 9,轉(zhuǎn)移,轉(zhuǎn)移add dl,7add dl,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htoend:htoend: retret;子程序返回;子程序返回htoaschtoascendpendp;主程序:調(diào)用;主程序:調(diào)用子程序子程序mov dl,28hcall htoasc第第2章:章:2.2.9 中斷指令和系統(tǒng)功能調(diào)用中斷指令和系統(tǒng)功能調(diào)用中斷(中斷(Interrupt)是又一種改變程序執(zhí)行)是又一種改變程序執(zhí)行順序的方法順序的方法8088CPU支持支持256個(gè)中斷,每個(gè)中斷用一個(gè)中斷,每個(gè)中斷用一個(gè)編號(中斷向量號)區(qū)別個(gè)編號(中斷向量號)區(qū)別中斷指令有中斷指令有3條:條:
35、INT i8 IRET INTO本節(jié)主要掌握類似子程序調(diào)用指令的中斷本節(jié)主要掌握類似子程序調(diào)用指令的中斷調(diào)用指令調(diào)用指令I(lǐng)NT i8,進(jìn)而掌握,進(jìn)而掌握系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用第第2章:章:1. 中斷指令中斷指令I(lǐng)NT i8INT i8;中斷調(diào)用指令:產(chǎn)生;中斷調(diào)用指令:產(chǎn)生i8i8號中斷號中斷;主程序使用,其中;主程序使用,其中i8i8表示中斷向量號表示中斷向量號IRETIRET;中斷返回指令:實(shí)現(xiàn)中斷返回;中斷返回指令:實(shí)現(xiàn)中斷返回;中斷服務(wù)程序使用;中斷服務(wù)程序使用第第2章:章:2. 系統(tǒng)功能調(diào)用方法系統(tǒng)功能調(diào)用方法匯編程序提供給匯編匯編程序提供給匯編語言程序員的功能非語言程序員的功能非
36、常有限常有限程 序 員 需 要 利 用程 序 員 需 要 利 用ROM-BIOS和操作系和操作系統(tǒng)提供的資源統(tǒng)提供的資源系統(tǒng)功能調(diào)用是程序系統(tǒng)功能調(diào)用是程序設(shè)計(jì)的一個(gè)重要方面設(shè)計(jì)的一個(gè)重要方面裸機(jī)裸機(jī)匯編語言程序第第2章:系統(tǒng)功能調(diào)用步驟章:系統(tǒng)功能調(diào)用步驟通常按照如下通常按照如下4個(gè)步驟進(jìn)行:個(gè)步驟進(jìn)行: 在在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號寄存器中設(shè)置系統(tǒng)功能調(diào)用號 在指定寄存器中設(shè)置入口參數(shù)在指定寄存器中設(shè)置入口參數(shù) 用中斷調(diào)用指令(用中斷調(diào)用指令( INT i8)執(zhí)行功能調(diào)用)執(zhí)行功能調(diào)用 根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況第第2章:章:3. DOS輸入輸出
37、功能調(diào)用輸入輸出功能調(diào)用DOS利用利用21H號中斷提供給用戶近百個(gè)系號中斷提供給用戶近百個(gè)系統(tǒng)功能,主要包括設(shè)備管理、目錄管理和統(tǒng)功能,主要包括設(shè)備管理、目錄管理和文件管理三個(gè)方面的功能文件管理三個(gè)方面的功能重點(diǎn)掌握:重點(diǎn)掌握:輸出一個(gè)字符,輸出一個(gè)字符,02H號功能調(diào)用號功能調(diào)用輸出一個(gè)字符串,輸出一個(gè)字符串,09H號功能調(diào)用號功能調(diào)用第第2章:章:02H號號DOS功能調(diào)用功能調(diào)用輸出一個(gè)字符輸出一個(gè)字符 功能調(diào)用號:功能調(diào)用號:AH02H 入口參數(shù):入口參數(shù):DL欲顯示字符的欲顯示字符的ASCII碼碼 功能調(diào)用:功能調(diào)用:INT 21H 出口參數(shù):無出口參數(shù):無;顯示一個(gè)問號;顯示一個(gè)問號
38、“ ?”mov ah,02h;設(shè)置功能調(diào)用號;設(shè)置功能調(diào)用號mov dl,?;設(shè)置入口參數(shù);設(shè)置入口參數(shù)int 21h;功能調(diào)用;功能調(diào)用第第2章:例章:例4.20 回車換行的子程序回車換行的子程序crlfprocpush ax;保護(hù)寄存器;保護(hù)寄存器push dxmov ah,2mov dl,0dh ;回車功能的;回車功能的ASCII碼是碼是0DHint 21hmov ah,2mov dl,0ah;換行功能的;換行功能的ASCII碼是碼是0AHint 21hpop dx;恢復(fù)寄存器;恢復(fù)寄存器pop axretcrlfendp第第2章:章:09H號號DOS功能調(diào)用功能調(diào)用輸出一個(gè)字符串輸出一
39、個(gè)字符串 功能調(diào)用號:功能調(diào)用號:AH09H 入口參數(shù):入口參數(shù):DS:DX欲顯示字符串在內(nèi)存中的首地址(邏輯欲顯示字符串在內(nèi)存中的首地址(邏輯地址形式:地址形式:DS段地址,段地址,DX偏移地址)偏移地址)內(nèi)存中的字符串以內(nèi)存中的字符串以ASCII碼形式保存,最后必須碼形式保存,最后必須添加一個(gè)添加一個(gè)“$”結(jié)尾(并不顯示)結(jié)尾(并不顯示) 功能調(diào)用:功能調(diào)用:INT 21H 出口參數(shù):無出口參數(shù):無第第2章:例章:例2.21 提示按任意鍵繼續(xù)提示按任意鍵繼續(xù);在數(shù)據(jù)段定義要顯示的字符串;在數(shù)據(jù)段定義要顯示的字符串msgkeydb Press any key to contiune,$;在代
40、碼段編寫程序;在代碼段編寫程序mov ah,9mov dx,offset msgkey;設(shè)置入口參數(shù):;設(shè)置入口參數(shù):;DS數(shù)據(jù)段地址(假設(shè)已經(jīng)設(shè)置好)數(shù)據(jù)段地址(假設(shè)已經(jīng)設(shè)置好);DX字符串的偏移地址字符串的偏移地址int 21h第第2章:章:4. ROM-BIOS輸入輸出功能調(diào)用輸入輸出功能調(diào)用ROM-BIOS也以中斷服務(wù)程序的形式,向程序員也以中斷服務(wù)程序的形式,向程序員提供系統(tǒng)的基本輸入輸出程序提供系統(tǒng)的基本輸入輸出程序ROM-BIOS功能更加基本,且與操作系統(tǒng)無關(guān)功能更加基本,且與操作系統(tǒng)無關(guān)當(dāng)當(dāng)DOS沒有啟動(dòng)或不允許使用沒有啟動(dòng)或不允許使用DOS功能調(diào)用時(shí),功能調(diào)用時(shí),可以使用可以
41、使用ROM-BIOS功能調(diào)用功能調(diào)用熟悉輸出一個(gè)字符:熟悉輸出一個(gè)字符: 功能調(diào)用號:功能調(diào)用號:AH0EH 入口參數(shù):入口參數(shù):AL欲顯示字符的欲顯示字符的ASCII碼碼通常通常BX0 功能調(diào)用:功能調(diào)用:INT 10H 出口參數(shù):無出口參數(shù):無四、串操作指令四、串操作指令(String manipulation ) “串串”就是內(nèi)存中一段地址相連的字節(jié)或字。就是內(nèi)存中一段地址相連的字節(jié)或字。 。 8088有有5種基本操作:種基本操作: 1、 MOVS(Move string) 串傳送指令串傳送指令 2、CMPS(Compare string) 串比較指令串比較指令 3、SCAS(Scan
42、string) 串掃描指令串掃描指令 4、LODS(Load from string) 從串取指令從串取指令 5、STOS (Store in to string) 存入串指令存入串指令 可以只有源操作數(shù),可以只有目標(biāo)操作數(shù),可能二者都有。可以只有源操作數(shù),可以只有目標(biāo)操作數(shù),可能二者都有。 源操作數(shù)用源操作數(shù)用SI 尋址,隱含尋址,隱含DS值為段地址,可以用段跨越前綴指定其它段。值為段地址,可以用段跨越前綴指定其它段。 目標(biāo)操作數(shù)用目標(biāo)操作數(shù)用DI尋址,隱含尋址,隱含ES為段地址。為段地址。 每次操作對每次操作對SI、DI 調(diào)整:調(diào)整: 與上述指令基本配合使用前綴有:與上述指令基本配合使用前
43、綴有:(Repeat) (Repeat while equal/zero) (Repeat while not equal/not zero)。下面分二種情況來討論:下面分二種情況來討論: 格式:格式:REP String Primitive 串指令串指令 String Primitive 可為:可為:MOVS、STOS、LODS。MOVS(Move String) 串傳送串傳送LODS(Load from String) 從串取指令從串取指令STOS(Store into String) 存入串指令存入串指令 (1)當(dāng)當(dāng)(CX)= 0 ,結(jié)束,結(jié)束REP, 執(zhí)行執(zhí)行REP后的下一條指令。后的
44、下一條指令。 (2) 當(dāng)當(dāng)(CX)0, (CX) (CX) -1 , (3) 執(zhí)行執(zhí)行REP后的串指令,后的串指令, (4) 重復(fù)重復(fù)(1)(3)。)。REP 執(zhí)行流程圖執(zhí)行流程圖( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1執(zhí)行下一條指令執(zhí)行下一條指令執(zhí)行REP后的串執(zhí)行REP后的串指令指令N N(1) MOVS dest,src;(;(ES):():(DI)(DS):():(SI)MOVSB (字節(jié))(字節(jié));(SI)(SI)1,(,(DI)(DI) 1MOVSW (字);(字);(SI)(SI)2,(,(DI)(DI)2 該指令不影響條件碼該指令不影響
45、條件碼 。 *如:如: MOVS ES:BYTE PTR DI,DS:SI* 單指令不能完成單指令不能完成 ; 例:將內(nèi)存的數(shù)據(jù)段中以例:將內(nèi)存的數(shù)據(jù)段中以AREA1為首地址的為首地址的100個(gè)數(shù)據(jù),個(gè)數(shù)據(jù),傳送到附加段中的傳送到附加段中的AREA2為首地址的區(qū)域。為首地址的區(qū)域。用用MOVS串操作指令編程:串操作指令編程: MOV AX,SEG AREA1MOV DS,AX MOV AX,SEG AREA2MOV ES,AX ; DF=0,增址傳送,增址傳送LOOP1: MOV AX,SEG AREA1 MOV DS,AX MOV AX,SEG AREA2 MOV ES,AX LOOP1:
46、; (AL)(DS):():(SI) ;(;(ES):():(DI)(AL) INC SI INC DI DEC CX JNE LOOP1歸納在執(zhí)行歸納在執(zhí)行MOVS指令時(shí),應(yīng)該先做好以下準(zhǔn)備工作:指令時(shí),應(yīng)該先做好以下準(zhǔn)備工作:(1) 數(shù)據(jù)段中數(shù)據(jù)段中(如反向傳送到末地址)(如反向傳送到末地址)。(2) 附加段中附加段中(或反向傳送末地址)(或反向傳送末地址)。(3) 。(4) CLD(clear direction flag) 功能:功能:,執(zhí)行串處理指令時(shí),執(zhí)行串處理指令時(shí) 可以使地址可以使地址。 STD(set direction flag)功能:功能:,執(zhí)行串處理指令時(shí)可以使地址,執(zhí)
47、行串處理指令時(shí)可以使地址LODS src;(字節(jié))(字節(jié))(AL) (DS):(SI), (SI) (SI) 1 (字(字)(AX) (DS):(SI),(SI) (SI)2LODS B (字節(jié))(字節(jié));(AL) (DS):(SI),(SI) (SI) 1LODS W (字)(字) ;(AX) (DS):(SI),(SI) (SI)2功能:該指令把由功能:該指令把由。DF=0,(,(SI) (SI)+1或或+2DF=1,(,(SI) (SI)-1或或-2(1) 指令允許用段跨越前綴來指定非數(shù)據(jù)段的存儲區(qū)。指令允許用段跨越前綴來指定非數(shù)據(jù)段的存儲區(qū)。(2) 該指令不影響條件碼。該指令不影響條件
48、碼。一般說來,一般說來,它不與它不與REP聯(lián)用聯(lián)用,每重復(fù)一次,累加器的內(nèi)容就改變一次。每重復(fù)一次,累加器的內(nèi)容就改變一次。 (AL)中只能保持最后一個(gè)元素。中只能保持最后一個(gè)元素。有時(shí)有時(shí)。(3) 適用于在一個(gè)循環(huán)中,用基本串操作指令構(gòu)成復(fù)雜串操作適用于在一個(gè)循環(huán)中,用基本串操作指令構(gòu)成復(fù)雜串操作時(shí)很有用。時(shí)很有用。 STOS dest;(字節(jié))(字節(jié)) (ES):(DI) (AL) , (DI) (DI) 1 (字(字) (ES):(DI) (AX) , (DI) (DI) 2(2) STOS B (字節(jié))(字節(jié)); (ES):(DI) (AL) , (DI) (DI) 1(3) STOS
49、 W (字)(字) ; (ES):(DI) (AX) , (DI) (DI) 2用途:用途:與與REP聯(lián)用時(shí),(聯(lián)用時(shí),(CX)緩沖區(qū)長度。用來建立一串相同的值。緩沖區(qū)長度。用來建立一串相同的值。例:在附加段例:在附加段STORE開始存開始存5個(gè)空格個(gè)空格程序:程序: MOV AL,20H ;_ (AL) MOV CX,5 MOV DI,offset STORE CLD REP STOSB ;(ES):(DI) (AL) (DI) (DI)+120H20H20H20H20H20H20H20H20H20H.STORE:STORE:例:內(nèi)存中有一個(gè)首地址為例:內(nèi)存中有一個(gè)首地址為BLOCK。 存放
50、正數(shù)的緩沖區(qū)首址為存放正數(shù)的緩沖區(qū)首址為PUOS-DATA, 存放負(fù)數(shù)的緩沖區(qū)首址為存放負(fù)數(shù)的緩沖區(qū)首址為MINUS-DATA。設(shè):設(shè): 源數(shù)據(jù)塊用源數(shù)據(jù)塊用SI尋址,尋址, 正數(shù)的目的區(qū)用正數(shù)的目的區(qū)用DI尋址,尋址, 負(fù)數(shù)的目的區(qū)用負(fù)數(shù)的目的區(qū)用BX尋址。尋址。 循環(huán)次數(shù)循環(huán)次數(shù) ( CX )。用用LODS指令把源數(shù)據(jù)取入(指令把源數(shù)據(jù)取入(AL)中,)中, 檢查其符號,確定正、負(fù),檢查其符號,確定正、負(fù),若為正數(shù)用若為正數(shù)用STOS指令送至正數(shù)緩沖區(qū),指令送至正數(shù)緩沖區(qū),若是負(fù)數(shù),把(若是負(fù)數(shù),把(DI)與()與(BX)交換,仍使用)交換,仍使用STOS傳送,傳送,傳送傳送 完后再完后再
51、 將(將(DI)與()與(BX)交換,恢復(fù)原值。)交換,恢復(fù)原值。程序:程序:START: MOV SI,OFFSET BLOCKMOV DI,OFFSET PUOS-DATA ; 正數(shù)緩沖區(qū)正數(shù)緩沖區(qū)MOV BX,OFFSET MINUS-DATA ;負(fù)數(shù)緩沖區(qū);負(fù)數(shù)緩沖區(qū)MOV CX,COUNT GOON: JNZ MINS ;若負(fù)數(shù)轉(zhuǎn);若負(fù)數(shù)轉(zhuǎn)MINS ;正數(shù);正數(shù) ,(,(DI)(AL),(),(DI)(DI)+1JMP AGAINMINS: XCHG BX,DI ;負(fù)數(shù);負(fù)數(shù) ,(,(DI)(AL),(),(DI)(DI)+1XCHG BX,DI AGAIN:DEC CX JNZ,G
52、OON HLT 格式:格式:REPE(或(或REPZ)string primitive String primitive可為可為 : 1、CM PS(Compare string ) 串比較指令串比較指令 2、SCAS (Scan string ) 串掃描指令,搜索指令串掃描指令,搜索指令執(zhí)行過程:執(zhí)行過程:當(dāng)當(dāng)(CX)= 0 , 結(jié)束結(jié)束REPZ, 執(zhí)行執(zhí)行REPZ下一條指令;下一條指令;(2) 當(dāng)當(dāng)(CX)0,將,將CX 的內(nèi)容減的內(nèi)容減1,執(zhí)行執(zhí)行REPZ后的串指令;后的串指令;(3) 當(dāng)當(dāng)ZF = 1, 返回返回 (1) ;(4) 當(dāng)當(dāng)ZF1, 則結(jié)束則結(jié)束REPZ 執(zhí)行執(zhí)行REPZ下
53、一條指令。下一條指令。REPZ執(zhí)行流程執(zhí)行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1執(zhí)行下一條指令執(zhí)行下一條指令執(zhí)行REZ后的串執(zhí)行REZ后的串指令指令N NZF=1?ZF=1?N NY Y 格式:格式:REPNE(或(或REPNZ)string primitive string primitiveString primitive可為可為 : 1、CM PS(Compare string ) 串比較指令串比較指令 2、SCAS (Scan string ) 串掃描指令,搜索指令串掃描指令,搜索指令執(zhí)行過程:執(zhí)行過程:當(dāng)當(dāng)(CX )= 0 , 結(jié)束結(jié)束
54、REPNZ, 執(zhí)行執(zhí)行REPNZ下一條指令。下一條指令。(2) 當(dāng)當(dāng)(CX)0,將,將CX 的內(nèi)容減的內(nèi)容減1, 執(zhí)行執(zhí)行REPNZ后的串指令。后的串指令。 當(dāng)當(dāng)ZF = 0, 返回返回(1); 當(dāng)當(dāng)ZF0, 則結(jié)束則結(jié)束REPNZ, (4) 執(zhí)行執(zhí)行REPNZ下一條指令。下一條指令。注意:注意: REPNZ執(zhí)行流程執(zhí)行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1執(zhí)行下一條指令執(zhí)行下一條指令執(zhí)行RENZ后的串執(zhí)行RENZ后的串指令指令N NZF=0?ZF=0?N NY Y (SI)作為源串地址,(作為源串地址,(DI)目的串地址目的串地址(1) CMP
55、S dest,src;(ES) :(DI) -(DS):(SI),CMPS B (字節(jié))(字節(jié));(SI) (SI)1,(DI)(DI) 1CMPS W (字);(字);(SI) (SI)2,(DI) (DI)2執(zhí)行操作:執(zhí)行操作:(ES) :(DI) -(DS):(SI),結(jié)果不存,置標(biāo)志。結(jié)果不存,置標(biāo)志。字節(jié)操作:字節(jié)操作:(SI) (SI)1,(DI)(DI) 1字操作:字操作:(SI) (SI)2,(DI) (DI)2 學(xué)習(xí)學(xué)習(xí)REPZ CMPSB指令指令例:利用例:利用CMPS指令對指令對STRING1和和STRING2二個(gè)字符串進(jìn)行二個(gè)字符串進(jìn)行 比較,相同在比較,相同在RESU
56、LT 單元送單元送00H,不同送,不同送0FFH。MOV SI,OFFSET STRING1 MOV DI,OFFSET STRING2 MOV CX,COUNT CLD REPZ CMPSB JNZ UNMAT ;若串不同,在;若串不同,在RESUL單元中置單元中置0FFH MOV AL,0 ;若串相等,在;若串相等,在RESULT單元中置單元中置00H JMP OULPT UNMAT:MOV AL,0FFH (Scan string ) :格式:格式:SCAS dest SCASB(字節(jié));(字節(jié));(AL)-(ES):():(DI),(),(DI)(DI)1 SCASW(字);(字);(
57、AX)-(ES):():(DI),(),(DI) (DI)2 (AL)或()或(AX) - 目的串目的串兩數(shù)相減,只影響標(biāo)志,不影響操作數(shù)。兩數(shù)相減,只影響標(biāo)志,不影響操作數(shù)。其它特性與其它特性與MOVS同。同。 例:要搜索的關(guān)鍵字例:要搜索的關(guān)鍵字 放在放在(AL)或或(AX)中,搜索某一數(shù)據(jù)塊或字符串中有無中,搜索某一數(shù)據(jù)塊或字符串中有無關(guān)關(guān) 鍵字,鍵字,;MOV DI,0FFSET BLOCK;設(shè)置數(shù)據(jù)塊地址指針;設(shè)置數(shù)據(jù)塊地址指針 MOV CX,COUNT ;設(shè)置數(shù)據(jù)塊長度;設(shè)置數(shù)據(jù)塊長度MOV AL, ; 關(guān)鍵字送入關(guān)鍵字送入AL或或AX ;(;(CX)0,Z=0 繼續(xù)繼續(xù)SCASB
58、 JZ FOUND MOV DI,0 JMP DONEFOUND:DEC DI DONE: HLT應(yīng)用舉例:應(yīng)用舉例:例:一個(gè)數(shù)據(jù)塊由大小寫英文字母、數(shù)字、其他符號組成,例:一個(gè)數(shù)據(jù)塊由大小寫英文字母、數(shù)字、其他符號組成,用用CR(ASCII碼碼0DH)結(jié)束。數(shù)據(jù)塊首地址為結(jié)束。數(shù)據(jù)塊首地址為BLOCK1。將其傳送到將其傳送到BLOCK2為首地址的內(nèi)存區(qū),并為首地址的內(nèi)存區(qū),并。分析:分析:大小寫英文字母中相應(yīng)大小寫英文字母中相應(yīng)ASCII碼的關(guān)系:碼的關(guān)系:az相應(yīng)相應(yīng)ASCII碼為:碼為: 61H7AHAZ相應(yīng)相應(yīng)ASCII碼為:碼為:41H5AH程序和流程圖如下:程序和流程圖如下:程序程
59、序:LEA SI , BLOCK1LEA DI , BLOCK2CLDNEXT: LODSBCMP AL JZ DONECMP AL , JC OKCMP AL , JNC OKOK:JMP NEXTDONE: HLT開始開始初始化,置源地址、目的地址指針初始化,置源地址、目的地址指針清方向標(biāo)志DF清方向標(biāo)志DF取一個(gè)字符取一個(gè)字符回車?回車? z? z?aa轉(zhuǎn)換為大寫字母轉(zhuǎn)換為大寫字母送存送存結(jié)束結(jié)束Y YY YN NN NY YN N流程圖流程圖指令重復(fù)前綴操作數(shù)地址指針寄存器MOVS源,目標(biāo)(DS): (SI) , (ES): (DI)CMPS源,目標(biāo)(DS): (SI) ,(ES): (DI)SCAS目標(biāo)(ES): (DI)LODS源(DS): (SI)STOS目標(biāo)(ES): (DI)第第2章:章:2.2.10 處理器控制類指令處理器控制類指令處理器控制類指令用來控制處理器控制類指令用來控制CPU的狀態(tài),使的狀態(tài),使CPU暫停、等待或空操作等暫停、等待或空操作等NOP ;空操作指令,等同于;空操作指令,等同于“xchg ax,ax”指令指令
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/TR 18228-5:2025 EN Design using geosynthetics - Part 5: Stabilization
- 云數(shù)據(jù)庫連接優(yōu)化-深度研究
- 2025年度廢電池?zé)o害化處理承包服務(wù)
- 2025年度皮草產(chǎn)品售后服務(wù)合同范本
- The 2025 Optimove Insights消費(fèi)者營銷疲勞報(bào)告
- 2025年度房地產(chǎn)市場動(dòng)態(tài)監(jiān)測評估合同
- 2025年圖形、圖象處理設(shè)備項(xiàng)目建議書
- 2025年度二手車交易居間服務(wù)合同范本
- 2025年度大型體育賽事贊助商權(quán)益轉(zhuǎn)讓合同
- 2025年度企業(yè)安全協(xié)管員崗位職責(zé)合同
- 酒店長包房租賃協(xié)議書范本
- 2 找春天 公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 2025年幾內(nèi)亞水泥廠項(xiàng)目投資可行性報(bào)告
- 2025年江蘇護(hù)理職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 2025年江蘇南京水務(wù)集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 【道法】開學(xué)第一課 課件-2024-2025學(xué)年統(tǒng)編版道德與法治七年級下冊
- 口腔門診分診流程
- 建筑工程施工安全管理課件
- 2025年春新外研版(三起)英語三年級下冊課件 Unit2第1課時(shí)Startup
- 中華民族共同體概論專家講座第一講中華民族共同體基礎(chǔ)理論
- 人教版(2024)英語七年級上冊單詞表
評論
0/150
提交評論