微機接口第十講_第1頁
微機接口第十講_第2頁
微機接口第十講_第3頁
微機接口第十講_第4頁
微機接口第十講_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論