課前復(fù)習(xí)指令系統(tǒng)MOVDSH錯(cuò)不能將立即數(shù)直_第1頁
課前復(fù)習(xí)指令系統(tǒng)MOVDSH錯(cuò)不能將立即數(shù)直_第2頁
課前復(fù)習(xí)指令系統(tǒng)MOVDSH錯(cuò)不能將立即數(shù)直_第3頁
課前復(fù)習(xí)指令系統(tǒng)MOVDSH錯(cuò)不能將立即數(shù)直_第4頁
課前復(fù)習(xí)指令系統(tǒng)MOVDSH錯(cuò)不能將立即數(shù)直_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課前復(fù)習(xí)指令系統(tǒng):課前復(fù)習(xí)指令系統(tǒng):1 .mov ds,2010h ;錯(cuò)錯(cuò) 不能將立即數(shù)直接給段寄存器不能將立即數(shù)直接給段寄存器 2 .push al ;錯(cuò)錯(cuò) 不能對字節(jié)進(jìn)行堆棧操作不能對字節(jié)進(jìn)行堆棧操作 3 .mov dx, sp ;錯(cuò)錯(cuò) 無無sp尋址方式,存儲(chǔ)器地址尋址方式,存儲(chǔ)器地址只能通過只能通過bx,bp,si,di尋址尋址 4 .in al,0a00h ;錯(cuò)錯(cuò) 端口地址大于端口地址大于ffh 應(yīng)用應(yīng)用dx尋址端口尋址端口 5 .xchg cl,ch ;對對6 .aaa cx ;6 .aaa cx ;錯(cuò)錯(cuò) aaaaaa為無操作數(shù)指令為無操作數(shù)指令, ,默認(rèn)操作數(shù)默認(rèn)操作數(shù)al al

2、7 .add bp+di,1000h ;7 .add bp+di,1000h ;錯(cuò)錯(cuò) 兩個(gè)操作數(shù)不能均為存儲(chǔ)兩個(gè)操作數(shù)不能均為存儲(chǔ)器器 8 .out dx,cl ;8 .out dx,cl ;錯(cuò)錯(cuò) 端口只能通過端口只能通過alal或或axax傳送數(shù)據(jù)傳送數(shù)據(jù) 9.cbw bh ;9.cbw bh ;錯(cuò)錯(cuò) 符號擴(kuò)展命令為無操作數(shù)指令符號擴(kuò)展命令為無操作數(shù)指令, , 默認(rèn)操作數(shù)默認(rèn)操作數(shù)alal10.add 03ech,ax ;10.add 03ech,ax ;錯(cuò)錯(cuò) 目的操作數(shù)不能為立即數(shù)目的操作數(shù)不能為立即數(shù) 11.mov bx,sp+di;11.mov bx,sp+di;錯(cuò)錯(cuò) 無無sp+dis

3、p+di尋址尋址, ,必須是基址必須是基址 (bx(bx或或bp)+bp)+變址變址(si(si或或di) di) 12.mov di,ax ;12.mov di,ax ;錯(cuò)錯(cuò) 無無axax尋址尋址13.lds ch,di ;13.lds ch,di ;錯(cuò)錯(cuò) ldslds指令目的操作數(shù)應(yīng)為一個(gè)指令目的操作數(shù)應(yīng)為一個(gè)1616為寄存器為寄存器 14.lea bx,1000h ;14.lea bx,1000h ;錯(cuò)錯(cuò) lealea源操作數(shù)應(yīng)為一個(gè)存儲(chǔ)器操作數(shù)源操作數(shù)應(yīng)為一個(gè)存儲(chǔ)器操作數(shù), , 不能是立即數(shù)不能是立即數(shù)15.div 0010h ;15.div 0010h ;錯(cuò)錯(cuò) 單操作數(shù)不能是立即數(shù)單

4、操作數(shù)不能是立即數(shù) 16.lea dx,di ;16.lea dx,di ;錯(cuò)錯(cuò) lealea源操作數(shù)應(yīng)為一個(gè)存儲(chǔ)器操作數(shù)源操作數(shù)應(yīng)為一個(gè)存儲(chǔ)器操作數(shù), , 不能是寄存器不能是寄存器 17.mul ax,200h ;17.mul ax,200h ;錯(cuò)錯(cuò) mulmul為單操作數(shù)指令為單操作數(shù)指令, , 且源操作數(shù)不能為立即數(shù)且源操作數(shù)不能為立即數(shù),ax,ax隱含隱含 18.mov ax,bx+bp;18.mov ax,bx+bp;錯(cuò)錯(cuò) 無無bp+bxbp+bx尋址尋址, ,理由同第理由同第1212題題 19.cmp bx,si ;19.cmp bx,si ;錯(cuò)錯(cuò) 雙操作數(shù)不能均為存儲(chǔ)器雙操作數(shù)不

5、能均為存儲(chǔ)器 21.out dx,bx ;21.out dx,bx ;錯(cuò)錯(cuò) 端口只能通過端口只能通過alal或或axax傳送數(shù)據(jù)傳送數(shù)據(jù)22.and 0fh,al ;22.and 0fh,al ;錯(cuò)錯(cuò) 目的操作數(shù)不能為立即數(shù)目的操作數(shù)不能為立即數(shù)23.jnz aaa ;23.jnz aaa ;錯(cuò)錯(cuò) aaaaaa十一條指令十一條指令. .不能作為符號地址不能作為符號地址 例例1 復(fù)習(xí)求補(bǔ)指令:復(fù)習(xí)求補(bǔ)指令: mov ah, 80h neg ah 00 h 0000 0000 b 00 h 0000 0000 b - - 80 h 80 h - - 1000 0000 b 1000 0000 b

6、1 1 1 1 80h 1000 0000b 80h 1000 0000b 執(zhí)行后:執(zhí)行后: (al)=80h , cf=1,of=1,zf=0,sf=1,af0,pf=0 cmp oprd1, oprd2 ; (oprd1) - (oprd2) cmp a, bl 利用利用cmp執(zhí)行后的標(biāo)志值,比較兩操作數(shù)之間的關(guān)系執(zhí)行后的標(biāo)志值,比較兩操作數(shù)之間的關(guān)系l 比較指令比較指令cmp,進(jìn)行兩操作數(shù)相減操作,進(jìn)行兩操作數(shù)相減操作, 但只影響標(biāo)志值,不影響操作數(shù)但只影響標(biāo)志值,不影響操作數(shù)(減的結(jié)果不保存減的結(jié)果不保存)例例2:復(fù)習(xí)比較指令:復(fù)習(xí)比較指令:條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令判斷條件判斷條件 低

7、于低于 jb next cf = 1 低于或等于低于或等于 jbe next cf = 1 或或 zf = 1 高于高于 ja next cf = 0 且且 zf = 0 高于或等于高于或等于 jae next cf = 0有符號數(shù)小于用有符號數(shù)小于用jljl,大于用,大于用jgjg例例 將將ax和和bx中較大的帶符號數(shù),存于中較大的帶符號數(shù),存于ax中中 cmp ax, bx ;比較比較 jge great ;大于大于或或等于則跳轉(zhuǎn)等于則跳轉(zhuǎn) xchg ax, bx ;小于則交換小于則交換 great: 、cmp a,bcmp指令應(yīng)用舉例:指令應(yīng)用舉例: 若自若自blockblock開始的內(nèi)

8、存緩沖區(qū)中,有開始的內(nèi)存緩沖區(qū)中,有100100個(gè)帶符號數(shù)。個(gè)帶符號數(shù)。 找出最大值。并存放到找出最大值。并存放到maxmax單元中。單元中。 第一個(gè)數(shù)取出第一個(gè)數(shù)取出 ( ax), 取出第二個(gè)數(shù)(第二個(gè)字單元內(nèi)容)與取出第二個(gè)數(shù)(第二個(gè)字單元內(nèi)容)與(ax)比較比較 : (ax)第二個(gè)數(shù),不做交換,第二個(gè)數(shù),不做交換, 否則,(第二個(gè)字單元內(nèi)容)否則,(第二個(gè)字單元內(nèi)容) (ax)。)。 再取第三個(gè)數(shù),再取第三個(gè)數(shù), 經(jīng)過經(jīng)過99次比較,在(次比較,在(ax)中得到最大數(shù)。)中得到最大數(shù)。編程:編程: mov bx,offset block mov ax,bx inc bx inc bx m

9、ov cx,99again: ;(ax) (ax) 大,轉(zhuǎn)大,轉(zhuǎn)nextnext mov ax,bxnext: inc bx inc bx dec cx jnz again mov max,ax;max單元存放單元存放最大值最大值 8086/8088三三. 邏輯運(yùn)算指令邏輯運(yùn)算指令邏輯指令邏輯指令指令分類指令分類邏輯運(yùn)算邏輯運(yùn)算and 、or 、xor 、not 、test移移 位位 shl 、sal、shr、sar 循環(huán)移位循環(huán)移位 rol 、ror 、 rcl 、rcr1.邏輯運(yùn)算指令邏輯運(yùn)算指令and al , 0000 1111bor bx , 00ffhnot clxor dl, a

10、ltest al, 0000 0001bl 除除not指令單操作數(shù)外,其它均為雙操作數(shù)指令單操作數(shù)外,其它均為雙操作數(shù)l 可進(jìn)行字節(jié)或字操作可進(jìn)行字節(jié)或字操作l not指令不影響標(biāo)志指令不影響標(biāo)志l test為為“與與”操作,但只影響標(biāo)志位,不影響操作數(shù)。操作,但只影響標(biāo)志位,不影響操作數(shù)。其他指令其他指令置置cf、of為為0,af不定不定 ( 無意義無意義 )sf、zf、pf據(jù)結(jié)果置位據(jù)結(jié)果置位以以“與與”指令為例,討論注意事項(xiàng):指令為例,討論注意事項(xiàng): 影響條件碼:影響條件碼: cf0f=0, af未定義未定義 , sf zf pf “與與”指令的用途指令的用途:(1) 例:例:and a

11、l,al ; 結(jié)果:結(jié)果:。 (2) 使使;而而。例:例: 若(若(al)=4 h and al, 0 h ; (al)=03h, ; ;。2. 移位指令移位指令shl oprd, 1clsal oprd, 1clshr oprd, 1clsar oprd, 1cl0cf0cfcf0cf執(zhí)行操作執(zhí)行操作指令格式指令格式左移部分邏輯移位與算術(shù)移位3. 循環(huán)移位指令循環(huán)移位指令指令格式指令格式執(zhí)行操作執(zhí)行操作cfcfcfcfrol oprd, 1clror oprd, 1clrcl oprd, 1clrcr oprd, 1cl循環(huán)移位分帶進(jìn)位與不帶進(jìn)位兩種共同點(diǎn):共同點(diǎn): 所有移位指令都可以作所有

12、移位指令都可以作b/w操作。操作。 指令中的指令中的 cnt : 表示移位次數(shù)表示移位次數(shù) cnt=1,1可寫在指令中,不能是可寫在指令中,不能是1以外的常數(shù)。以外的常數(shù)。 cnt1,用,用cl存放移位次數(shù)存放移位次數(shù) ,不能是其他寄存器。不能是其他寄存器。 如:如:sal ax,1 mov cl,4 sal ax,cl注意事項(xiàng):注意事項(xiàng): shl al, 1 shr al, cl rol bx, 1 rcr al, cll源操作數(shù)為移位的次數(shù)源操作數(shù)為移位的次數(shù) 為為1可在指令中直接給出可在指令中直接給出 大于大于1時(shí),移位次數(shù)需由時(shí),移位次數(shù)需由cl給出給出 rcr ax,5 shl bl

13、, all 目的操作數(shù)類型決定操作類型目的操作數(shù)類型決定操作類型sal bl,cl 字節(jié)操作字節(jié)操作rol bx,cl 字操作字操作當(dāng)移位次數(shù)當(dāng)移位次數(shù)l oprd可以是可以是reg/meml 可進(jìn)行字節(jié)或字操作可進(jìn)行字節(jié)或字操作(rotate)(shift): 移位指令執(zhí)行后,移出的位可能丟失;移位指令執(zhí)行后,移出的位可能丟失; 循環(huán)移位指令移循環(huán)移位指令移位后,操作數(shù)中原來各數(shù)位的信息不會(huì)丟失,這是移動(dòng)了位位后,操作數(shù)中原來各數(shù)位的信息不會(huì)丟失,這是移動(dòng)了位置,必要時(shí)可以恢復(fù)。置,必要時(shí)可以恢復(fù)。 循環(huán)移位指令可以對操作數(shù)進(jìn)行測試。循環(huán)移位指令可以對操作數(shù)進(jìn)行測試。例:測試?yán)簻y試(al)

14、5 =? 0mov cl , 3jnc zerozero: 。例:例: 將將dx、ax組合起來構(gòu)成組合起來構(gòu)成32位寄存器向左移一位。位寄存器向左移一位。如下圖所示:如下圖所示:0 015150 01515dxdxaxax程序:程序: shl ax , 1 rcl dx , 132位寄存器向左移一位位寄存器向左移一位四、串操作指令(四、串操作指令(string manipulation ) “串串”就是內(nèi)存中一段地址相連的字節(jié)或字。就是內(nèi)存中一段地址相連的字節(jié)或字。 。 串操作指令是串操作指令是8088實(shí)現(xiàn)內(nèi)存之間數(shù)據(jù)傳送的一組指令實(shí)現(xiàn)內(nèi)存之間數(shù)據(jù)傳送的一組指令 8088有有5種基本操作:種基

15、本操作: 1、 movs(move string) 串傳送指令串傳送指令 2、cmps(compare string) 串比較指令串比較指令 3、scas(scan string) 串掃描指令串掃描指令 4、lods(load from string) 串取數(shù)指令串取數(shù)指令 5、stos (store in to string) 存入串?dāng)?shù)據(jù)指令存入串?dāng)?shù)據(jù)指令 可以只有源操作數(shù),可以只有目標(biāo)操作數(shù),可能二者都有。可以只有源操作數(shù),可以只有目標(biāo)操作數(shù),可能二者都有。 源操作數(shù)用源操作數(shù)用si 尋址,隱含尋址,隱含ds值為段地址,可以用段跨越前綴指定其它段。值為段地址,可以用段跨越前綴指定其它段。

16、目標(biāo)操作數(shù)用目標(biāo)操作數(shù)用di尋址,隱含尋址,隱含es為段地址。為段地址。 每次操作對每次操作對si、di 調(diào)整:調(diào)整: 與上述指令基本配合使用前綴有:與上述指令基本配合使用前綴有:(repeat) (repeat while equal/zero) (repeat while not equal/not zero)。下面分二種情況來討論:下面分二種情況來討論:(一一) 與與rep相配合工作的相配合工作的movs、stos指令指令 rep 重復(fù)串操作直到(重復(fù)串操作直到(cx)=0為止為止lods指令一般不直接與指令一般不直接與rep聯(lián)合使用,但其操作與聯(lián)合使用,但其操作與stos相關(guān),因而放在

17、這里。相關(guān),因而放在這里。(二二) 與與repe/repz和和repne/repnz聯(lián)合工作的聯(lián)合工作的cmps和和scas指令指令 repe/repz 當(dāng)相等當(dāng)相等/為零時(shí)重復(fù)串操作為零時(shí)重復(fù)串操作 repne/repnz 當(dāng)不相等當(dāng)不相等/不為零時(shí)重復(fù)串操作不為零時(shí)重復(fù)串操作 格式:格式:rep string primitive 串指令串指令 string primitive 可為:可為:movs、stos。1. movs(move string) 串傳送串傳送2. lods(load from string) 讀串指令讀串指令3. stos(store into string) 寫串指令

18、寫串指令 (1)當(dāng)當(dāng)(cx)= 0 ,結(jié)束,結(jié)束rep, 執(zhí)行執(zhí)行rep后的下一條指令。后的下一條指令。 (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)(2) movsb (字節(jié))(字節(jié));(si)(si)1,(,(di)(di) 1(

19、3) movsw (字);(字);(si)(si)2,(,(di)(di)2 該指令不影響條件碼該指令不影響條件碼 。 *如:如: 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,增址傳送,增址傳送 rep eses:byte

20、 ptrdi, dsbyte ptrdi, ds:sisimov指令編程:指令編程: mov ax,seg area1 mov ds,ax mov ax,seg area2 mov es,ax mov si,offset area1 ;將;將are1偏移地址偏移地址si mov di,offset area2 mov cx,100loop1:mov al,si ; (al)(ds):():(si) mov es:di,al ;(;(es):():(di)(al) inc si inc di dec cx jne loop1歸納在執(zhí)行歸納在執(zhí)行movs指令時(shí),應(yīng)該先做好以下準(zhǔn)備工作:指令時(shí),應(yīng)該

21、先做好以下準(zhǔn)備工作:(1) 數(shù)據(jù)段中源串首地址(如反向傳送到末地址)存入si寄存器中。(2) 附加段中目的串首地址(或反向傳送末地址)。(3) 。(4) cld(clear direction flag) 功能:功能:,執(zhí)行串處理指令時(shí),執(zhí)行串處理指令時(shí) 可以使地址可以使地址。 std(set direction flag)功能:功能:,執(zhí)行串處理指令時(shí)可以使地址,執(zhí)行串處理指令時(shí)可以使地址2. lods(load from string)讀串指令(1) lods src;(字節(jié))(字節(jié))(al) (ds):(si), (si) (si) 1 (字(字)(ax) (ds):(si),(si)

22、(si)2(2) lods b (字節(jié))(字節(jié));(al) (ds):(si),(si) (si) 1(3) lods w (字)(字) ;(ax) (ds):(si),(si) (si)2功能:該指令把由功能:該指令把由。df=0,(,(si) (si)+1或或+2df=1,(,(si) (si)-1或或-2(1) 指令允許用段跨越前綴來指定非數(shù)據(jù)段的存儲(chǔ)區(qū)。指令允許用段跨越前綴來指定非數(shù)據(jù)段的存儲(chǔ)區(qū)。(2) 該指令不影響條件碼。該指令不影響條件碼。(3) 一般說來,一般說來,它不與它不與rep聯(lián)用聯(lián)用,每重復(fù)一次,累加器的內(nèi)容就改變一次。每重復(fù)一次,累加器的內(nèi)容就改變一次。 (al)中只能

23、保持最后一個(gè)元素。中只能保持最后一個(gè)元素。有時(shí)有時(shí)。適用于在一個(gè)循環(huán)中,用基本串操作指令構(gòu)成復(fù)雜串操作適用于在一個(gè)循環(huán)中,用基本串操作指令構(gòu)成復(fù)雜串操作時(shí)很有用。時(shí)很有用。 (1) 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 w (字)(字) ; (es):(di) (ax) , (di) (di) 2用途:用途:與與rep聯(lián)用時(shí),(聯(lián)用時(shí),(cx)緩沖區(qū)長度。

24、用來建立一串相同的值,緩沖區(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:學(xué)習(xí)學(xué)習(xí)lods,stos指令應(yīng)用指令應(yīng)用例:內(nèi)存中有一個(gè)首地址為例:內(nèi)存中有一個(gè)首地址為block。 存放正數(shù)的緩沖區(qū)首址為存放正數(shù)的緩沖區(qū)首址為puos-data, 存放負(fù)數(shù)的緩沖區(qū)

25、首址為存放負(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傳送,傳送,傳送傳送 完后再完后再 將(將(di)與()與(bx)交換,恢復(fù)原值)交換,恢復(fù)原值。程序:程序:s

26、tart: mov si,offset block ; 數(shù)緩串位置數(shù)緩串位置mov di,offset puos-data ; 正數(shù)緩沖區(qū)正數(shù)緩沖區(qū) mov bx,offset minus-data ;負(fù)數(shù)緩沖區(qū);負(fù)數(shù)緩沖區(qū)mov cx,count goon: test al,80h jnz mins ;若非;若非0,為負(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,goon hlt

27、(二二) 與與repe/repz和和repne/repnz聯(lián)合工作的聯(lián)合工作的cmps和和scas指令指令 repe/repz 當(dāng)相等當(dāng)相等/為零時(shí)重復(fù)串操作為零時(shí)重復(fù)串操作 格式:格式:repe(或(或repz)string primitive 當(dāng)相等時(shí)的重復(fù)前綴當(dāng)相等時(shí)的重復(fù)前綴repzstring primitive可用于可用于 : 1、cm ps(compare string ) 串比較指令串比較指令 2、scas (scan string ) 串掃描指令,搜索指令串掃描指令,搜索指令執(zhí)行過程:執(zhí)行過程:(1) 當(dāng)當(dāng)(cx)= 0 , 結(jié)束結(jié)束repz, 執(zhí)行執(zhí)行repz下一條指令;下

28、一條指令;(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下一條指令。下一條指令。 (cx)減減1操作不影響標(biāo)志操作不影響標(biāo)志 zf標(biāo)志由串操作決定標(biāo)志由串操作決定 當(dāng)當(dāng) (cx) = 0或或zf=0時(shí)退出循環(huán)時(shí)退出循環(huán)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 格式:格式

29、:repne(或(或repnz)string primitive 當(dāng)不相等重復(fù)前綴repnzstring primitivestring primitive可為可為 : 1、cm ps(compare string ) 串比較指令串比較指令 2、scas (scan string ) 串掃描指令,搜索指令串掃描指令,搜索指令執(zhí)行過程:執(zhí)行過程:(1) 當(dāng)當(dāng)(cx )= 0 , 結(jié)束結(jié)束repnz, 執(zhí)行執(zhí)行repnz下一條指令。下一條指令。(2) 當(dāng)當(dāng)(cx)0,將,將cx 的內(nèi)容減的內(nèi)容減1, 執(zhí)行執(zhí)行repnz后的串指令。后的串指令。(3) 當(dāng)當(dāng)zf = 0, 返回返回(1); 當(dāng)當(dāng)zf0

30、, 則結(jié)束則結(jié)束repnz, (4) 執(zhí)行執(zhí)行repnz下一條指令。下一條指令。注意:注意: (cx)減1操作不影響標(biāo)志 zf標(biāo)志由串操作決定 當(dāng) (cx) = 0或zf=1時(shí)退出循環(huán)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) cmps dest,src;(es) :(di) -(ds):(si),(2) cmps b (字節(jié))(字節(jié));(si)

31、(si)1,(di)(di) 1(3) cmps 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)行 比較,比較結(jié)果相同在比較,比較結(jié)果相同在result 單元送單元送00h,不同送,不同送0ffh。mov si,offset str

32、ing1 mov di,offset string2 mov cx,count cld repz cmpsb;相等時(shí)繼續(xù)比較;相等時(shí)繼續(xù)比較 jnz unmat ;若串不同,在;若串不同,在resul單元中置單元中置0ffh mov al,0 ;若串相等,在;若串相等,在result單元中置單元中置00h jmp oulpt unmat:mov al,0ffh (scan string ) (di)字符串起始地址,(al)或(ax) 關(guān)鍵字 串掃描指令有3種格式:格式:格式:scas dest scasb(字節(jié));(字節(jié));(al)-(es):():(di),(),(di)(di)1 scasw(字);(字);(ax)-(es):():(di),(),(di) (di)2 (al)或()或(ax) - 目的串目的串兩數(shù)相減,只影響標(biāo)志,不影響操作數(shù)。兩數(shù)相減,只影響標(biāo)志,不影響操作數(shù)。其它特性與其它特性與movs同。同。 rep ne scasb指令應(yīng)用。例:要搜索的關(guān)鍵字 放在(al)或(ax)中,搜索某一數(shù)據(jù)塊或字符串中有無關(guān) 鍵字,若有,且記錄關(guān)鍵字地址;若判斷結(jié)果為0轉(zhuǎn)出,表示找到關(guān)鍵字;若計(jì)數(shù)器為0,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論