匯編-第7章 循環(huán)程序設(shè)計_第1頁
匯編-第7章 循環(huán)程序設(shè)計_第2頁
匯編-第7章 循環(huán)程序設(shè)計_第3頁
匯編-第7章 循環(huán)程序設(shè)計_第4頁
匯編-第7章 循環(huán)程序設(shè)計_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章循環(huán)程序設(shè)計涉及到的循環(huán)指令:

LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE

LOOP指令的執(zhí)行步驟:

(1)(CX)←(CX)-1(2)檢查是否滿足測試條件,如滿足則

(IP)←(IP)+8位位移量,實行循環(huán);不滿足則IP不變,退出循環(huán)。循環(huán)指令:LOOPOPR測試條件:(CX)0為零或相等時循環(huán)指令:LOOPZ(LOOPE)OPR測試條件:ZF=1且(CX)0不為零或不相等時循環(huán)指令:LOOPNZ(LOOPNE)OPR測試條件:ZF=0且(CX)0LOOPAGAIN

DECCXJNZAGAINAGAIN是一個地址標(biāo)號循環(huán)程序的結(jié)構(gòu)DO-WHILE結(jié)構(gòu)控制條件初始化循環(huán)體YN控制條件初始化循環(huán)體YNDO-UNTIL結(jié)構(gòu)初始化:設(shè)置循環(huán)的初始狀態(tài)循環(huán)體:循環(huán)的工作部分及修改部分控制條件:計數(shù)控制特征值控制地址邊界控制用分支指令控制循環(huán)例1:在STR開始的緩沖區(qū)中存放有一個字符串,計算該字符串的長度并存入LEN單元。DATASEGMENTSTRDB’computer$’LENDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXLEASI,STR ;串首地址

XORBL,BL ;計數(shù)器清0LOP:MOVAL,[SI] ;取一個字節(jié)

CMPAL,24H ;和’$’進(jìn)行比較

JZSTOP ;相等則結(jié)束

INCBL ;否則計數(shù)器加1INCSI ;地址指針加1JMPLOP ;轉(zhuǎn)回到LOPSTOP:MOVLEN,BL ;存儲字符個數(shù)

MOVAH,4CHINT21HCODEENDS ENDSTARTNY=‘$’?存串長度取串元素置指針、串長度初值為0開始結(jié)束串長度加1修改地址指針用專用的循環(huán)指令控制循環(huán)例2:求以BUF為首地址的10個內(nèi)存單元的無符號數(shù)據(jù)和。已知其和小于等于255,將結(jié)果存入第11個內(nèi)存單元DATASEGMENTBUFDB12H,38H,46H,0BH,09H,41H,32H,56,02H,26HRESDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXMOVAL,0 ;存放累加之和

MOVCX,0AH ;累加次數(shù)

LEABX,BUF ;數(shù)據(jù)表的首地址

LP:ADDAL,[BX] ;累加

INCBX ;地址增1 LOOPLP;若CX-1不為0,則繼續(xù)循環(huán)

MOVRES,AL ;CX-1=0,則存累加和

MOVAH,4CHINT21HCODEENDS ENDSTARTNYCX=0?AL清0送結(jié)果取數(shù)累加修改地址指針、計數(shù)值減1開始結(jié)束例3:在字節(jié)數(shù)組中找出第一個非0的數(shù)據(jù),并將其下標(biāo)存入RES單元,假設(shè)其下標(biāo)值小于10DATASEGMENTARRDB0,0,38H,46H DB89H,67H,0H,92HCNTEQU$–ARRRESDW?DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,CNT;循環(huán)次數(shù)

MOVDI,-1;數(shù)組下標(biāo)從0開始AGAIN:INCDICMPARR[DI],0;和0比較

LOOPZAGAIN;為0且沒比較完,則循環(huán)

JZEXIT;比較完仍為0,轉(zhuǎn)EXITMOVRES,DI;找到了,送下標(biāo)號

EXIT:MOVAH,4CHINT21HCODEENDSENDSTARTNCX=0?YN修改地址指針計數(shù)值減1Y送結(jié)果=0?初始化取數(shù)比較開始結(jié)束例4:在字符串中從前向后查找空格字符(ASCII碼為20H),找到顯示Y,否則就顯示NDATASEGMENTSTRDB‘ASDFKLIOOP’LENEQU$–STRDATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX MOVCX,LENMOVSI,-1MOVAL,20HNEXT:INCSICMPAL,STR[SI] LOOPNENEXTJNZNFINDMOVDL,’Y’MOVAH,2INT21HJMPEXIT NFIND:MOVDL,’N’MOVAH,2INT21HEXIT:MOVAH,4CHINT21HCODEENDSENDSTARTNYNY取數(shù)=20H?CX=0?顯示‘Y’修改地址指針計數(shù)值減1顯示‘N’初始化開始結(jié)束用計數(shù)器控制循環(huán)例5:已知數(shù)據(jù)塊的長度,統(tǒng)計數(shù)據(jù)塊中正數(shù)和負(fù)數(shù)的個數(shù)DATASEGMENTBUFDB–32,25,36,-18,-64,0,-3COUNTEQU$-BUFPLUSDB?;存放正數(shù)個數(shù)MINUSDB?;存放負(fù)數(shù)個數(shù)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBL,0;負(fù)數(shù)個數(shù)

MOVDL,0;正數(shù)個數(shù)

MOVSI,OFFSETBUF

MOVCX,0;循環(huán)初值

LOP1:MOVAL,[SI];取值CMPAL,0;和0比較

JGENEXT0;大于等于0轉(zhuǎn)移

INCBL;小于0,BL加1JMPNEXT1NEXT0:INCDL ;大于等于0,DL加1NEXT1:INCSI;指針加1INCCX;計數(shù)加1CMPCX,COUNT;比較次數(shù)

JLLOP1;沒結(jié)束,則繼續(xù)

MOVMINUS,BL;存負(fù)數(shù)個數(shù)

MOVPLUS,DL;存正數(shù)個數(shù)

MOVAH,4CHINT21HCODEENDSENDSTART例6:將BUF單元開始的100個字節(jié)存儲單元全部清0DATASEGMENTBUFDB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETBUF;地址指針

MOVCX,64H;計數(shù)初值

LP:MOVBYTEPTR[BX],0;清0 INCBX;地址加1LOOPLP;減1不為0,則繼續(xù)

MOVAH,4CHINT21H CODEENDS ENDSTARTNY內(nèi)存單元清0CX=0?修改指針,計數(shù)值減1初始化開始結(jié)束按問題的條件控制循環(huán)例7:記錄某個字節(jié)存儲數(shù)據(jù)單元中1的個數(shù),并把結(jié)果存入RES中。YNYN=0?取數(shù)CF=0?移位計數(shù)加1開始結(jié)束DATASEGMENTNUMDB75HRESDB?DATAENDS CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXMOVBL,NUM XORDL,DLAGAIN:TESTBL,0FFHJZNEXTSHRBL,1ADCDL,0JMPAGAINNEXT:MOVRES,DLMOVAH,4CHINT21H CODEENDS ENDSTART按邏輯變量控制循環(huán)例8:在以BUF為起始地址的內(nèi)存中放有若干個字節(jié)型無符號數(shù),假定邏輯變量的長度為一個字節(jié)(其值為10010101

),若它的D0~D7位對應(yīng)著BUF~BUF+7單元內(nèi)容的運算。即某位為0,則將相應(yīng)單元內(nèi)容的最高位求反,其它位不變;而某位為1,則將相應(yīng)單元內(nèi)容之高低四位互換。Y讀數(shù)據(jù)修改地址指針初始化D7求反,其余位不變傳遞處理結(jié)果N變量讀完?YN變量一位=0?數(shù)據(jù)高低四位互換開始結(jié)束SHRCH,1JNCNEXTMOVCL,4ROLAL,CLJMPRESNEXT:XORAL,80HRES:MOV[BX],ALINCBXDECAHJNZLPMOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENTBUFDB75H,12H,87H,98HDB81H,56H,73H,51HBEQU8CEQU10010101BDATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,BMOVCH,CLEABX,BUFLP:MOVAL,[BX]多重循環(huán)程序設(shè)計應(yīng)用舉例例9:設(shè)在以EXST為首址的存儲區(qū)中依次存放著某考區(qū)245個理科生的七門成績,現(xiàn)要統(tǒng)計每個考生的總成績,并將其存放在該考生單科成績之后的兩個單元首址送SI,學(xué)生數(shù)(外循環(huán)次數(shù))送BL

取數(shù)累加,修改地址,內(nèi)循環(huán)計數(shù)減1SI+1送SI,課程數(shù)(內(nèi)循環(huán)次數(shù))送CX

修改地址指針,指向下一個學(xué)生NY存總分NYBL-1=0?CX-1=0?開始結(jié)束DATA

SEGMENTEXSTDB01,75,82,84,92,78,49,85,00,00 DB02,83,92,63,76,82,58,69,00,00…

DATA

ENDSCODE

SEGMENT

ASSUMECS:CODE,DS:DATA

MOVAX,DATAMOVDS,AX

START:LEASI,EXST ;數(shù)據(jù)表首地址

MOVBL,245

;245個學(xué)生,外循環(huán)次數(shù)

LOP2:MOVCX,7

;七門課成績,內(nèi)循環(huán)次數(shù)XORAX,AX ;清0,存總成績

INCSI

;跳過準(zhǔn)考證號

LOP1:ADDAL,[SI] ;單科成績累加ADCAH,0 ;加進(jìn)位位

INCSI ;修改地址指針

LOOPLOP1

;沒累加完單科成績,則繼續(xù)

MOVWORDPTR[SI],AX;累加完,存總成績

INCSI ;條過存總成績的2個單元INCSIDECBL ;外循環(huán)次數(shù)減1JNZLOP2 ;不為0,則求下個學(xué)生總成績

MOVAH,4CH

INT21HCODE

ENDS

ENDSTART例10:將N個不同的無符號數(shù)a1,a2,...,an由小到大進(jìn)行排序。若每個數(shù)占一個字,則N個數(shù)可定義如下:

ADWa1,a2,a3,...,an。它們的內(nèi)存分配分別為A[0],A[2],A[4

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論