版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、匯編語言程序設(shè)計報告計算機(jī)學(xué)院2011/6/7題目要求分支程序設(shè)計:1、編寫程序,鍵入學(xué)生成績(百分制) ,按 A、B、C、D 顯示在屏幕上。子程序設(shè)計:2、給定一個數(shù)組存放 5 個小寫字母,用地址表傳遞方法編寫子程序,將其 轉(zhuǎn)換成大寫字母,并顯示在屏幕上。循環(huán)程序設(shè)計:3、設(shè)有一段文字,編寫一段程序查找字母a 出現(xiàn)的次數(shù),并顯示在屏幕上。DOS功能調(diào)用:4、 在圖形方式下,在屏幕中央繪制一個用“* ”表示的等腰三角形。5、編寫一個生成 ASCII碼表的程序,并顯示在屏幕上。6、根據(jù)提示輸入任意年份,編寫判斷閏年的程序,如果是閏年,則在屏幕上顯示“ Y”,否則顯示“ N”。7、顯示楊輝三角形。
2、要求:( 1)從鍵盤接收正整數(shù) n;(2)屏幕顯示楊輝三角形,顯示 n 行信息;編程思路:1.在數(shù)據(jù)段設(shè)置提示信息,成績 ABCD的顯示信息,并預(yù)留空間。利用DOS中斷,取得輸入的字符,輸入字符的 ASCII值在30H-39H之間為0'不是則報錯, 值存入SCORE中,將 SCORE勺高位分別與 9,8,7,6相比,跳轉(zhuǎn)到設(shè)置好的代碼區(qū),輸出對應(yīng)成績(A,B,C,D).若為3位數(shù),則跳到A區(qū),輸出A.2. 在數(shù)據(jù)段設(shè)置ADDRESS放數(shù)據(jù)偏移量和 COUNT計數(shù)器利用DOS中斷,取得輸入的字符串存入 DX中,偏移量存入 STRING 并存入 ADDRESS。 COUNT存入ADDRES
3、S+2地址中,調(diào)用子程序 TURN,利用SI指針與ADDRESS配合將每個字 母由大寫轉(zhuǎn)為小寫。3. 在數(shù)據(jù)段設(shè)置STRING用于存放鍵盤輸入字符,COUNT存放字符個數(shù),利用DOS中斷,輸入 字符串存入STRING編寫CHECK模塊用于檢查輸入的字符是否為 a,循環(huán)執(zhí)行CHECK模塊,為a 則BL+1,不為a, SI+1繼續(xù)檢查,直至 CX=Q最后輸出結(jié)果。4.堆棧段預(yù)留128字節(jié)空間存放*.設(shè)置SI控制空格數(shù),BX為輸出*個數(shù)設(shè)置3層循環(huán),分別輸 出空格數(shù),*數(shù),回車首先將保護(hù) CX行數(shù),將其壓入棧中,外層循環(huán)按CX列數(shù),輸出每行之前的空格數(shù),之后根據(jù) BX輸出*,此時一行輸入完,輸出回車
4、換行后 ,BX+2即*數(shù)+2, CX出棧,進(jìn)入外循環(huán),輸出下一行信息。5.初始化時設(shè)置行列數(shù), 第一個字符的ASCII值,設(shè)置兩層循環(huán),首先CX入棧保護(hù)輸出行數(shù), 外層循環(huán)控制輸出行數(shù),內(nèi)循環(huán)輸出列個數(shù)對應(yīng)的字符數(shù),將要輸入的字符存入DL,每輸出完一次DL+1, SI值即列數(shù)給CX當(dāng)CX=0時,輸出回車換行,CX出棧,進(jìn)入外循環(huán)準(zhǔn)備下一行的輸出。6.數(shù)據(jù)段設(shè)置提示信息, W存放輸入年份的數(shù)值 M , BUF存放年份字符串。利用 DOS中斷,取 得輸入的年份字符串存入 BUF中,字符個數(shù)存入CL調(diào)用DATACATE巴年份字符串轉(zhuǎn)為16進(jìn) 制數(shù)值,在調(diào)用IFYEARSF模塊判斷其是否為閏年,輸出相
5、應(yīng)信息。DATACAT子模塊總體設(shè)計思想,首先 BUF+2給SI,利用循環(huán),和 SI指針從高位向低位逐個 字符減去30H轉(zhuǎn)為16進(jìn)制數(shù),將值存入 W中。IFYEARS子模塊總體設(shè)計思想,將 W值給 AX,判斷能否被100整除,能則在判是否整除 400,能則為閏年,不能則不是閏年。若不能 整除100,判是否整除4,能則為閏年,不能則不是,輸出相應(yīng)信息。7.數(shù)據(jù)段設(shè)置BUF用于存放三角中的數(shù)。總體思想:基于組合數(shù)計算楊輝三角,即c(m, n)的輸出。設(shè)置兩層循環(huán)控制輸出的行列,一重循環(huán)系數(shù)m,范圍1-n,二重循環(huán)系數(shù)n,范圍1-m。利用DOS中斷,將輸入n存入num中。主程序:內(nèi)循環(huán)調(diào)用 stor
6、e將每行三角中的每個值存入buf中,調(diào)用外循環(huán)進(jìn)入下一行。子程序store :由ch,cl傳遞參數(shù) m,n,求組合數(shù) C(m,n),并轉(zhuǎn)換為10進(jìn)制數(shù)存入buf中,再寫入一個空格。子程序 multiply :由bh,bl傳遞參數(shù)p,q,求乘積p(p-1)(p-2).(p-q+1),并由dx傳出。流程圖:分支程序設(shè)計:子程序設(shè)計:1.2.循環(huán)程序設(shè)計:4. DOS功能調(diào)用:3.始開始開始d輸入成績5.ASCI I表輸出6.判斷閏年*1輸入字符輸入字符串是否為0-9符:OUNCTI 碼字初始化行列數(shù)斷輸入7.楊輝三角輸出 源程序:1.DATASTRINGSEGMENDB輸出一 SIA指向符曜RCR
7、D將ACSX-小fMESSASCORE輸出AJ/|土0:顯示提示信息符串:;CX=CpU是字母EJ+1判斷高位為TURN'Enter THES輸出字符,dl+ :«',1存入 '$' BICX=0?高位為 8 厶13,1將,Buf地址給di,外循環(huán)位盤K*'RANK:B',-DB1回調(diào)用ANW轉(zhuǎn)化ANK:D進(jìn)制數(shù)值輸出結(jié)X,=0,n=1 開始,CH+1模X=0將BUFE D輸一耳DB,、CL+1DBX=M<=n?進(jìn)位標(biāo)志為DBDATA ENDS4 DUP;為4個成績分配空間CODE SEGMENTASSUME CS:CODE,DS
8、:DATASTART: MOVMOVMOVAX,DATADS,AXDX,OFFSET STRING;MOVCMPJZMOVSUBJZMOVCMPJZJMPEIGHT:MOVSUBJAEMOVAH,9INT21H;提示輸入成績,顯示字符串,DS:DX=|首址MOVDX,OFFSET SCORE回 SCORE所在段偏移量MOVAH,0AHINT21H;輸入4個成績MOVDX,OFFSETSMOVAH,9INT21H;CMPAL, 30HJBERRORCMPAL, 39HJAERRORMOVBL,SCORE+1CMPBL,03HJZAARMOVBL,SCORE+2CMPBL,39HJZ AARBL,
9、SCORE+2BL,38HEIGHTBL,SCORE+2BL,37HBBRBL,SCORE+2BL,36HCCRDDR; 不及格BL,SCORE+3 ;80 分段的判斷 BL,35H AARJMPBBRERROR :MOVAH, 09;錯誤提示MOVDX, OFFSET MESSAGEINT21HJMPAAR: MOVJMPBBR: MOVJMPCCR: MOVJMPDDR: MOVJMPEXIT:MOVINTMOVINTCODE ENDSEND2.DATA SEGMENT ADDRESS DW 0,0 STRING DB 6HDB ?STARTDX,OFFSET RA EXITDX,OFFS
10、ET RBEXITDX,OFFSET RCEXITDX,OFFSET RDEXITAH,921HAH,4CH21HSTARTDB 6H DUP(?),'$'COUNT DW 0ENT DB 13,10,'$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRINGMOV AH,0AHINT 21HMOV ADDRESS,OF
11、FSET STRINGMOV BX,OFFSET STRINGMOV DH,0MOV DL,BX+1MOV COUNT,DXMOV ADDRESS+2,OFFSET COUNTCALL TURN;ADDRESS?放偏移量;將字符個數(shù)存入 COUNT;ADDRESS+2里存的為 COUNT;小寫轉(zhuǎn)大寫模塊MOV DX,OFFSET ENTMOV AH,9INT 21HMOV DX,OFFSET STRING+2MOV AH,09HINT 21HMOV AH,4CHINT 21HTURNPROC NEARL:PUSH SIPUSH BXPUSH DIPUSH CXMOV BX,OFFSET ADD
12、RESSMOV SI,BXADD SI,02HMOV DI,BX+2MOV CX,DISUB byte ptr SI,20HINC SI;BX+2 里存入的為字符個數(shù)LOOP L;利用指針循環(huán)(CX控制)轉(zhuǎn)變POPCXPOPPOPDIBXPOPSIRETENDPCODE ENDSEND START3.STRINGDB100DB?DB100 DUP(?)COUNTEQU$-STRINGDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSET STRINGMOVAH,0AHINT21HMOVSI,OFF
13、SET STRING + 2MOVBL,0MOVCX,COUNTSEGMENTDATAMOVDH,61HCHECK:CMPSl,DHJNENEXTlNCBLNEXT:lNCSlLOOPCHECKADDBL,30HMOVDL,0AHMOVAH,02HlNT21HMOVDL,0DHMOVAH,02HMOVDL,BLMOVAH, 02HlNT21HMOVAH,4CHlNT21HCODEENDSENDSTART4.STACK SEGMENTDB 128(?)STACK ENDSCODE SEGMENTASSUME CS:CODE START:MOV Sl,5;控制空格數(shù)MOV BX,1; BX控制輸出
14、*MOV CX,4;OUTLOOP: PUSH CX 保護(hù)列數(shù)MOV CX,SlMOV DL,20H;輸出空格SPL: MOV AH,2H lNT 21H LOOP SPL MOV CX,BXMOV DL,2AH;輸出 *STL: MOV AH,2H lNT 21H LOOP STLMOV DL,0DH;輸出回車 MOV AH,02H lNT 21HMOV DL,0AH;換行MOV AH,02HINT 21HDEC SIADD BX,2;多一行*數(shù)加2POP CXLOOP OUTLOOP 進(jìn)下一行MOV AH,4CHINT 21HCODE ENDSEND START5.CODE SEGMENT
15、ASSUME CS:CODESTART: MOV SI,10H0 ;列數(shù) 16MOV CX,7 ;行數(shù) 7MOV BL,20H ;第一個字符的ASCII代碼LOOP1: PUSH CX ;入棧保護(hù)循環(huán)數(shù),控制行數(shù)MOV CX,SI;CX為每行輸出個數(shù)LOOP2: MOV DL,BLMOV AH,2INT 21H;在屏幕上顯示第一個字符MOV DL,20HMOV AH,2INT 21H;在屏幕上顯示第一個 ASCII代碼INC BL;BL加1即ASCII代碼加1LOOP LOOP2循環(huán),準(zhǔn)備顯示下一個 ASCII碼字符MOV DL,0AHMOV AH,2HINT 21H;一行顯示完,輸出一個回車
16、符MOV DL,0DHMOV AH,2INT 21H;輸出一個換行符POP CX;一行輸完,cx出棧LOOP LOOP1 ;循環(huán),準(zhǔn)備顯示下一行 ASCII碼字符MOV AH,4CHINT 21HCODE ENDSEND START6.DATA SEGMENTINFONDB0DH,0AH,'Please input a year: $'YDB0DH,0AH,'This is a leap year! $'NDB0DH,0AH,'This is not a leap year! $'WDW0;用于保存輸入的年份的數(shù)值BUF DB8DB?DB8 DU
17、P(?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,INFONMOVAH,9INT21HLEADX,BUFMOVAH,0AH緩存區(qū)INT21HXORCH,CHMOVCL, BUF+1CALLDATACATE數(shù)值CALLIFYEARSJCA1LEADX,NMOVAH,9INT21HJMPEXITA1:LEADX,YMOVAH,9INT21HEXIT:MOVAH,4CHINT21HDATACATE
18、 PROCNEARPUSHCXDECCXLEASI,BUF+2TT1:INCSILOOPTT1POPCXMOVAX,1L1:PUSHAXMOVDH,30HMOVBX,10;在屏幕上顯示提示信息;顯示字符串;從鍵盤輸入年份字符串;0AH 功能調(diào)用從鍵盤接受字符串到內(nèi)存的輸入;ch 要清 0,否則循環(huán)次數(shù)有誤 . ;把輸入的字符的個數(shù)保存在 cl 中 ;調(diào)用 datacate 子程序把表示年份的字符串轉(zhuǎn)換為; 調(diào)用 ifyears 子程序判斷閏年;進(jìn)位標(biāo)志 1 為閏年;把表示年份的字符串轉(zhuǎn)換為數(shù)值;從高位向低位逐個MOVDL,SISUBDL,DHXORDH,DHMULDXADDW,AXPOPAXM
19、ULBXDECSILOOPL1RETDATACATE ENDPIFYEARSPROCNEARPUSHBXPUSHCXPUSHDXMOVAX,WMOVDX,0MOVBX,100DIVBXCMPDX,0JENEXTXORDX,DXMOVAX,WMOVBX,4DIVBXCMPDX,0JELAB2JMPLAB1NEXT:XORDX,DXMOVAX,WMOVBX,400DIVBXCMPDX,0JELAB2JMPLAB1LAB1:CLCJMPLAB3LAB2:STCLAB3:POPDXPOPCXPOPBXRETIFYEARS ENDP;字符減去 30H 后即可轉(zhuǎn)換為十六進(jìn)制數(shù);能被 400 整除,判能否被
20、 400 整除; 進(jìn)位標(biāo)志置 0CODE ENDSEND START7.data segmentbuf db 200 dup()endscode segmentstart:lea di,bufmov ch,OOh ;ch為一重循環(huán)系數(shù) m,范圍1-9loop_m:mov cl,OOh ;cl為二重循環(huán)系數(shù) n,范圍1-mmov al,0ahstosbmov al,0dhstosbinc chloop_n:call storeinc clcmp cl,chjbe loop_ncmp ch,09hjb loop_mmov di,'$'finish:lea dx,bufmov ah,
21、09hint 21hmov ah,4chint 21h;子程序store :由ch,cl傳遞參數(shù) m,n,求組合數(shù) C(m,n); 并轉(zhuǎn)換為 10 進(jìn)制數(shù)存入 buf 中,再寫入一個空格store proc nearpush axpush bxpush cxpush dx;將n和m-n中較小者賦給cl,減小運(yùn)算量mov bl,chsub bl,clcmp cl,bljbe nextmov cl,blnext:cmp cl,0 jne next1;n 為 0 或 n=m 時直接往 buf 中寫入 1 mov al,01h add al,'0' stosb mov al,'
22、 ' stosb pop dx pop cx pop bx pop ax retnext1: ;n!=0 且 n!=m 時調(diào)用子過程計算 mov bh,ch mov bl,cl;調(diào)用子過程 multiply 求分子 call multiply mov ax,dx mov bh,cl;調(diào)用子過程 multiply 求分母 call multiply div dl ;此時計算結(jié)果在 al 中 mov ah,0 mov dl,64hdiv dl ; 百位在 al 中,十位個位在 ah 中 cmp al,0 je next2 add al,'0' mov di,al inc d
23、inext2:mov al,ah mov ah,0 mov dl,0ah div dl ; 十位在 al 中,個位在 ah 中 cmp al,0 je next3 add al,'0' stosbnext3:add ah,'0' mov di,ahinc dimov al,''stosbpop dxpop expop bxpop axretstore endp;子程序multiply :由bh,bl傳遞參數(shù)p,q;求乘積 p(p-1)(p-2).(p-q+1),并由 dx傳出multiply proc n earpush axpush bxpus
24、h cxmov cx,0mov cl,blmov bl,bhmov bh,0mov ax,1mov dx,0loop_mult:mul bxdec bxloop loop_multmov dx,axpop cxpop bxpop axretmultiply endpcode endsend start輸出屏幕截圖:1. 分支程序設(shè)計:輸出成績A,B,C,D2. 子程序設(shè)計:小寫變大寫3. 循環(huán)程序設(shè)計:輸出 a出現(xiàn)的次數(shù)4. DOS功能調(diào)用:輸出等腰” ”三角形5. 輸出ACSII表6. 判斷閏年7. 輸出楊輝三角匯編自學(xué)課程心得:但也只是略微明接觸匯編語言之前,我們在計算機(jī)組成原理課程中就已經(jīng)有所了解了, 白一些如jmp, mov這樣的指令,極度缺乏系統(tǒng)性的學(xué)習(xí)。感觸最深的
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度醫(yī)院門診部承包經(jīng)營服務(wù)合同3篇
- 2025年度海洋工程承包勞務(wù)服務(wù)協(xié)議3篇
- 2025年物業(yè)公司物業(yè)費(fèi)收入權(quán)轉(zhuǎn)讓合同3篇
- 2025版高端景觀工程毛石材料供應(yīng)合作協(xié)議4篇
- XX公司2024年度采購協(xié)議樣本版B版
- 二零二五版數(shù)據(jù)中心網(wǎng)絡(luò)安全設(shè)備安裝協(xié)議2篇
- 二零二五年度鐵路客票運(yùn)輸合同樣本3篇
- 2024綠色照明推廣與實施合同
- 游戲化教學(xué)法在小學(xué)生閱讀能力培養(yǎng)中的應(yīng)用
- 文化背景下創(chuàng)新金融產(chǎn)品的市場反應(yīng)研究
- 2024年國家公務(wù)員考試公共基礎(chǔ)知識復(fù)習(xí)題庫及答案(共三套)
- 《社會工作實務(wù)》全冊配套完整課件3
- 單位違反會風(fēng)會書檢討書
- 2024年4月自考00832英語詞匯學(xué)試題
- 《電力用直流電源系統(tǒng)蓄電池組遠(yuǎn)程充放電技術(shù)規(guī)范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化運(yùn)維服務(wù)信息化運(yùn)維方案
- 汽車修理廠員工守則
- 公安交通管理行政處罰決定書式樣
- 10.《運(yùn)動技能學(xué)習(xí)與控制》李強(qiáng)
- 1神經(jīng)外科分級護(hù)理制度
評論
0/150
提交評論