日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言程序设计,计算比赛成绩

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言程序设计,计算比赛成绩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


一、設計內容與設計要求

1.課程設計目的:

《匯編語言程序設計》是計算機專業的重要的專業基礎課,通過本課程設計使學生進一步鞏固課堂所學,全面熟悉、掌握8088宏匯編語言程序設計的基本方法和技巧,進一步提高編寫程序、閱讀分析程序及上機操作、調試程序的能力。

2.課題題目

1)測量任意程序的運行時間

2)讀入一個文本文件并以DEBUG中的D命令格式顯示。

3)文件加密程序

4)編寫一個時鐘程序

5)畫網格線

6)畫脈沖波圖形

7)用“*”畫菱形框

8)計算比賽成績

3.設計要求:

1)在一周內學生須上機16小時以上,程序調試完后,須由指導老師在機器上檢查運行結果,經教師認可后的源程序可通過打印機輸出。

2)分組及安排

A.每組同學必須完成所指定的題目,每個同學須自己完成設計,應有不同的思路。

B.按學號分組,第一組為1、9、17、25、33號同學,第二組為2、10、18、26、34號,第三組為3、11、19、27、35號,依次類推,其中第一組做第一題,第二組做第二題,依次類推。

3)按規定格式完成課程設計報告,將其打印稿(A4紙)上交給老師存檔。

4)不得抄襲他人程序、課程設計報告,每個人應體現自己的個性設計,成績的考核按上機表現、答辯成績及課程設計說明書來綜合評定。成績分為優、良、中、及格、不及格五級分評定。

?

?

?

?

二、進度安排

第15 周??

星期三? 14時:00分——18時:00分

星期日? 8時:00分——12時:00分

第16 周? 星期一? 14時:00分——18時:00分

星期三? 8時:00分——12時:00分

星期三? 14時:00分——18時:00分

星期五? 8時:00分——12時:00分


課題1.測量任意程序的運行時間

????要求:該程序駐留內存

??? 思路:DOS操作系統中,程序的調入運行及程序的終止均是通過相應的軟中斷來實現的。若竊取相應軟中斷,記錄下程序開始調入運行的時間及程序終止的時間,則可測量出該程序運行的時間。

??? 提示要點:與之相關的軟中斷分別為:

??? 程序開始執行:4BH號系統功能調用(INT? 21H)

??? 程序結束: INT 20H

?????????????? INT 27H

?????????????? 00H、3lH、4CH號系統功能調用(INT 21H)

課題2.讀入一個文本文件并以DEBUG中的D命令格式顯示。

????要求:A、以DEBUG中的D命令格式顯示一個文本文件。

????????? B、文件名從鍵盤鍵入。

??? 思路:A、打開相應文件,讀內容至程序緩沖區。

????????? B、按要求顯示。

課題3.文件加密程序

?????要求:A、文件名從鍵盤輸入。

?????????? B、加密密鑰從鍵盤輸入。

???? 思路:從原文件讀取內容至緩沖區,對其加密后,重新寫回文件原來的地方。

???? 提示要點:A、加密可使用“異或”操作。

?????????????? B、相關中斷為3DH,3EH,3FH,40H,42H號系統功能調用(INT 21H)

課題4.編寫一個時鐘程序

???? 要求:A、駐留內存。?????

B、不影響其它程序運行。

C、把時鐘信號顯示在屏幕固定位置(最好為右上角)。

??? ?思路:先從系統實時鐘取得當前時間,每隔約0.05秒定時器向CPU發出一次8號中斷請求,是一個硬中斷。竊取 INT? 1CH中斷服務程序。

課題5.畫網格線

要求:A、背景為藍色、橫線為紅色、直線為黃色。

B、按用戶輸入的起點和終點坐標、列距和行距的大小畫出任意條橫豎線。

C、參數以十進制數形式輸入,格式如下:

??? Please enterstarting point (x1,y1):XX, XX

??? Please enterending point (x2,y2):XX, XX

??? Please enterdistance (row,col):XX, XX

課題6.畫脈沖波圖形

????? 要求:用戶以十進制數形式從鍵盤輸入脈沖高度、脈沖寬度和顏色參數(格式同上)后,以屏幕中間行為脈沖中間行,從左到右、滿屏畫出相應的脈沖波圖形。

課題7.用“*”畫菱形框

要求:A、背景為藍色、“*”為紅色,菱形框畫在屏幕中間,菱形中間為空格。

B、用戶以十進制數形式輸入菱形寬度和高度(格式同上)。

課題8.計算比賽成績

要求:A、7個評委,每個評委給分范圍為0~10分(整數)。

B、7個評委的給分中,去掉一個最高分和一個最低分,余下5位評委的平均分即為參加者的得分(精確到小數點后一位)。

C、將分數在屏幕中間位置處用紅色顯示出來。

?

?


目? 錄

?

1.???????? 題目... 1

2.???????? 程序總體設計方案、思路... 1

3.???????? 程序設計框圖... 1

4.???????? 源程序清單... 5

5.???????? 程序調試結果及分析... 12

6.???????? 設計總結... 13

?

?


1.????? 題目

計算比賽成績

要求:A、7個評委,每個評委給分范圍為0~10分(整數)。

B、7個評委的給分中,去掉一個最高分和一個最低分,余下5位評委的平均分即為參加者的得分(精確到小數點后一位)。

C、將分數在屏幕中間位置處用紅色顯示出來。

2.????? 程序總體設計方案、思路

程序總體設計可分為三個部分,三個子函數,先定義一段7個字節的內存空間ARRY存放7個評委給出的分數,定義兩個2字節存放最大和最小分數、2個字節存放平均分數以及一些信息字符串,第一個子函數DIB用于輸入7個分數,第二個子函數FIND用于找出7個分數中的最大值和最小值并存放到預先定義的兩個字節中,第三個子函數C_DISP計算出7個分數的平均值并輸出顯示,先將7個數相加,加完后再減去存放在內存里的最大和最小分數,最后除以5得到平均值,最后結合顯示器中斷調用(INT 10H)輸出平均分數,程序大致就這個過程。

3.????? 程序設計框圖

匯編程序流程圖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?????????????????圖3.1 程序流程圖,從開始到結束調用了三個子程序。

?

?

DIB子程序流程圖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?? ???????????????????????????????圖3.2 DIB子程序流程圖,輸入7個數字到ARRY數組,

? ? ? ? ? ? ? ? ?這個流程圖的工序有些復雜,但還是準確表達子程序的思想。


FIND子程序流程圖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????????? ??圖3.3 FIND子程序是一個利用了一個簡單的算法來找出ARRY

數組里的最大和最小值,并存儲和顯示出來。

?

?

?C_DISP子程序流程圖(簡約流程圖)

??


?? ?????????????圖3.4 子程序C_DISP的流程圖,其實這個子程序是比較

復雜的,程序里面用字母’A’替代了10,在累加和輸出以及求平均數時的小數處理細節沒有寫出來。

?

?

?

4.????? 源程序清單

;2009年6月3日星期三 9:6:51

DATA SEGMENT

? ARRY DB 8DUP(?)

? MAX_MIN DB0,'A'

? SCORE DB 2DUP(?)

? MESSAGE DB'Please enter the seven consecutive Score(0~10):$'

? MESSAGE_MAXDB 0DH,0AH,'Max score:$'

? MESSAGE_MINDB 0DH,0AH,'Min score:$'

? MESSAGE_AVEDB 0DH,0AH,'Average score:$'

DATA ENDS

CODE SEGMENT

? ASSUMECS:CODE,DS:DATA

START:MOV AX,DATA

????? MOVDS,AX

?

????? CALLDIB

????? CALLFIND

????? CALLC_DISP

?

????? MOVAH,1

????? INT 21H

????? MOVAX,4C00H

????? INT 21H

;從鍵盤輸入7個0~10的數字到arry????????

DIB PROC NEAR

????? PUSH AX

????? PUSH CX

????? PUSH SI

????? MOVCX,7

????? LEASI,ARRY

?

????? LEADX,MESSAGE? ?;顯示提示信息

????? MOVAH,9

????? INT 21H

?

REP1: MOV AH,1

????? INT 21H

????? SUBAL,30H??

????? CMPAL,0

????? JL REP1

????? CMPAL,9

????? JG REP1

????? CMPAL,1

????? JEREP_10

????? JMP PUT

?

REP_10:MOV AH,7????;如果是第二次輸入,調用int21h的7h功能輸入,不用回顯出來

?????? INT21H

?

?????? SUBAL,30H??? ;是0嗎?

?????? CMPAL,0

?????? JEINPUT_A? ?;輸入10,用'A'代替輸入

INPUT_1:MOV AL,1

?????? JMPPUT

INPUT_A:

?????? MOVAH,2??? ?;如果判斷出來是數字0,就回顯一下,有輸入10的感覺

?????? MOVDL,'0'

?????? INT21H

?????? MOVAL,41H ?;輸入10,用'A'代替輸入

?

PUT:? MOV[SI],AL?

????? MOVDL,2CH?

????? MOVAH,2

????? INT 21H

????? INC SI

????? DEC CX

????? CMPCX,0

????? JNZREP1

?

??????

EXIT1: MOV BYTE PTR [SI],'$'

???? POP SI

???? POP CX

???? POP AX

???? RET

DIB ENDP

;查找最大和最小score的函數

FIND PROC NEAR

??? PUSH BX

??? PUSH CX

??? PUSH SI

??? MOV CX,7

??? LEASI,ARRY

REP2:MOV BL,[SI]

???? CMPMAX_MIN,BL

???? JG NEXT

???? MOVMAX_MIN,BL

NEXT:CMP MAX_MIN+1,BL

???? JL NEXT2

???? MOVMAX_MIN+1,BL

NEXT2:INC SI

???? LOOPREP2

?

;MAX,MIN

????? LEADX,MESSAGE_MAX? ?;顯示提示信息

????? MOVAH,9

????? INT 21H

????? MOVDL,MAX_MIN

????? CMPDL,41H

????? JNZNEXT_0

????? JMPOUT1_00?? ;輸出A時,用'1'&'0'代替

NEXT_0:ADD DL,30H

????? MOVAH,2

????? INT 21H

????? JMPTO_MIN

OUT1_00:MOV AH,2

??????? MOVDL,'1'

??????? INT21H

??????? MOVDL,'0'

??????? INT21H

?

TO_MIN:LEA DX,MESSAGE_MIN?? ;顯示提示信息

????? MOVAH,9

????? INT 21H

????? MOVDL,MAX_MIN+1

????? CMPDL,41H

????? JNZ NEXT_N0

????? JMPOUT1_000

NEXT_N0:ADD DL,30H

????? MOVAH,2

????? INT 21H

????? JMPTO_WAIT

OUT1_000:MOV AH,2

??????? MOVDL,'1'

??????? INT21H

??????? MOVDL,'0'

??????? INT21H

TO_WAIT:

????? MOVAH,1

????? INT 21H

?

EXIT2:POP SI

???? POP CX

???? POP BX

???? RET

FIND ENDP

;計算平均值得分并輸出來,精確一位小數,注意,5個數字的平均值,一定最多是1位小數位

C_DISP PROC NEAR

???? PUSH AX

???? PUSH CX

???? PUSH DX

???? PUSH SI

???? MOV CX,7

???? LEASI,ARRY

???? MOV AL,0

REP3:MOV BL,[SI] ?;將7個數都加起來到AX,最后減去MAXscore和MIN score

???? CMPBL,41H

???? JE NEXT33

???? ADDAL,BL

???? JMPNEXT3

NEXT33:ADD AL,10

NEXT3:INC SI

???? LOOPREP3

?

???? CMPMAX_MIN,41H

???? JESUB_10

???? SUBAL,MAX_MIN

???? JMPSUB_MIN

SUB_10:SUB AL,10

SUB_MIN:CMP MAX_MIN+1,41H

???? JESUB_N10

???? SUBAL,MAX_MIN+1

???? JMPNEXT44

SUB_N10:SUB AL,10

;CBW將AL累加起來的和擴展到AX

NEXT44:CBW

???? MOV BL,5

???? DIV BL

???? MOVSCORE,AL? ;score放商

???? CMPAH,0??? ;AH里是余數

???? JNZNEXT4 ??;余數不為0就再除一次即可

???? MOVSCORE+1,AH

???? JMPPRINT

NEXT4:MOV BL,AH

????? MOVAL,BL

????? CBW

????? MOVBL,10

????? MULBL? ??; (ax)←(al)*(src)

????? MOVBL,5

????? DIVBL??? ?;此處又是(al)←(ax)/(src)商,(ah)←(ax)/(src)余數一定是0了

????? MOVSCORE+1,AL

PRINT:MOV AH,0

????? MOVAL,3

????? INT 10H??;重新設置屏幕

?

????? LEADX,MESSAGE_AVE

????? MOVAH,9

????? INT 21H

?

????? MOVAH,2

????? MOVDX,0B26H

????? INT10H?????? ;調整光標位置

?

????? MOVAH,9

????? MOVBH,0

????? MOVBL,0CH ;(BL)前一個控制背景顏色,后一個控制字體顏色,0為黑,C為紅,0CH就是紅字黑底

????? MOVCX,3??

????? INT 10H

?????

????? MOVDL,SCORE? ??;average score的整數部分

????? ADDDL,30H

????? CMPDL,3AH

????? JNZ NNN2

????? JMPOUT1_0?

OUT1_0:INC CX??????

?

????? INT 10H

????? MOVDL,'1'? ;輸出'1'&'0'

????? MOVAH,2

????? INT 21H

?

????? MOVDL,'0'

????? INT 21H

????? JMP XSD

??????

NNN2:MOV AH,2

????? INT 21H

?

XSD:? MOVDL,'.'? ?;小數點

????? MOVAH,2

????? INT 21H

?

????? MOV DL,SCORE+1 ?;average score小數部分,只有1位

????? ADDDL,30H

????? MOVAH,2

????? INT 21H

EXIT5:POP SI

????? POP DX

????? POP CX

????? POP AX

????? RET

C_DISP ENDP

CODE ENDS

???? ENDSTART

5.????? 程序調試結果及分析

?

??????????????圖5.1 ?程序運行的第一個界面,這里顯示的是輸入7個分數之后的情況。

?

?

??????????????? 圖5.2 這是程序運行時的第二個界面,顯示了提示信息和

在屏幕中央用紅色字體顯示平均分數。

?

?

?

6.????? 設計總結

?

總結

以上是生活随笔為你收集整理的汇编语言程序设计,计算比赛成绩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。