




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
微型計算機原理王立萍
循環結構程序設計
子程序本講要求1.熟練掌握循環結構程序設計。(重點、難點)2.熟練掌握子程序設計。(重點、難點)
循環結構是按給定的條件重復執行一系列指令,直到循環條件不滿足為止。循環程序結構有兩種:一種是先判斷后工作,另一種是先工作后判斷。先判斷后工作方式循環體循環初值設置循環條件不滿足滿足先工作后判斷方式循環體循環初值設置循環條件不滿足滿足循環結構程序【例1】在字單元X中有一個16位的二進制數,統計其中“1”的個數,并將結果存入Y單元。
分析:將二進制左移,查看進位標志CF的內容即可。本題采用先判斷后執行的循環結構,如果被統計的數據本身為0,則不必執行循環體就可以得到結果;如果被統計的數據只是高位含有“1”,則這種結構使得程序的循環次數比較少。?開始BL←0AX=0?AX左移一位Y←BLCF=1?結束BL←BL+1YNNYDATA SEGMENT X DW 7000H Y DB ?DATA ENDCODESEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV BL,0 ;計數初值
MOV AX,XNEXT: AND AX,AX;AX自身相與,值不變
JZ EXIT ;若AX為0,則統計完畢
SHL AX,1 ;否則,AX邏輯左移1位
JNC NEXT ;若無進位,則轉NEXT
INC BL ;否則“1”的個數增加1
JMP NEXTEXIT:MOV Y,BL ;保存統計結果
RETMAINENDPCODEENDS ENDSTART【例2】編寫程序,統計數據區中0、正數、負數的個數,結果存放在C1、C2、C3中。
分析:在數據段設定數據區NUM存放若干個帶符號數,并設定存儲單元C1、C2、C3,用來分別存放0、正數、負數的個數。程序可以將NUM中的數據與0比較,根據比較結果大于、等于、小于0來修改臨時計數寄存器BL、BH、DL,以統計0、正數、負數的個數,并最后存放C1、C2、C3中。?開始數據區首地址送SI、數據個數送CX計數寄存器BL、BH、DL清零取一數據送ALAL=0AL>0DL=DL+1BL=BL+1BH=BH+1SI=SI+1,CX=CX-1CX=0?存入BH,BL,DL結束YYNNNYDATA SEGMENTNUM DB 4,3,0,-9,2,-1,0,6,-5,7C1 DB ?C2 DB ?C3 DB ?DATA ENDCODESEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV BX,0 MOV DX,0 LEA SI,NUM MOV CX,10RECO: MOV AL,[SI] ;取一數據
CMP AL,0 ;與0比較
JE ZERO ;相等,轉ZERO JNS PLUS ;為正,轉PLUS INC DL ;為負,DL加1 JMP NEXTZERO: INC BH ;為0,BH加1 JMP NEXTPLUS: INC BL ;為正,BL加1
NEXT: INC SI LOOP RECO MOV C1,BH MOV C2,BL MOV C3,DL
RETMAIN ENDPCODE ENDS END START
【例3】數組A包含30個互不相等的整數,數組B包含40個互不相等的整數,將既在數組A中又在數組B中出現的整數存放在數組C中。分析:本程序是典型的循環程序,且為二重循環。設外層循環次數為30,內層循環次數為40,首先讓數組A中第一個數和數組B中的所有數相比較,若相等則存入數組C中,若不相等則讓數組A中下一個數和數組B中的所有數相比較,依此類推直到都比較完為止。
?DATA SEGMENT A DW 30DUP(?)
B DW 40DUP(?)
C DW 30DUP(?)DATA ENDCODESEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV SI,0 MOV BX,0 MOV CX,30 ;外層循環次數NEXT1: PUSH CX ;保存外層循環次數
MOV DI,0
MOV CX,40 ;內層循環次數
MOV AX,A[SI]NEXT2:CMP B[DI],AX ;比較兩數組中的數
JNE L1 ;不相等,轉L1取數組B中下一個數
MOV C[BX],AX ;相等則存入數組C中
ADD BX,2 JMP L2L1: ADD DI,2 ;取數組B中下一個數
LOOP NEXT2L2: ADD SI,2 ;取數組A中下一個數
POP CX ;恢復外層循環次數
LOOP NEXT1 RETMAINENDPCODE ENDS ENDSTART
子程序的調用和返回可用指令CALL和RET實現,CALL指令在主程序中,而RET指令則在被調用子程序的末尾。子程序結構
另外由于子程序執行時要用到某些寄存器,而主程序也可能正在使用這些寄存器,所以要考慮把這些信息保護起來,稱為保護現場,例如:主程序中正在使用AX、BX、CX寄存器,子程序需要使用BX、CX寄存器,這時就要將BX、CX的內容壓入堆棧,待子程序返回后,再從堆棧中恢復BX、CX的內容。
保護現場即在子程序中使用的寄存器通過入棧保護起來。使用哪個寄存器就保護哪個寄存器!方法一:在主程序中信息保護的格式為:
PUSH BX PUSH CX CALL SUB1 POP CX POP BX方法二:在子程序中信息保護的格式為:
SUB1PROC NEARPUSH BXPUSH CX…… ;子程序功能段
POP CXPOP BXRETSUB1ENDP【例4】求數組ARRAY中元素之和并存于SUM單元。分析:子程序名為SUM1;入口參數:SI=數組首址,CX=數組長度;出口參數:AX=數組和?DATA SEGMENT ARRAYDB 0,1,2,3,4,5,6,7,8,9 COUNTEQU $-ARRAY SUM DW ?DATA ENDSSTACK SEGMENT DB 100DUP(?)STACK ENDS?CODE SEGMENT ASSUME CS:CODE,DS:DATA;SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA SI,ARRAY ;入口參數,SI為數組首址
MOV CX,COUNT CALL SUM1 ;調子程序求和,返回值在AX中
MOV SUM,AX ;和存于SUM單元
MOV AH,4CH INT 21H?SUM1 PROC NEAR MOV AX,0 ;數組和通過AX回送到主程序AGAIN:ADD AL,[SI] ADC AH,0 INC SI LOOP AGAINEXIT:RETSUM1 ENDPCODE ENDS END START
【例5】實現將10個8位的無符號數按遞減次序排序,并將結果顯示出來。分析:本程序是采用冒泡算法,共有兩個循環體。內循環進行兩兩相鄰比較,如果符合遞減次序則不交換,否則就相互交換。外循環設置一個交換標志位(BL),每次進入外循環就設置為0,而內循環每作一次交換就將該標志設置為1,在每次內循環結束后就測試交換標志,如果該位為1,則再一次進入外循環;如果該位不為1,則表明上一輪比較已經不再引起交換操作,說明數組已經排序完畢,這樣就立即結束外循環。當實現排序后將排好的結果調用顯示子程序將結果顯示在顯示器上。?DATA SEGMENT ARRAY DB 05H,78H,0F8H,7BH,00H DB 8CH,20H,0A0H,80H,60HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AXAB1: MOV SI,OFFSETARRAY MOV BL,0 ;交換標志BL置0 MOV CX,9
AGAIN:MOVAL,[SI]INCSICMPAL,[SI] ;兩兩相比較
JNCCD1;前一個數大于等于后一個數則轉到CD1MOVAH,[SI] ;否則順序執行程序實現交換
MOV[SI],ALDECSIMOV[SI],AHINCSIMOVBL,1CD1: LOOPAGAINDECBLJZ AB1 ;BL減1后為0說明排序沒完成
;再一次進入外循環
MOVSI,OFFSETARRAY;則排序已完成需顯示
MOVCX,10LP11:MOVBL,[SI]CALLDISPL ;調用顯示子程序
INCSILOOPLP11RETMAINENDPDISPLPROCNEAR ;顯示子程序
MOVDH,2 ;顯示兩位十六進制數LOP2:MOVCL,4RORBL,CLMOVDL,BLANDDL,0FH
ADDDL,30H CMPDL,3AH ;判斷是否為A-F之間的數
JBDIP ;0~9之間的數直接顯示
ADDDL,7 ;A~F之間的數ASCII值加7DIP:MOVAH,2 ;顯示字符
INT21HDECDHJNZLOP2MOVDL,20H ;顯示空格符
MOVAH,2INT21HRETDISPL ENDPCODE ENDSENDSTART總結:1.熟練掌握循環結構程序設計。(重點、難點)2.熟練掌握子程序設計。(重點、難點)練習:1.多字節加法程序,第一個數是8A0BH,第二個數是D705H。
DATASEGMENTFIRSTDB________,_______,0HSECONDDB_______,______DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVCX,_______MOVSI,0_______NEXT: MOVAL,SECOND[SI]ADCFIRST[SI],ALINCSILOOPNEXTMOVAL,0ADCAL,_______MOVFIRST[SI],ALMOVAH,4CHINT21HCODE ENDS ENDSTART請選擇正確的答案填入空格中:①(A)8AH(B)0BH
(C)D7H(D)05H②(A)8AH(B)0BH
(C)D7H(D)05H③(A)8AH(B)0BH
(C)D7H(D)05H④(A)8AH(B)0BH
(C)D7H(D)05H⑤(A)3(B)2
(C)1(D)4⑥(A)CLC(B)CLD
(C)STC(D)CLI⑦(A)1(B)-1
(C)0(D)0FFH2.閱讀程序:
DATASEGMENTCOUNTDB4BLK1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生鮮購銷合同協議版
- 環衛車閑置轉讓合同協議
- 2025至2030年中國男式羊皮加扣手套數據監測研究報告
- 2025至2030年中國海鮮豆數據監測研究報告
- 2025至2030年中國瀝青木船防污漆數據監測研究報告
- 2025至2030年中國模壓機數據監測研究報告
- 2025至2030年中國柔繡機數據監測研究報告
- 2025至2030年中國明室片拷貝機數據監測研究報告
- 2025至2030年中國方便面刀具數據監測研究報告
- 2025至2030年中國拿納米環保省油馬力增強器數據監測研究報告
- 多式聯運模式在跨境電商中的應用-全面剖析
- 產后保健知識課件
- 氧化反應工藝安全操作規程
- 中藥學(士)基礎知識押題密卷1
- 2025年第三屆天揚杯建筑業財稅知識競賽題庫附答案(1401-1536題)
- 子宮肌瘤病例討論
- 門窗安裝施工方案07785
- 土壤氡檢測方案
- 2025中考語文常考作文押題(10大主題+10篇范文)
- 2024安康市專職消防員招聘考試題目及答案
- 2024年湖北省中考滿分作文《滿樹繁花》
評論
0/150
提交評論