微機(jī)原理第三章5_第1頁(yè)
微機(jī)原理第三章5_第2頁(yè)
微機(jī)原理第三章5_第3頁(yè)
微機(jī)原理第三章5_第4頁(yè)
微機(jī)原理第三章5_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 8086/8088指令系統(tǒng)微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用Institute of Electrical Engineering3.3.3 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令11、邏輯運(yùn)算指令、邏輯運(yùn)算指令 NOT OPRD (邏輯非運(yùn)算邏輯非運(yùn)算) AND OPRD1, OPRD2 (邏輯與運(yùn)算邏輯與運(yùn)算) OR OPRD1, OPRD2 (邏輯或運(yùn)算邏輯或運(yùn)算) XOR OPRD1, OPRD2 (異或運(yùn)算異或運(yùn)算) TEST OPRD1, OPRD2 (位檢測(cè)運(yùn)算位檢測(cè)運(yùn)算)2邏輯運(yùn)算指令特點(diǎn)邏輯運(yùn)算指令特點(diǎn) 以上五種邏輯運(yùn)算指令中,以上五種邏輯運(yùn)算指令中,NO

2、T不允許使用立即不允許使用立即數(shù)數(shù),其它,其它4條指令的源操作數(shù)可以是立即數(shù)。此條指令的源操作數(shù)可以是立即數(shù)。此外,至少有一個(gè)操作數(shù)必須存放在寄存器中,另外,至少有一個(gè)操作數(shù)必須存放在寄存器中,另一個(gè)操作數(shù)則可以使用任意尋址方式。一個(gè)操作數(shù)則可以使用任意尋址方式。 它們對(duì)標(biāo)志位的影響情況是,它們對(duì)標(biāo)志位的影響情況是,NOT指令不影響標(biāo)指令不影響標(biāo)志位,志位,其它其它4種指令將使種指令將使CF和和OF為為0,AF位無(wú)定位無(wú)定義,而義,而SF、ZF和和PF則根據(jù)運(yùn)算結(jié)果設(shè)置。則根據(jù)運(yùn)算結(jié)果設(shè)置。 這些邏輯運(yùn)算指令對(duì)處理操作數(shù)的某些位很有用,這些邏輯運(yùn)算指令對(duì)處理操作數(shù)的某些位很有用,例如可屏蔽某些

3、位(將這些位置例如可屏蔽某些位(將這些位置0),或使某些),或使某些位置位置1或測(cè)試某些位等?;驕y(cè)試某些位等。 3邏輯運(yùn)算舉例邏輯運(yùn)算舉例 NOT指令指令 NOT BX NOT AH NOT BYTE PTRBX AND指令指令 假設(shè)假設(shè)DX中存有數(shù)字中存有數(shù)字6和和9的的ASCII碼,即碼,即DX3639H,要將它們轉(zhuǎn)換成非壓縮的,要將它們轉(zhuǎn)換成非壓縮的BCD碼,并且碼,并且把結(jié)果存回把結(jié)果存回DX。 用如下指令實(shí)現(xiàn):用如下指令實(shí)現(xiàn):AND DX, 0F0FH ; DX3639H 0F0FH 將將DH和和DL中的高中的高4位用全位用全0屏蔽掉,截取低屏蔽掉,截取低4位,位,最后在最后在DX中

4、得到中得到6和和9的的BCD碼碼0609H。4邏輯運(yùn)算舉例邏輯運(yùn)算舉例 OR指令指令 假設(shè)假設(shè)AX中存有兩個(gè)中存有兩個(gè)BCD數(shù)數(shù)0508H,要將它們分別,要將它們分別轉(zhuǎn)換成轉(zhuǎn)換成ASCII碼,結(jié)果仍在碼,結(jié)果仍在AX中,則可用如下指令中,則可用如下指令實(shí)現(xiàn):實(shí)現(xiàn):OR AX, 3030H ; AX3538H5 XOR指令指令 若若AL中存有某外設(shè)端口的狀態(tài)信息,其中中存有某外設(shè)端口的狀態(tài)信息,其中Dl位控制位控制揚(yáng)聲器發(fā)聲,要求該位在揚(yáng)聲器發(fā)聲,要求該位在0、l之間來(lái)回變化,原來(lái)之間來(lái)回變化,原來(lái)是是1變成變成0,原來(lái)是,原來(lái)是0變成變成1,其余各位保留不變。,其余各位保留不變。 可以用以下指

5、令實(shí)現(xiàn):可以用以下指令實(shí)現(xiàn):XOR AL, 00000010BTEST指令的用法說(shuō)明指令的用法說(shuō)明 指令格式:指令格式:TEST dst, src 指令功能:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯與操指令功能:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯與操作、并修改標(biāo)志位,但不回送結(jié)果,即作、并修改標(biāo)志位,但不回送結(jié)果,即指令執(zhí)行后,兩個(gè)操作數(shù)都不變。指令執(zhí)行后,兩個(gè)操作數(shù)都不變。 用途:用途: 它常用在要檢測(cè)某些條件是否滿(mǎn)足,它常用在要檢測(cè)某些條件是否滿(mǎn)足,但又不希望改變?cè)胁僮鲾?shù)的情況之但又不希望改變?cè)胁僮鲾?shù)的情況之下。緊跟在這條指令后面的往往是一下。緊跟在這條指令后面的往往是一條條件轉(zhuǎn)移指令,根據(jù)測(cè)試結(jié)果產(chǎn)生條條件轉(zhuǎn)移指令,

6、根據(jù)測(cè)試結(jié)果產(chǎn)生分支,轉(zhuǎn)向不同的處理程序。分支,轉(zhuǎn)向不同的處理程序。6例例1:若要檢測(cè):若要檢測(cè)AL中的最低位是否為中的最低位是否為1,若為,若為1則轉(zhuǎn)移。則轉(zhuǎn)移。 TEST AL,01H JNZ THERE THERE:例例2:若要檢測(cè):若要檢測(cè)AX中的最高位是否為中的最高位是否為1,若為,若為1則轉(zhuǎn)移。則轉(zhuǎn)移。 例例3:若要檢測(cè):若要檢測(cè)CX中的內(nèi)容是否為中的內(nèi)容是否為1,若為,若為0則轉(zhuǎn)移。則轉(zhuǎn)移。 TEST AX,8000H JNZ THERE THERE: TEST CX,0FFFFH JZ THERE THERE:72、移位指令、移位指令 非循環(huán)移位指令非循環(huán)移位指令 SAL 算術(shù)

7、左移算術(shù)左移 SHL 邏輯左移邏輯左移 SAR 算術(shù)右移算術(shù)右移 SHR 邏輯右移邏輯右移8SAL/SHL指令的執(zhí)行指令的執(zhí)行 SAL指令格式:指令格式:SAL OPR, CNT SHL指令格式:指令格式:SHL OPR, CNT 這兩條指令的功能完全相同,均為左移這兩條指令的功能完全相同,均為左移CNT位。位。911 算術(shù)左移指 令: SAL OPRD,1 SAL OPRD,CL 邏輯左移指 令: SHL OPRD,1 SHL OPRD,CL有符號(hào)數(shù)有符號(hào)數(shù)無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù) 移動(dòng)次數(shù)為1的情況下,若移位之后操作數(shù)的最高位與CF標(biāo)志位狀態(tài)不相同,則OF=1,否則OF=0。這可用于判斷移位前后的

8、符號(hào)位是否一致。10例例 MOV CL, 2 SHL SI, CL 如指令執(zhí)行前如指令執(zhí)行前: (SI)=1450H 則則指令執(zhí)行后指令執(zhí)行后: (SI)=5140H,CF=0 相當(dāng)于相當(dāng)于5200*4d=20800d11SHR指令的執(zhí)行指令的執(zhí)行 SHR指令格式:指令格式:SHR OPR, CNT 功能:邏輯右移功能:邏輯右移CNT位位 每右移一位,相當(dāng)于對(duì)無(wú)符號(hào)數(shù)進(jìn)行除每右移一位,相當(dāng)于對(duì)無(wú)符號(hào)數(shù)進(jìn)行除2操作。操作。CFD15或D7D00SHR指令的邏輯右移操作示意圖12 移動(dòng)次數(shù)為1的情況下,若移位之后操作數(shù)的最高位與次高位不相同,則OF=1,否則OF=0。SAR指令的執(zhí)行指令的執(zhí)行 S

9、AR指令格式:指令格式:SAR OPR, CNT 功能:算術(shù)右移功能:算術(shù)右移CNT位位 每右移一位,相當(dāng)于對(duì)帶符號(hào)數(shù)進(jìn)行除每右移一位,相當(dāng)于對(duì)帶符號(hào)數(shù)進(jìn)行除2操作。操作。CFD15或D7D0SAR指令的算術(shù)右移操作示意圖13例例 已知已知(AL)=0B4H=10110100B,(CF)=1。 試分析下列指令分別執(zhí)行后對(duì)試分析下列指令分別執(zhí)行后對(duì)AL和和CF的影響。的影響。(1)SAL AL, 1(2)SAR AL, 1(3)SHL AL, 1(4)SHR AL, 129 已知已知(AL)=0B4H=10110100B,(CF)=1。(1)SAL AL, 1 ;移位后移位后(AL)= 68H=

10、01101000B, CF=1(2)SAR AL, 1 ;移位后移位后(AL)=0DAH=11011010B, CF=0(3)SHL AL, 1 ;移位后移位后(AL)= 68H=01101000B, CF=1(4)SHR AL, 1 ;移位后移位后(AL)= 5AH=01011010B, CF=0例例 已知變量已知變量Y中為一無(wú)符號(hào)字節(jié)數(shù),請(qǐng)用移位中為一無(wú)符號(hào)字節(jié)數(shù),請(qǐng)用移位指令完成指令完成(Y)*10計(jì)算,積放在計(jì)算,積放在AX中。中。30 MOV AL, Y ;(Y)AL MOV AH, 0 ;0AH SHL AX, 1 ;(Y)*2 MOV BX, AX ;(AX)BX SHL AX,

11、 1 ;(Y)*4 SHL AX, 1 ;(Y)*8 ADD AX, BX ;(Y)*10循環(huán)移位指令循環(huán)移位指令 循環(huán)移位指令循環(huán)移位指令 ROL OPRD, CNT (循環(huán)左移循環(huán)左移) ROR OPRD, CNT (循環(huán)右移循環(huán)右移) RCL OPRD, CNT (帶進(jìn)位循環(huán)左移帶進(jìn)位循環(huán)左移) RCR OPRD, CNT (帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移)31指令格式、對(duì)操作數(shù)的要求與非循環(huán)移位指令相同指令格式、對(duì)操作數(shù)的要求與非循環(huán)移位指令相同循環(huán)位移指令圖解循環(huán)位移指令圖解CFD15或D7D0CFD15或D7D0ROL指令的循環(huán)左移操作ROR指令的循環(huán)右移操作32通過(guò)進(jìn)位的循環(huán)指令圖

12、解通過(guò)進(jìn)位的循環(huán)指令圖解CFD15或D7D0CFD15或D7D0RCL指令的帶進(jìn)位循環(huán)左移操作RCR指令的帶進(jìn)位循環(huán)右移操作33例例 如如AX0012H,BX=0034H,要求把它們裝配在一,要求把它們裝配在一起形成起形成AX=1234H。 可利用移位指令實(shí)現(xiàn)上述要求,程序如下:可利用移位指令實(shí)現(xiàn)上述要求,程序如下:MOV AX,0012H ;設(shè)置;設(shè)置AX初值初值MOV BX,0034H ;設(shè)置;設(shè)置BX初值初值MOV CL,8 ;設(shè)置移位次數(shù);設(shè)置移位次數(shù)ROL AX,CL ;把;把AL內(nèi)容移入內(nèi)容移入AHADD AX,BX ;使;使AX=1234H 執(zhí)行執(zhí)行ROL指令后,指令后,AX12

13、00H,執(zhí)行,執(zhí)行ADD指令指令后,后,AX=1234H。 當(dāng)然當(dāng)然ADD指令也可用指令也可用OR AX, BX代替,起到同代替,起到同樣效果。樣效果。34例例 循環(huán)指令舉例循環(huán)指令舉例ROL BX,CL ;將將BX中的內(nèi)容不帶進(jìn)位循環(huán)左移中的內(nèi)容不帶進(jìn)位循環(huán)左移CL中規(guī)定中規(guī)定的次數(shù)的次數(shù)ROR WORD PTRSI,1 ;將物理地址為將物理地址為DS*16+SI單元的字不帶進(jìn)位循單元的字不帶進(jìn)位循環(huán)右移環(huán)右移1次次 35例例 設(shè)設(shè)CF1, AL = 1011 0100B = 0B4H 若執(zhí)行指令若執(zhí)行指令ROL AL, 1 ;則則AL=? CF=?, OF=?若執(zhí)行指令若執(zhí)行指令ROR A

14、L, 1 ;則則AL= ? CF=?, OF=?若執(zhí)行指令若執(zhí)行指令RCR AL, 1 ;則則AL=? CF=?, OF=?若執(zhí)行指令若執(zhí)行指令MOV CL, 3 RCL AL, CL ;則則AL=?, CF=?, OF=?36 設(shè)設(shè)CF1, AL = 1011 0100B = 0B4H 若執(zhí)行指令若執(zhí)行指令ROL AL, 1 ;則則AL=0110 1001B, CF=1, OF=1若執(zhí)行指令若執(zhí)行指令ROR AL, 1 ;則則AL=0101 1010B, CF=0, OF=1若執(zhí)行指令若執(zhí)行指令RCR AL, 1 ;則則AL=1101 1010B, CF=0, OF=0若執(zhí)行指令若執(zhí)行指令M

15、OV CL, 3 RCL AL, CL ;則則AL=1010 0110B, CF=1, OF不確定不確定循環(huán)移位指令的應(yīng)用循環(huán)移位指令的應(yīng)用 用于對(duì)某些位狀態(tài)的測(cè)試;用于對(duì)某些位狀態(tài)的測(cè)試; 高位部分和低位部分的交換;高位部分和低位部分的交換; 與非循環(huán)移位指令一起組成與非循環(huán)移位指令一起組成3232位或更位或更長(zhǎng)字長(zhǎng)數(shù)的移位。長(zhǎng)字長(zhǎng)數(shù)的移位。P124例例3-34P124例例3-35例:由ASCII碼轉(zhuǎn)換為BCD碼 若在內(nèi)存的輸入緩沖區(qū)中,已有若干個(gè)用ASCII碼表示的十進(jìn)制數(shù)碼,則每個(gè)存儲(chǔ)單元只存放一位十進(jìn)制數(shù)碼。要求把它們轉(zhuǎn)換為相應(yīng)的BCD碼,且把兩個(gè)相鄰存儲(chǔ)單元的十進(jìn)制數(shù)碼的BCD碼合并

16、在一個(gè)存儲(chǔ)單元中,且地址高的放在前4位,以此節(jié)省一半存儲(chǔ)單元。分析:要把十進(jìn)制數(shù)碼的ASCII碼的個(gè)數(shù)有可能是偶數(shù),但也可能是奇數(shù)。若是奇數(shù),則把地址最低的一個(gè)轉(zhuǎn)換為BCD碼(高4位為0),然后把剩下的偶數(shù)個(gè)按統(tǒng)一的方法處理。MOV SI, OFFSET ASCBUF; 加載源地址MOV DI, OFFSET BCDBUF; 加載目標(biāo)地址MOV CX, COUNT ; 加載要轉(zhuǎn)換的ASCII個(gè)數(shù) ROR CX, 1 ; 右移CX(除2)并把最低位移入進(jìn)位標(biāo)志JNC NEXT ;進(jìn)位為0,CX為偶數(shù),轉(zhuǎn)至NEXT處理ROL CX, 1 ;恢復(fù)CXMOV AL, SI ;取出第一個(gè)ASCII數(shù)IN

17、C SI ;源指針指向下一個(gè)AND AL ,0FH ;把ASCII轉(zhuǎn)換為BCDMOV DI, AL ;存入目標(biāo)區(qū)INC DI ;目標(biāo)指針指向下一個(gè)DEC CX ;個(gè)數(shù)減1ROR CX , 1 ;把CX除2NEXT: MOV AL, SI ;取入ASCII數(shù) INC SI ;源指針指向下一個(gè) AND AL, 0FH ;把ASCII轉(zhuǎn)換為BCD MOV BL, AL ;暫存至BL MOV AL, SI ; 取下一個(gè)ASCII數(shù) INC SI ;源指針指向下一個(gè) PUSH CX ;暫存CX MOV CL,4 ; 設(shè)移位次數(shù) SAL AL,CL ;第二個(gè)ASCII數(shù)左移4位 POP CX ;恢復(fù)CX

18、ADD AL, BL ;把兩個(gè)BCD數(shù)組和 MOV DI, AL ;存至目標(biāo)區(qū) INC DI ;目標(biāo)指針指向下一個(gè) DEC CX ;CX減一 JNZ ;若不為0,繼續(xù)循環(huán) HLT 3.3.4 串操作指令串操作指令 串操作指令串操作指令 : 數(shù)據(jù)傳送類(lèi)指令每次只能傳送一個(gè)數(shù)據(jù),若要傳數(shù)據(jù)傳送類(lèi)指令每次只能傳送一個(gè)數(shù)據(jù),若要傳送大批數(shù)據(jù)就需要重復(fù)編程,這樣就浪費(fèi)了大量的時(shí)送大批數(shù)據(jù)就需要重復(fù)編程,這樣就浪費(fèi)了大量的時(shí)間和空間。間和空間。 為此為此8086提供了一組處理主存中連續(xù)存放數(shù)據(jù)串提供了一組處理主存中連續(xù)存放數(shù)據(jù)串的指令,這就是串操作指令。的指令,這就是串操作指令。 針對(duì)數(shù)據(jù)塊或字符串的操作

19、;針對(duì)數(shù)據(jù)塊或字符串的操作;可實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送;可實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送;待操作的數(shù)據(jù)串稱(chēng)為源串,目標(biāo)地址稱(chēng)為目標(biāo)串。待操作的數(shù)據(jù)串稱(chēng)為源串,目標(biāo)地址稱(chēng)為目標(biāo)串。1 1、串操作指令的共同特點(diǎn)、串操作指令的共同特點(diǎn) 源串默認(rèn)在數(shù)據(jù)段(DS),偏移地址由SI指定。允許段重設(shè); 目標(biāo)串必須在附加段,偏移地址由DI指定; 指令自動(dòng)修改地址指針,修改方向由DF決定。 DF=0 DF=1 數(shù)據(jù)塊長(zhǎng)度值由CX指定 可增加自動(dòng)重復(fù)前綴以實(shí)現(xiàn)自動(dòng)修改CX內(nèi)容。增地址方向;增地址方向;減地址方向;減地址方向;2 2、重復(fù)操作前綴、重復(fù)操作前綴(1)REP REP前綴用在前綴用在MOVS、STOS

20、 、LODS指令前。指令前。功能:每執(zhí)行一次串指令(功能:每執(zhí)行一次串指令(CX)1,直到(,直到(CX)=0,重復(fù)執(zhí)行結(jié)束。,重復(fù)執(zhí)行結(jié)束。 當(dāng)當(dāng)(CX)0, (CX) (CX)-1 , 執(zhí)行執(zhí)行REP后的串指令。后的串指令。 當(dāng)當(dāng)(CX)= 0 ,結(jié)束結(jié)束REP,執(zhí)行下一條指令。執(zhí)行下一條指令。( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1執(zhí)行下一條指令執(zhí)行下一條指令執(zhí)行REP后的串執(zhí)行REP后的串指令指令N NREP 執(zhí)行流程圖執(zhí)行流程圖(2)REPE/ REPZ 該指令一般用在該指令一般用在CMPS、SCAS指令前。指令前。 功能:每執(zhí)行一次串指令(

21、功能:每執(zhí)行一次串指令(CX)1,并判斷,并判斷ZF標(biāo)志標(biāo)志是否為是否為0,只要(,只要(CX)=0或或ZF=0,則重復(fù)執(zhí)行結(jié)束。,則重復(fù)執(zhí)行結(jié)束。(3) REPNE/REPNZ 該指令一般用在該指令一般用在CMPS、SCAS 指令前。指令前。 功能:每執(zhí)行一次串指令(功能:每執(zhí)行一次串指令(CX)1,并判斷,并判斷ZF標(biāo)志標(biāo)志是否為是否為0,只要(,只要(CX)=0或或ZF=1,則重復(fù)執(zhí)行結(jié)束。,則重復(fù)執(zhí)行結(jié)束。 無(wú)條件重復(fù) REP 條件重復(fù) REPE 相等重復(fù) REPZ 為零重復(fù) REPNE 不相等重復(fù) REPNZ 不為零重復(fù)CX0 ZF=1CX0 ZF=0CX0 重復(fù)重復(fù)串操作指令流程(

22、以傳送操作為例)取源串地址取源串地址取目標(biāo)串地址取目標(biāo)串地址設(shè)串長(zhǎng)度設(shè)串長(zhǎng)度傳送一個(gè)字節(jié)或字傳送一個(gè)字節(jié)或字修改地址指針修改地址指針修改串長(zhǎng)度值修改串長(zhǎng)度值傳送完否?傳送完否?NY設(shè)操作方向設(shè)操作方向1串傳送指令串傳送指令MOVS語(yǔ)句格式:語(yǔ)句格式: MOVS OPRD1, OPRD2 MOVSB字節(jié)串傳送字節(jié)串傳送 MOVSW字串傳送字串傳送功能:將以功能:將以SI為指針的源串中的一個(gè)字節(jié)(或字)為指針的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)傳送至以存儲(chǔ)單元中的數(shù)據(jù)傳送至以DI為指針的目的地址中為指針的目的地址中去,并自動(dòng)修改指針,使之指向下一個(gè)字節(jié)(或字)去,并自動(dòng)修改指針,使之指向下一

23、個(gè)字節(jié)(或字)存儲(chǔ)單元。存儲(chǔ)單元。即:(即:(DS:SI)ES:DI。 當(dāng)當(dāng)DF=0時(shí),(時(shí),(SI)和()和(DI)增量。)增量。 當(dāng)當(dāng)DF=1時(shí),(時(shí),(SI)和()和(DI)減量。)減量。3 3、串操作指令、串操作指令 歸納起來(lái)。執(zhí)行串操作前準(zhǔn)備工作:歸納起來(lái)。執(zhí)行串操作前準(zhǔn)備工作:(1)CLD/STD(2)源串首地址)源串首地址 SI(3)目的串首地址)目的串首地址 DI(4)字串長(zhǎng)度)字串長(zhǎng)度 CX2串比較指令串比較指令CMPS 語(yǔ)句格式:語(yǔ)句格式: CMPS OPRD1, OPRD2 CMPSB字節(jié)串比較字節(jié)串比較 CMPSW字串比較字串比較功能:將功能:將SI所指的源串中的一個(gè)字

24、節(jié)(或字)存儲(chǔ)所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)與單元中的數(shù)據(jù)與DI所指的目的串中的一個(gè)字節(jié)(或所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,并根據(jù)相減的結(jié)果設(shè)字)存儲(chǔ)單元中的數(shù)據(jù)相減,并根據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。置標(biāo)志,但結(jié)果并不保存。即:(即:(DS:SI)()(ES:DI)。)。 修改串指針,使之指向串中的下一個(gè)元素。修改串指針,使之指向串中的下一個(gè)元素。 當(dāng)當(dāng)DF=0時(shí),(時(shí),(SI)和()和(DI)增量。)增量。 當(dāng)當(dāng)DF=1時(shí),(時(shí),(SI)和()和(DI)減量。)減量。例例1 CMPS指令舉例指令舉例 比較兩個(gè)字符串,一個(gè)是操作員在程序中設(shè)定的比

25、較兩個(gè)字符串,一個(gè)是操作員在程序中設(shè)定的口令串口令串PASSWORD(常量串取名為:常量串取名為:PSWD),另,另一個(gè)是從鍵盤(pán)輸入的字符串一個(gè)是從鍵盤(pán)輸入的字符串IN-WORD(變量串取變量串取名為:名為:IPSWD),若輸入串與口令串相同,程序,若輸入串與口令串相同,程序?qū)㈤_(kāi)始執(zhí)行。否則,程序驅(qū)動(dòng)將開(kāi)始執(zhí)行。否則,程序驅(qū)動(dòng)PC機(jī)的揚(yáng)聲器發(fā)聲,機(jī)的揚(yáng)聲器發(fā)聲,警告用戶(hù)口令不符,拒絕往下執(zhí)行。警告用戶(hù)口令不符,拒絕往下執(zhí)行。 這一處理邏輯可以用這一處理邏輯可以用CMPS指令來(lái)實(shí)現(xiàn)。請(qǐng)參看指令來(lái)實(shí)現(xiàn)。請(qǐng)參看下面的程序段。下面的程序段。例 程序清單DATASEGMENT;數(shù)據(jù)段PSWDDB,750

26、430LI;口令串IPSWD DB,750424LE;從鍵盤(pán)輸入的串COUNT EQU8;串長(zhǎng)度DATAENDSCODESEGUENT;代碼段ASSUMEDS:DATA, ES:DATALEASI,PSWD;源串指針LEADI,IPSWD;目的串指針MOVCX,COUNT;串長(zhǎng)度CLD;地址增量REPZCMPSB;CX0 且 串相等時(shí)重復(fù)比較JNESOUND;若不相等轉(zhuǎn)發(fā)聲程序OK:;比較完畢且相等則往下執(zhí)行SOUND:;使P C機(jī) 揚(yáng)聲器發(fā)聲;并退出CODEENDS例例2 比較兩個(gè)串是否完全一致(比較兩個(gè)串是否完全一致(100個(gè)字節(jié))若有不同,將地址送個(gè)字節(jié))若有不同,將地址送入入BX,內(nèi)容

27、送入,內(nèi)容送入AL,若相同,將,若相同,將0送入送入BX。 CLD MOV CX, 100 MOV SI, 2400H MOV DI, 1200H REPE CMPSB AND CX, 0FFFFH JZ EQQ DEC SI MOV BX, SI MOV AL, SI JMP STOP EQQ: MOV BX, 0 STOP: HLT3串搜索指令串搜索指令SCAS語(yǔ)句格式:語(yǔ)句格式: SCAS DOPRD SCASB字節(jié)串搜索字節(jié)串搜索 SCASW字串搜索字串搜索功能:功能:AL(字節(jié))或(字節(jié))或AX(字)中的內(nèi)容與(字)中的內(nèi)容與DI所指所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)的

28、目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存,相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存,即:即: 字節(jié)操作:(字節(jié)操作:(AL)()(ES:DI),), 字操作:(字操作:(AX)()( ES:DI)。)。 修改指針使之指向串中的下一個(gè)元素。修改指針使之指向串中的下一個(gè)元素。 當(dāng)當(dāng)DF=0時(shí),(時(shí),(DI)增量。)增量。 當(dāng)當(dāng)DF=1時(shí),(時(shí),(DI)減量。)減量。例例 SCAS指令示例程序指令示例程序 在某一字符串中搜尋是否有字符在某一字符串中搜尋是否有字符A,若有,若有,則把搜索次數(shù)記下來(lái),送到則把搜索次數(shù)記下來(lái),送到BX寄存器中。寄存器中。若沒(méi)有查到

29、,則將若沒(méi)有查到,則將BX寄存器清寄存器清0。 請(qǐng)參看下面的程序段。請(qǐng)參看下面的程序段。 字符串起始地址字符串起始地址STRING的偏移地址為的偏移地址為0 字符串長(zhǎng)度存入字符串長(zhǎng)度存入CX寄存器。寄存器。 例例 程序清單程序清單 MOV DI, OFFSET STRING ; DI=字符串偏移地址 MOV CX, COUNT ;CX=字符串長(zhǎng)度 MOV AL, A ; AL=關(guān)鍵字A的ASCII碼 CLD ; 清方向標(biāo)志 REPNE SCASB ; CX0(沒(méi)查完)和ZF=(不相等)時(shí)重復(fù) JZ FIND ; 若ZF=1,表示已經(jīng)搜索到,轉(zhuǎn)移出去。 MOV DI, 0 ;若CX=0但ZF0,

30、表示沒(méi)搜到,DI=0 JMP DONEFIND: DEC DI ;執(zhí)行完串掃描后,DI已自動(dòng)加1 MOV BX, DI ;BX=搜索次數(shù)DONE: HLT ;停機(jī)4從源串中取數(shù)指令從源串中取數(shù)指令LODS語(yǔ)句格式:語(yǔ)句格式: LODS SOPRD LODSB從字節(jié)串中取數(shù)從字節(jié)串中取數(shù) LODSW從字串中取數(shù)從字串中取數(shù)功能:將功能:將SI所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)取出來(lái)送入單元中的數(shù)據(jù)取出來(lái)送入AL(或(或AX)中。一般不加)中。一般不加重復(fù)前綴。重復(fù)前綴。即:即: 字節(jié)操作:(字節(jié)操作:(DS:SI)AL, 字操作:(字操作:(DS:S

31、I)AX。 修改指針修改指針SI,使它指向串中的下一個(gè)元素。,使它指向串中的下一個(gè)元素。當(dāng)當(dāng)DF=0時(shí),(時(shí),(SI)增量。當(dāng))增量。當(dāng)DF=1時(shí),(時(shí),(SI)減量。)減量。 例例 LODSW指令執(zhí)行示意圖指令執(zhí)行示意圖(AX)=?(AX)=?(DS)=7000H70000H08H11H70100H70101H70102H(SI)=0100HDF=0LODSW指令執(zhí)行前LODSW指令執(zhí)行前(AX)=1108H(AX)=1108H(DS)=7000H70000H08H11H70100H70101H70102H(SI)=0102HDF=0LODSW指令執(zhí)行后LODSW指令執(zhí)行后 5往目的串中存數(shù)

32、指令往目的串中存數(shù)指令STOS 語(yǔ)句格式:語(yǔ)句格式: STOS DOPRD STOSB往字節(jié)串中存數(shù)往字節(jié)串中存數(shù) STOSW往字串中存數(shù)往字串中存數(shù) 功能:將功能:將AL或或AX中的數(shù)據(jù)送入中的數(shù)據(jù)送入DI所指的目的串中的所指的目的串中的字節(jié)(或字)存儲(chǔ)單元中。字節(jié)(或字)存儲(chǔ)單元中。 即:即: 字節(jié)操作:(字節(jié)操作:(AL)ES:DI, 字操作:(字操作:(AX)ES:DI。 修改指針修改指針DI,使之指向串中的下一個(gè)元素。,使之指向串中的下一個(gè)元素。 當(dāng)當(dāng)DF=0時(shí),(時(shí),(DI)增量。)增量。 當(dāng)當(dāng)DF=1時(shí),(時(shí),(DI)減量。)減量。例例 如果要把附加段中的五個(gè)字節(jié)緩沖區(qū)置為如果要把附加段中的五個(gè)字節(jié)緩沖區(qū)置為20H值值(ASCII碼空格,碼空格,Space),則可根據(jù)串處理指,則可根據(jù)串處理指令的要求預(yù)置指針及方向標(biāo)志令的要求預(yù)置指針及方向標(biāo)志, 并用含有重復(fù)前并用含有重復(fù)前綴的綴的REP STOSB指令執(zhí)行。指令執(zhí)行。 指令行如下:指令行如下:MOV AL, 20HMOV CX, 5CLDREP STOSB 此例的圖解參看下頁(yè)。此例的圖解參看下頁(yè)。例例 STOSB指令執(zhí)行圖解指令執(zhí)行圖解REP STOSB指令執(zhí)行后REP STOSB指令執(zhí)行后(ES)=1000H10000H(DI)=0505H20H20H20H20H20H10500H D

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論