匯編-第7章 循環程序設計_第1頁
匯編-第7章 循環程序設計_第2頁
匯編-第7章 循環程序設計_第3頁
匯編-第7章 循環程序設計_第4頁
匯編-第7章 循環程序設計_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第7章循環程序設計涉及到的循環指令:

LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE

LOOP指令的執行步驟:

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

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

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

XORBL,BL ;計數器清0LOP:MOVAL,[SI] ;取一個字節

CMPAL,24H ;和’$’進行比較

JZSTOP ;相等則結束

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

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

MOVCX,0AH ;累加次數

LEABX,BUF ;數據表的首地址

LP:ADDAL,[BX] ;累加

INCBX ;地址增1 LOOPLP;若CX-1不為0,則繼續循環

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

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

MOVDI,-1;數組下標從0開始AGAIN:INCDICMPARR[DI],0;和0比較

LOOPZAGAIN;為0且沒比較完,則循環

JZEXIT;比較完仍為0,轉EXITMOVRES,DI;找到了,送下標號

EXIT:MOVAH,4CHINT21HCODEENDSENDSTARTNCX=0?YN修改地址指針計數值減1Y送結果=0?初始化取數比較開始結束例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取數=20H?CX=0?顯示‘Y’修改地址指針計數值減1顯示‘N’初始化開始結束用計數器控制循環例5:已知數據塊的長度,統計數據塊中正數和負數的個數DATASEGMENTBUFDB–32,25,36,-18,-64,0,-3COUNTEQU$-BUFPLUSDB?;存放正數個數MINUSDB?;存放負數個數DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBL,0;負數個數

MOVDL,0;正數個數

MOVSI,OFFSETBUF

MOVCX,0;循環初值

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

JGENEXT0;大于等于0轉移

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

JLLOP1;沒結束,則繼續

MOVMINUS,BL;存負數個數

MOVPLUS,DL;存正數個數

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

MOVCX,64H;計數初值

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

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

),若它的D0~D7位對應著BUF~BUF+7單元內容的運算。即某位為0,則將相應單元內容的最高位求反,其它位不變;而某位為1,則將相應單元內容之高低四位互換。Y讀數據修改地址指針初始化D7求反,其余位不變傳遞處理結果N變量讀完?YN變量一位=0?數據高低四位互換開始結束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]多重循環程序設計應用舉例例9:設在以EXST為首址的存儲區中依次存放著某考區245個理科生的七門成績,現要統計每個考生的總成績,并將其存放在該考生單科成績之后的兩個單元首址送SI,學生數(外循環次數)送BL

取數累加,修改地址,內循環計數減1SI+1送SI,課程數(內循環次數)送CX

修改地址指針,指向下一個學生NY存總分NYBL-1=0?CX-1=0?開始結束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 ;數據表首地址

MOVBL,245

;245個學生,外循環次數

LOP2:MOVCX,7

;七門課成績,內循環次數XORAX,AX ;清0,存總成績

INCSI

;跳過準考證號

LOP1:ADDAL,[SI] ;單科成績累加ADCAH,0 ;加進位位

INCSI ;修改地址指針

LOOPLOP1

;沒累加完單科成績,則繼續

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

INCSI ;條過存總成績的2個單元INCSIDECBL ;外循環次數減1JNZLOP2 ;不為0,則求下個學生總成績

MOVAH,4CH

INT21HCODE

ENDS

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論