




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、設問:設問:1怎樣用分支結構構成循環?怎樣用分支結構構成循環?2循環指令有哪些?循環指令有哪些?3串處理操作是循環執行的嗎?串處理操作是循環執行的嗎?4. 4. 多重循環有什么特點?多重循環有什么特點?5. 5. 如何實現排序如何實現排序? ?本章重點本章重點循環的概念循環的概念 循環指令循環指令 串處理串處理 多重循環多重循環 6.1 循環的概念循環的概念 在匯編語言中,程序的循環可以用在匯編語言中,程序的循環可以用分支轉移指令實現,也可以用分支轉移指令實現,也可以用8086指指令系統中提供的專門的循環指令,這令系統中提供的專門的循環指令,這樣使程序更清晰、簡便。樣使程序更清晰、簡便。 除了
2、循環指令之外,還有很多地方用除了循環指令之外,還有很多地方用到了循環的概念。例如串處理,需要到了循環的概念。例如串處理,需要對串中的字符循環地進行操作。對串中的字符循環地進行操作。 6.1.1 循環結構循環結構循環結構有兩種形式。一種是循環結構有兩種形式。一種是DO WHILE結構,結構,另一種是另一種是DO UNTIL結構。結構。 循環程序循環程序有有三部分:三部分:l l 設置循環的初始狀態設置循環的初始狀態l l 循環體循環體l l 循環控制部分循環控制部分6.1.1 循環程序例子循環程序例子運行結果:運行結果:示例示例6-1 在在5行行16列上用寫顯存方法顯列上用寫顯存方法顯示多彩字符
3、串。用循環指令實現。示多彩字符串。用循環指令實現。設計思路:設計思路:(1)用)用DH存放行號,存放行號,DL存放列號;存放列號;(2)BL存放字符屬性,第存放字符屬性,第1個字符的屬性為個字符的屬性為4,紅色;其他字符屬性紅色;其他字符屬性+1改變;改變;(3)字符的位置計算公式:行號)字符的位置計算公式:行號*160+列號;列號;(4)用循環指令)用循環指令LOOP實現將多彩字符串循環實現將多彩字符串循環寫入顯存。寫入顯存。 程序如下:程序如下:;6-1.asm 在在5行行16列上用寫顯存方法顯示多彩字符列上用寫顯存方法顯示多彩字符串。串。data segmenta1 db Hello w
4、orld!a2 db 0data endscode segmentassume cs:code,ds:datastart:mov dh,5;行行 mov dl,16;列列mov bl,4;屬性屬性mov ax,datamov ds,axmov si,0show_str:mov ax,0b800h;顯存首址顯存首址mov es,axmov ax,160mul dh;行號行號*160mov di,ax;起始行位置起始行位置sal dl,1mov dh,0add di,dx;+列號列號mov cx,a2-a1;字符串長度字符串長度let1: mov al,si;循環寫字符和屬性到顯存循環寫字符和屬性
5、到顯存mov es:di,almov byte ptr es:di+1,blinc siinc bladd di,2;寫完即顯示完寫完即顯示完loop let1;循環指令循環指令mov ah,4chint 21hcode endsend start6.2 循環指令循環指令格式:格式: LOOP OPR執行的操作:執行的操作:(CX)=(CX)-1,若,若CX0,跳轉,跳轉到標號到標號OPR處循環執行,處循環執行,CX=0則執行則執行LOOP的下一條指令。的下一條指令。說明:目的操作數說明:目的操作數OPR是標號,該標號處的是標號,該標號處的指令應該在指令應該在LOOP指令之前,以構成循環指令之
6、前,以構成循環 。6.2.1 LOOP循環指令循環指令 例例1 求求X=1+2+3+10的累加值。的累加值。MOV AL,0MOV BL,1MOV CX,10SS1:ADD AL,BL INC BL LOOP SS1 MOV X,AL6.2.2 LOOPZ/LOOPE 格式:格式: LOOPZ/LOOPE OPR執行的操作:執行的操作:(CX)=(CX)-1,若,若CX0,并且,并且ZF=1則跳轉到標號則跳轉到標號OPR處循環執行,若處循環執行,若CX=0,或者或者ZF=0則執行則執行LOOP的下一條指令。的下一條指令。說明:結果為說明:結果為0或相等循環。當執行到或相等循環。當執行到LOOP
7、Z/LOOPE時,如果之前的指令結果為時,如果之前的指令結果為0或者相等時繼續循環,如果結果不為或者相等時繼續循環,如果結果不為0或者或者不相等,提前退出循環,即使計數值不相等,提前退出循環,即使計數值CX還還沒減為沒減為0。STRING DB *P* MOV CX,10MOV BX,-1MOV AL,0 SS3: INC BXCMP STRINGBX,*LOOPE SS3MOV Y,BX 例例1 10個星號字符的個星號字符的STRING串中有一個串中有一個字符不是星號,找出該字符的位置,保存字符不是星號,找出該字符的位置,保存在在Y單元。單元。MOV BX,-1MOV CX,MSS4:INC
8、 BXMOV AL,ALPHABXTEST AL,20HLOOPZ SS4MOV DL,AL例例2 取出字母串取出字母串ALPHA中的第一個小中的第一個小寫字母放入寫字母放入DL。格式:格式: LOOPNZ/LOOPNE OPR執行的操作:執行的操作:(CX)=(CX)-1,若,若CX0,并且,并且ZF=0則跳轉到標號則跳轉到標號OPR處循環執行,若處循環執行,若CX=0,或者或者ZF=1則執行則執行LOOP的下一條指令。的下一條指令。6.2.3 LOOPNZ/LOOPNE說明:結果不為說明:結果不為0或不相等循環。或不相等循環。當執行到當執行到LOOPNZ/LOOPNE時,如果之前的時,如果
9、之前的指令結果不為指令結果不為0或者不相等時繼續循環,如果或者不相等時繼續循環,如果結果為結果為0或者相等,提前退出循環,即使計數或者相等,提前退出循環,即使計數值值CX還沒減為還沒減為0。MOV BX,0MOV AH,1SS5:INT 21HMOV SYMBOLBX,ALINC BXCMP AL,0DHLOOPNE SS5MOV AX,0例例1 循環輸入字符,并將字符保存在循環輸入字符,并將字符保存在SYMBOL數組中,當輸入回車時結束。數組中,當輸入回車時結束。MOV BX,-1MOV CX,MSS6:INC BXCMP SYMBOLBX,ALOOPNE SS6OR SYMBOLBX,20
10、H例例2 在長度為在長度為M的字符串的字符串SYMBOL中查中查找大寫字母找大寫字母A,找到后將其變為小寫。,找到后將其變為小寫。練習:練習: 1寫出計算寫出計算Y=5!的程序段。!的程序段。 2寫程序段。查找寫程序段。查找CATT表中的字表中的字符符”,找到后將其保存到,找到后將其保存到SIGN單元,單元,其位置值保存到其位置值保存到ADDI單元。單元。 3寫程序段。在長度為寫程序段。在長度為N的字數組的字數組VALUE中取出第一個負數保存到中取出第一個負數保存到AX中。中。6.3 串處理串處理 在匯編語言中,可將連續的在匯編語言中,可將連續的n個存儲單個存儲單元稱為串、表、數組等。元稱為串
11、、表、數組等。 對于這種數據結構的操作稱為串處理。對于這種數據結構的操作稱為串處理。 對串進行操作,需要幾個參數,如串對串進行操作,需要幾個參數,如串的長度、串的起始單元地址等;而且的長度、串的起始單元地址等;而且串操作大都是循環執行的,循環如何串操作大都是循環執行的,循環如何控制、串的存取方式等都不同于其它控制、串的存取方式等都不同于其它數據操作。數據操作。 6.3.1 串的概念串的概念 6.3.2 串處理例子串處理例子 設計思路:設計思路:(1)分別定義數據段和附加段;)分別定義數據段和附加段;(2)用)用SI保存源串保存源串STRG1的偏移地址,的偏移地址,DI保存目的串保存目的串STR
12、G2的偏移地址,傳送個數的偏移地址,傳送個數由由CX指出;指出;(3)用)用CLD指令將方向標志指令將方向標志DF清清0,以便,以便從低地址單元開始取數,依次地址增加,從低地址單元開始取數,依次地址增加,取下一數;取下一數;(4)用)用REP MOVSB指令實現串傳送。指令實現串傳送。 示例示例6-2 將數據段中的字符串將數據段中的字符串STRG1傳送到傳送到附加段的附加段的STRG2中。中。程序如下:程序如下:;6-2.asm 串傳送串傳送data segmentstrg1 db 1234567890data endsextra segmentstrg2 db 10 dup(?)extra
13、endscode segmentassume cs:code,ds:data,es:extrastart:mov ax,datamov ds,axmov ax,extramov es,axlea si,strg1lea di,strg2cld;方向標志清方向標志清0mov cx,10rep movsb ;以字節形式重復傳送以字節形式重復傳送CX次次mov ah,4chint 21hcode endsend start運行結果:運行結果:要觀察運行結果,采用要觀察運行結果,采用DEBUG執行執行6-2.exe。在。在DEBUG下,用下,用U命令查看,找到斷點命令查看,找到斷點0018,用,用G
14、0018執行,再用執行,再用D ES:0命令查看傳送結果。命令查看傳送結果。 此時,數據段的段地址為此時,數據段的段地址為0B45H,而附加,而附加段的段地址為段的段地址為0B46H。查看的結果在附加。查看的結果在附加段中。段中。 思考:如果采用循環指令實現串傳送,思考:如果采用循環指令實現串傳送,程序如何改寫?程序如何改寫? 6.3.3 串處理指令串處理指令 8086匯編語言指令系統中提供了匯編語言指令系統中提供了5種串處理指令。種串處理指令。分別是:分別是:MOVS (move string)串傳送串傳送CMPS (compare string)串比較串比較SCAS (scan strin
15、g)串掃描串掃描LODS (load string)串獲取串獲取STOS (store string)串存入串存入上述串指令應該和重復前綴上述串指令應該和重復前綴REP、REPZ/REPE、REPNZ/REPNE結合結合.例例 比較兩個字串比較兩個字串BUNCH1和和BUNCH2是否相同,是否相同,相同打印相同打印Y,不相同打印,不相同打印N。 示例示例6-3 比較兩個字串比較兩個字串BUNCH1和和BUNCH2是否相同,相同打印是否相同,相同打印Y,不相同打印不相同打印N。程序如下:程序如下:;6-3.asm 比較兩個字串比較兩個字串BUNCH1和和BUNCH2data segment bu
16、nch1 db student bunch2 db studEntdata endscode segment assume cs:code,ds:data,es:datastart:mov ax,datamov ds,axmov es,axlea si,bunch1lea di,bunch2cldmov cx,7repe cmpsb jz let1;相等轉相等轉LET1mov dl,N;不相等,顯示不相等,顯示Njmp printlet1:mov dl,Y;相等,顯示相等,顯示Yprint:mov ah,2hint 21hmov ah,4chint 21hcode endsend start6
17、.3.4 串與循環串與循環 歸納循環結構的幾種形式:歸納循環結構的幾種形式:(1)用條件轉移指令實現循環)用條件轉移指令實現循環(2)循環指令)循環指令LOOP/LOOPE/LOOPNE(3)重復前綴)重復前綴REP/REPE/REPNE在實際編程中,采用哪種指令實現循環,在實際編程中,采用哪種指令實現循環,要從循環執行的條件和退出循環的要求等要從循環執行的條件和退出循環的要求等方面綜合考慮。下面通過幾個例子作具體方面綜合考慮。下面通過幾個例子作具體分析。分析。例例1 將將ALPHA數組送入數組送入100個個a。(1)用條件轉移指令實現循環)用條件轉移指令實現循環 MOV CX,100 MOV
18、 SI,0SS0: MOV ALPHASI,a INC SI DEC CX JNZ SS0 (2)用)用LOOP指令實現循環指令實現循環 MOV CX,100 MOV SI,0 SS0: MOV ALPHASI,a INC SI LOOP SS0(3)用串處理)用串處理REP前綴實現循環前綴實現循環 MOV CX,100 MOV DI,OFFSET ALPHA MOV AL,a REP STOSB 分析:由于問題簡單,只是做賦值操作,且循環分析:由于問題簡單,只是做賦值操作,且循環次數已知,所以可以用這三種方法實現。次數已知,所以可以用這三種方法實現。6.4 多重循環多重循環 1. 內循環和外
19、循環的控制內循環和外循環的控制雙重循環需要兩個循環控制變量雙重循環需要兩個循環控制變量I,J。多重循環嵌套時,不允許內外循環交叉。多重循環嵌套時,不允許內外循環交叉。6.4.1多重循環結構多重循環結構2內循環和外循環的跳轉內循環和外循環的跳轉在多重循環程序編寫過程中,要注意循環體內條件轉在多重循環程序編寫過程中,要注意循環體內條件轉移指令的轉移方向。一般來說,可以從內循環跳入外移指令的轉移方向。一般來說,可以從內循環跳入外循環,或者跳出外循環;不允許從外循環跳入內循環循環,或者跳出外循環;不允許從外循環跳入內循環或者直接從循環外跳入循環內。或者直接從循環外跳入循環內。 6.4.2排序程序排序程
20、序 雙重循環程序的典型應用是排序。排序雙重循環程序的典型應用是排序。排序采用冒泡算法。采用冒泡算法。冒泡算法的主要思想是從第一個元素開冒泡算法的主要思想是從第一個元素開始,依次對兩個相鄰的元素進行比較,如始,依次對兩個相鄰的元素進行比較,如果第一個元素比第二個大,則兩數交換位果第一個元素比第二個大,則兩數交換位置,第一遍置,第一遍N-1次比較之后,最大的數排在次比較之后,最大的數排在最后;再做第二遍最后;再做第二遍N-2次比較,比較出第二次比較,比較出第二大的數大的數;以此類推,最多進行;以此類推,最多進行N-1遍比遍比較,所有的數按從小到大升序排序。較,所有的數按從小到大升序排序。 設計思路
21、:設計思路:(1)用兩條)用兩條LOOP指令實現雙重循環時,對指令實現雙重循環時,對CX寄存器有沖突。采用寄存器有沖突。采用PUSH CX指令將外指令將外循環的循環的CX值入棧保存,內循環的值入棧保存,內循環的LOOP結結束后,再將外循環的束后,再將外循環的CX恢復;恢復;(2)用相對寄存器尋址取出兩數進行比較。)用相對寄存器尋址取出兩數進行比較。示例示例6-5 將字數組將字數組PART按升序排序。按升序排序。程序如下:程序如下:;6-5.asm 將字數組將字數組part按升序排序。按升序排序。data segmentpart dw 15,32,6,-27,8sign dw ?data end
22、scode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov cx,sign-part;數組長度數組長度shr cx,1 ;元素個數元素個數dec cxloop1:push cx;保存外循環次數保存外循環次數mov bx,0loop2:mov ax,partbxcmp ax,partbx+2jle next;升序升序xchg ax,partbx+2;交換交換mov partbx,axnext: add bx,2loop loop2pop cx;恢復外循環次數恢復外循環次數loop loop1mov ah,4chint 21hc
23、ode endsend start 練習:練習: 數組數組TABLE中存放中存放8個小個小寫字母寫字母computer。編程序,將它。編程序,將它們按降序排序。們按降序排序。 6.5 循環程序舉例循環程序舉例 如如X=5488114433225634H,Y=3499754783645231H,Z=8921868BB686A865H設計思路:設計思路:(1)在數據段中定義兩個多字節變量,低字在數據段中定義兩個多字節變量,低字節單元存放低位,高字節單元存放高位;節單元存放低位,高字節單元存放高位;(2)字節的個數字節的個數N采用采用EQU賦值偽指令計算賦值偽指令計算獲得;獲得; (3)多字節相加用帶進位加指令多字節相加用帶進位加指令ADC;示例示例6-6 編程序實現兩個多字節數相加運算。編程序實現兩個多字節數相加運算。Z=X+Y程序如下:程序如下:;program 6-6.asm 兩個多字節數相加運算兩個多字節數相加運算data segment x db 34h,56h,22h,33h,44h,11h,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 959-2015閉式冷卻塔節能評價值
- DB31/T 898-2015有機熱載體鍋爐經濟運行管理要求
- DB31/T 728-2023食品冷庫經濟運行管理要求
- DB31/T 541-2011電梯能量回饋裝置技術要求和試驗方法
- DB31/T 531-2011動物戊型肝炎RT-nPCR和ELISA檢測方法
- DB31/T 1407-2023農業機構卓越績效評價準則
- DB31/T 1377.2-2022實驗雞和鴨第2部分:寄生蟲學監測
- DB31/T 1226-2020職業病診斷鑒定規范
- DB31/ 731-2013船舶修正總噸單位產品能源消耗限額
- DB31/ 329.21-2015重點單位重要部位安全技術防范系統要求第21部分:養老機構
- ktv包房公主協議書
- 2025年全球經濟風險試題及答案
- 北京北大方正軟件職業技術學院《實踐中的馬克思主義新聞觀》2023-2024學年第二學期期末試卷
- 2025年陜西咸陽亨通電力(集團)有限公司招聘筆試參考題庫附帶答案詳解
- 小學二年級有余數的除法口算題(共300題)
- 【MOOC】家具史-南京林業大學 中國大學慕課MOOC答案
- 科研倫理與學術規范(研究生)期末試題
- 漢字文化解密學習通超星期末考試答案章節答案2024年
- DLT 572-2021 電力變壓器運行規程
- 工序單位能耗地計算方法、及企業噸鋼可比能耗計算方法
- 超市標準商品分類表格模板
評論
0/150
提交評論