版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、3.5 循環(huán)程序設(shè)計循環(huán)程序結(jié)構(gòu)是滿足一定條件的情況下,重復(fù)執(zhí)行某段程序循環(huán)結(jié)構(gòu)的程序通常有3個部分: 循環(huán)初始部分為開始循環(huán)準(zhǔn)備必要的條件,如循環(huán)次數(shù)、循環(huán)體需要的數(shù)值等 循環(huán)體部分指重復(fù)執(zhí)行的程序部分,其中包括對循環(huán)條件等的修改程序段循環(huán)控制部分判斷循環(huán)條件是否成立,決定是否繼續(xù)循環(huán)關(guān)鍵是什么?循環(huán)控制循環(huán)結(jié)構(gòu)程序的設(shè)計關(guān)鍵是循環(huán)控制部分循環(huán)控制可以在進入循環(huán)之前進行,也可以在循環(huán)體后進行,于是形成兩種結(jié)構(gòu):“先判斷、后循環(huán)”結(jié)構(gòu)“先循環(huán)、后判斷”結(jié)構(gòu)循環(huán)結(jié)束的控制可以用循環(huán)次數(shù),還可以用特定條件等,于是又有:計數(shù)控制循環(huán)條件控制循環(huán)圖示先循環(huán)后判斷的循環(huán)結(jié)構(gòu) 結(jié)束 初始化 循環(huán)的初始狀態(tài)
2、 循環(huán)體 循環(huán)的工作部分及修改部分 計數(shù)控制循環(huán)條件控制循環(huán)修改部分控制條件YN3.5.1 計數(shù)控制循環(huán) 計數(shù)控制循環(huán)利用循環(huán)次數(shù)作為控制條件易于采用循環(huán)指令LOOP和JCXZ實現(xiàn)初始化:將循環(huán)次數(shù)或最大循環(huán)次數(shù)置入CX循環(huán)體循環(huán)控制:用LOOP指令對CX減1、并判斷是否為0例3.8 二進制從鍵盤輸入的ASCII碼 mov ah,01h ;從鍵盤上輸入一個字符 int 21h mov bl,al mov ah,2 mov dl,: ;輸出冒號 int 21h mov cx,8;CX8(循環(huán)次數(shù))again: shl bl,1;左移進CF,從高位開始顯示 mov dl,0;MOV指令不改變CF
3、adc dl,30h;DL030HCF mov ah,2 int 21h;顯示 loop again ;CX減1,如果CX未減至0,則循環(huán) (ex3_8.asm)例3.8二進制從鍵盤輸入的ASCII碼 again: shl bl,1;左移進CF,從高位開始顯示 mov dl,0;MOV指令不改變CF adc dl,30h;DL030HCF mov ah,2 int 21h;顯示 loop again也可以改為again: rol bl,1 ;循環(huán)左移,把bl最高位移到最低位 mov dl,bl ; and dl,01h;dl內(nèi)容與1相與,若dl最低位為1 add dl,30h ;運算結(jié)果為1,
4、否則為0 mov ah,2 int 21h;顯示 loop again (ex3_8a.asm)例3.9 求數(shù)組元素的最大值和最小值;數(shù)據(jù)段arraydw 10;假設(shè)一個數(shù)組,其中頭個數(shù)據(jù)10表示元素個數(shù)dw -3,0,20,900,587,-632,777,234,-34,-56;這是一個有符號字量元素組成的數(shù)組,在內(nèi)存中以補碼表示maxaydw ?;存放最大值minaydw ?;存放最小值初始化:循環(huán)次數(shù)元素個數(shù)1循環(huán)體:逐個比較求最大、小值循環(huán)控制:比較完所有數(shù)據(jù)例3.9 代碼段;代碼段lea si,arraymov cx,si;取得元素個數(shù)dec cx;減1后是循環(huán)次數(shù)add si,2
5、mov ax,si;取出第一個元素給AX,AX用于暫存最大值mov bx,ax;取出第一個元素給BX,BX用于暫存最小值初始化例3.9 代碼段(續(xù))maxck:add si,2cmp si,ax;與下一個數(shù)據(jù)比較jle minckmov ax,si;AX取得更大的數(shù)據(jù)jmp nextminck:cmp si,bxjge nextmov bx,si;BX取得更小的數(shù)據(jù)next:loop maxck;計數(shù)循環(huán)mov maxay,ax;保存最大值mov minay,bx;保存最小值循環(huán)體例3.10 鍵盤輸入N,顯示N個“?”mov ah,1;接受鍵盤輸入int 21hand al,0fh;只取低4位
6、xor ah,ahmov cx,ax;作為循環(huán)次數(shù)jcxz done;次數(shù)為0,則結(jié)束again:mov dl,?;循環(huán)體mov ah,2int 21hloop again;循環(huán)控制done:;結(jié)束“邊界”問題3.5.2 條件控制循環(huán)條件控制循環(huán)需要利用特定條件判斷循環(huán)是否結(jié)束條件控制循環(huán)用條件轉(zhuǎn)移指令判斷循環(huán)條件轉(zhuǎn)移指令可以指定目的標(biāo)號來改變程序的運行順序,如果目的標(biāo)號指向一個重復(fù)執(zhí)行的語句體的開始或結(jié)束,便構(gòu)成了循環(huán)控制結(jié)構(gòu)例3.11 記錄某個字存儲單元數(shù)據(jù)中1的個數(shù);數(shù)據(jù)段numberdw 1110111111100100B;代碼段mov bx,numberxor dl,dl;循環(huán)初值:
7、DL0again:test bx,0ffffh;也可以用cmp bx,0jz done;全部是0就可以退出循環(huán),減少循環(huán)次數(shù)shl bx,1;用指令shr bx,1也可以adc dl,0 ;因為移位出現(xiàn)1個1,可以把CF置1;利用ADC指令加CF的特點進行計數(shù)jmp again條件控制循環(huán)先判斷后循環(huán)例3.11 十進制顯示(016數(shù)值)done:cmp dl,10;判斷1的個數(shù)是否小于10jb digit;1的個數(shù)小于10,轉(zhuǎn)移push dxmov dl,1;1的個數(shù)大于或等于10mov ah,2;則要先顯示一個1int 21hpop dxsub dl,10digit:add dl,0;顯示個
8、數(shù)mov ah,2int 21h單分支結(jié)構(gòu)例3.12 剔除字符串中的空格字符 ;數(shù)據(jù)段stringdb Let us have a try !,0 ;以“0”結(jié)尾;代碼段mov di,offset stringoutlp:cmp byte ptr di,0;外循環(huán),先判斷后循環(huán)jz done;為0結(jié)束again:cmp byte ptr di, ;檢測是否是空格jnz next;不是空格繼續(xù)循環(huán)mov si,di;是空格,進入剔除空格分支例3.12 剔除字符串中的空格字符(續(xù)) inlp:inc si;剔除空格的循環(huán)程序段mov ah,si;前移一個位置mov si-1,ahcmp byte
9、ptr si,0;內(nèi)循環(huán),先循環(huán)后判斷jnz inlpjmp againnext:inc di;繼續(xù)處理后續(xù)字符jmp outlpdone:;結(jié)束string的偏移量給didi=0?di= ?(di)si(si)+1sisiah(ah)si-1si=0?(di)+1di真假假真假真注釋:(si)表示寄存器si的內(nèi)容(2) si為偏移量為si的內(nèi)容的內(nèi)存單元的內(nèi)容(3) (di)-si 把寄存器di的內(nèi)容送到si(4) (si)+1si 寄存器si的內(nèi)容加1送到si(5) ah-si-1把寄存器ah的內(nèi)容送到偏移量為si的內(nèi)容減去1的內(nèi)存單元的內(nèi)容。stringdb A B C,0 ;以“0”結(jié)
10、尾 mov di,offset string cmp byte ptr di,0 jz done cmp byte ptr di, jnz next string A B C,0 (di)=0byte ptr di此時為A,不等于0條件不滿足,不跳轉(zhuǎn)byte ptr di此時為A條件滿足,跳轉(zhuǎn)跳轉(zhuǎn)到標(biāo)號為next的語句 inc di jmp outlp第1次內(nèi)循環(huán)過程cmp byte ptr di,0jz donecmp byte ptr di, jnz next string A B C,0 (di)=1byte ptr di此時為 ,不等于0條件不滿足,不跳轉(zhuǎn)byte ptr di此時為
11、條件不滿足,不跳轉(zhuǎn)mov si,diinc simov ah, byte ptr sistring A B C,0 (di)=1 (si)=1(ah)=B,即寄存器ah的內(nèi)容為Bstring A B C,0 (di)=1 (si)=2mov byte ptr si-1,ahcmp byte ptr si,0jnz inlpinc sistring ABB C,0 (di)=1 (si)=2byte ptr si此時為B,不等于0條件滿足,跳轉(zhuǎn)string ABB C,0 (di)=1 (si)=3string AB C,0 (注意:BC之間有兩個空格) (di)=1 (si)=3mov ah,
12、 byte ptr simov byte ptr si-1,ahcmp byte ptr si,0jnz inlpinc si(ah)= ,即寄存器ah的內(nèi)容為 空格byte ptr si此時為 ,不等于0條件滿足,跳轉(zhuǎn)string AB C,0 (注意:BC之間有兩個空格) (di)=1 (si)=4string AB CC,0 (注意:BC之間有一個空格) (di)=1 (si)=5string AB CC,0 (注意:BC之間有一個空格) (di)=1 (si)=4mov ah, byte ptr simov byte ptr si-1,ahcmp byte ptr si,0jnz in
13、lpinc si(ah)=C,即寄存器ah的內(nèi)容為 Cbyte ptr si此時為C,不等于0條件滿足,跳轉(zhuǎn)string AB C,0,0 (注意:BC之間有一個空格) (di)=1 (si)=5mov ah, byte ptr simov byte ptr si-1,ahcmp byte ptr si,0jnz inlpjmp again(ah)=0,即寄存器ah的內(nèi)容為0byte ptr si此時為0條件不滿足,不跳轉(zhuǎn)無條件跳轉(zhuǎn)到again縮指示的語句string AB C,0,0 (注意:BC之間有一個空格) (di)=2 (si)=5跳轉(zhuǎn)到標(biāo)號為again的語句 cmp byte pt
14、r di, jnz nextinc dijmp outlp byte ptr di此時為 B,不等于 string AB C,0,0 (注意:BC之間有一個空格) (di)=1 (si)=5無條件跳轉(zhuǎn)到outlp縮指示的語句string AB C,0,0 (注意:BC之間有一個空格) (di)=2 (si)=3 cmp byte ptr di, jnz nextmov si,diinc si byte ptr di此時為 ,不跳轉(zhuǎn)string AB C,0,0 (注意:BC之間有一個空格) (di)=2 (si)=5string AB C,0,0 (注意:BC之間有一個空格) (di)=2 (
15、si)=2mov ah, byte ptr simov byte ptr si-1,ah cmp byte ptr si,0 jnz inlpinc si(ah)=C,即寄存器ah的內(nèi)容為Cstring ABCC,0,0 (di)=2 (si)=3byte ptr si此時為C,不等于0條件滿足,跳轉(zhuǎn)string ABCC,0,0 (di)=2 (si)=4cmp byte ptr si,0 jnz inlpjmp again跳轉(zhuǎn)到標(biāo)號為again的語句 cmp byte ptr di, byte ptr si此時為0條件不滿足,不跳轉(zhuǎn)string ABCC,0,0 (di)=2 (si)=4無條件跳轉(zhuǎn)到again縮指示的語句jnz nextinc dijmp outlpcmp byte ptr di,0jz nextstring ABCC,0,0 (di)=3 (si)=4byte ptr di此時為 C,不等于 無條件跳轉(zhuǎn)到outlp縮指示的語句string ABCC,0,0
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)科技廠房建設(shè)合同
- 草原戶外拓展訓(xùn)練租賃合同
- 臨時醫(yī)院院長合同范本
- 湖景別墅交易合同樣本
- 2024民辦學(xué)校幼兒教師專業(yè)發(fā)展聘用合同3篇
- 市政工程資料員聘用合同范本
- 2024年高端裝備制造出口貿(mào)易合同2篇
- 2025年度安防監(jiān)控系統(tǒng)技術(shù)改造升級合同2篇
- 2024年以商業(yè)房產(chǎn)為擔(dān)保的貸款合同3篇
- 果場投資合作合同
- SAP WM模塊前臺操作詳解(S4版本)
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計規(guī)范
- 《中華民族共同體概論》考試復(fù)習(xí)題庫(含答案)
- 《社區(qū)安全防范》課程教案
- 中石油度員工HSE培訓(xùn)計劃
- (完整版)Adams課程設(shè)計
- 30課時羽毛球教案
- 全踝關(guān)節(jié)置換術(shù)ppt課件
- 學(xué)術(shù)英語寫作范文17篇
- 任發(fā)改委副主任掛職鍛煉工作總結(jié)范文
- 中華任姓字輩源流
評論
0/150
提交評論