匯編語言課程設(shè)計--計算比賽成績系統(tǒng)_第1頁
匯編語言課程設(shè)計--計算比賽成績系統(tǒng)_第2頁
匯編語言課程設(shè)計--計算比賽成績系統(tǒng)_第3頁
匯編語言課程設(shè)計--計算比賽成績系統(tǒng)_第4頁
匯編語言課程設(shè)計--計算比賽成績系統(tǒng)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.匯編語言課程實習(xí)報告實習(xí)題目 計算比賽成績學(xué)生姓名 班級(學(xué)號) 計科1123班 201211621301 院系 信息學(xué)院計算機(jī)系 指導(dǎo)老師 提交時間 2014年5月28 日成績目 錄 1 課程實習(xí)任務(wù)22 基本知識2 2.1 匯編語言程序結(jié)構(gòu)3 2.2 關(guān)鍵指令分析4 2.3 匯編語言上機(jī)過程43 總體分析5 3.1 程序功能分析5 3.2 設(shè)計思路5 3.3 程序框圖64 代碼實現(xiàn)75 調(diào)試過程及操作說明116 總結(jié)12 7 參考文獻(xiàn)12 1 課程實習(xí)任務(wù) 計算比賽成績系統(tǒng) 基本功能: (1) 有9名評委,每個評委給分范圍為010(整數(shù)):由鍵盤輸入; (2) 9名評委給分中,去掉一個最

2、高分和一個最低分,剩余7名評委的平均分即為參賽者的得分(精確到小數(shù)點后二位,不考慮四舍五入); (3) 將最后得分在光標(biāo)位置處顯示出來。 2 基本知識 2.1 匯編語言程序結(jié)構(gòu) 匯編語言是計算機(jī)能夠提供給用戶使用的最快而又最有效的語言,也是能夠利用計算機(jī)所有硬件特性并能控制硬件的唯一語言。也因此匯編語言的程序結(jié)構(gòu)也是多種多樣的,我們熟知的結(jié)構(gòu)有循環(huán)、分支程序、子程序和宏匯編。而循環(huán)程序又有簡單循環(huán)和多重循環(huán),最重要的是我們要控制好循環(huán)的次數(shù);分支程序則是由設(shè)定條件不同而跳轉(zhuǎn)到不用的分支,來實現(xiàn)不同的功能;子程序則是我們?yōu)榱税颜麄€程序模塊化,使得讀程序的人容易理解你的程序功能;宏則是一種另類的子

3、程序,是有些程序為了能在時間上達(dá)到嚴(yán)格的要求和一些功能代碼簡短的多參數(shù)傳遞的程序為了方便參數(shù)傳遞而使用的,而犧牲一點點空間來實現(xiàn),當(dāng)然宏和子程序的工作機(jī)制也是不同的。 2.2 關(guān)鍵指令分析 2.2.1 數(shù)據(jù)傳送指令 mov指令:mov指令可以在CPU內(nèi)或CPU和存儲器之間傳送字或者字節(jié)。 PUSH和POP指令:這兩條分別是堆棧的進(jìn)棧和出棧指令。 XCHG指令:它可以在寄存器之間或者在寄存器和儲存器之間交換信息。 2.2.2 地址傳送指令 LEA指令:將源操作數(shù)的有效地址送到指定的寄存器中。不能使用段寄存 器,源操作數(shù)可以使用除立即數(shù)和寄存器外的任一種寄存器尋址方式。 2.2.3 類型轉(zhuǎn)換指令

4、CBW指令:將AL的內(nèi)容符號擴(kuò)展到AH,形成AX中的字 2.2.4 算數(shù)指令 ADD指令:進(jìn)行加法操作 INC指令:自加1 SUB指令:進(jìn)行減法操作 DEC 指令:自減1 CMP指令:將兩個操作數(shù)進(jìn)行減法操作,但不保存結(jié)果,只設(shè)置條件標(biāo)志位 MUL指令:進(jìn)行無符號乘法操作 DIV指令:進(jìn)行無符號除法操作 2.2.5 邏輯指令 AND指令:進(jìn)行邏輯與操作,見0得0 OR指令:進(jìn)行邏輯或操作,見1得1 XOR指令:進(jìn)行異或操作,相同得0,不同得1 2.2.6 控制轉(zhuǎn)移指令 JMP指令:無條件跳轉(zhuǎn)到指定位置 條件轉(zhuǎn)移指令:根據(jù)上一條指令所設(shè)置的條件碼來判別測試條件,每一種轉(zhuǎn) 移指令有它的測試條件,滿

5、足測試條件則轉(zhuǎn)移到指令指定的位置 LOOP指令: 當(dāng)測試條件碼CX不為0時,循環(huán)指定程序段 CALL指令:把子程序的返回地址存入棧中,以便子程序返回主程序時調(diào)用 RET指令:轉(zhuǎn)移到子程序的入口地址去繼續(xù)執(zhí)行 2.3 匯編語言上機(jī)過程 上機(jī)過程是我們編寫好程序后驗證的最好手段,也是我們對我們寫得程序進(jìn)行調(diào)試必不可少的一個過程。上機(jī)過程我們首先要把我們編寫的程序在編譯器里對它進(jìn)行編譯看看是否有語法上的錯誤,然后編譯生成.obj文件,最后連接生成可執(zhí)行文件.exe,然后我們要對生成的可執(zhí)行文件進(jìn)行調(diào)試,看看是否有邏輯上的錯誤,如果有邏輯上的錯誤那么我們還要對程序進(jìn)行修改,知道沒有邏輯上的錯誤時,我們

6、就可以運行程序,并得到我們想要的結(jié)果了。上機(jī)過程大概課分為四部分:編輯、編譯、調(diào)試、運行。 只有通過上機(jī)過程你才能發(fā)現(xiàn)你的程序是否有邏輯上或者語法上的錯誤,最重要的是檢測運行結(jié)果是不是你理論上的結(jié)果。我們只有在上機(jī)過程中才能發(fā)現(xiàn)問題,然后解決問題,最終得到我們想要的結(jié)果。3.總體分析 3.1程序功能分析 通過讀取依次從鍵盤輸入的9個兩位的十進(jìn)制數(shù)得分,將得分保存在字符串中,然后用冒泡法將9個數(shù)的位置按大小重新排列并輸出,再將中間的7個數(shù)累加起來除以7,即得到去掉最高分和最低分之后的平均分,最后設(shè)置光標(biāo)位置到平均分處。3.2設(shè)計思路通過記錄鍵盤,將ASCII碼轉(zhuǎn)化為二進(jìn)制數(shù)寸入長度為9的字符串中

7、,此部分使用用循環(huán)結(jié)構(gòu)。若輸入的兩位數(shù)的首位,即十位,非0或非1,則提示錯誤并要求重復(fù)輸入,若輸入的個位數(shù)非09中的數(shù),則提示錯誤并要求重復(fù)輸入。用冒泡法重排9個數(shù),使得第1和第9個數(shù)分別為最大數(shù)和最小數(shù),并在屏幕中依次顯示出來。然后用循環(huán)語句求出9個數(shù)中中間的7個數(shù)的和,即總得分,若總得分為70分,則直接輸出平均分:10.00分。若小于70分則將總得分除以得到的商作為平均分的個位數(shù),輸出一個小數(shù)點,將余數(shù)乘以10再除以7,如此循環(huán)3次,后兩次不輸出小數(shù)點,得到精確到小數(shù)點后兩位的平均的分?jǐn)?shù),再將平均分輸出。最后改變光標(biāo)位置為平均得分處。3.3 程序設(shè)計框圖開始輸入9個分?jǐn)?shù)按大小重排分?jǐn)?shù)求中間

8、7個數(shù)的和總分>=70?YESNO平均分=10.00平均分=總分/7輸出平均分改變光標(biāo)位置結(jié)束4.代碼實現(xiàn)DATAS SEGMENT RESULT DB 10 DUP(?) STRING1 DB 'Please input integer(0-10) ' NUMBER DB 31H,': ','$' STRING2 DB 0AH,'The ranged scores are:','$' STRING3 DB 'After removing the highest and lowest score, t

9、he average score is: ','$' ERROR DB ' out of range',0AH,0DH,'$' ERROR1 DB ' is not an integer',0AH,0DH,'$' ERROR2 DB ' is not an number',0AH,0DH,'$'DATAS ENDSSTACKS SEGMENT ;此處輸入堆棧段代碼STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STAC

10、KSCR PROC NEAR ;設(shè)置一個子程序PUSH AXPUSH BXMOV AH,02HMOV DL,0DH;回車INT 21HMOV DL,0AH;換行INT 21HPOP BXPOP AXRETCR ENDPSTART: MOV AX,DATAS MOV DS,AX XOR SI,SI MOV CX,9 MOV AH, 00HMOV AL, 10 ;選擇顯示方式10H(16色圖形)INT 10HMOV AH, 10HMOV AL, 00HMOV BH, 10H ;背景設(shè)為綠色(02H也可以,是用DEBUG調(diào)試出來的)MOV BL, 0 ;選擇0號調(diào)色板INT 10HINPUT: LE

11、A DX,STRING1MOV AH,9;9號功能,顯示字符串INT 21H;的邏輯地址 MOV AH,1;AL=輸入字符INT 21HSUB AL,30H;把輸入的字符ASCII轉(zhuǎn)換成數(shù)值MOV DL,10MUL DL;十位數(shù)乘以10MOV DX,AX;把十位數(shù)存放在DLMOV AH,1INT 21HMOV BL,'.'CMP AL,BL;判斷個位數(shù)是否是小數(shù)點,因為要輸入的數(shù)是整數(shù),用這種方法來提示輸入的數(shù)不能是小數(shù)JE ER1SUB AL,30HADD AL,DL;個位數(shù)和十位數(shù)相加CMP AL,0;跟0比較JB ER;小于0則調(diào)到ERCMP AL,10;跟10比較JA

12、ER;大于10則調(diào)到ERMOV RESULTSI,AL;把AL的值存放在RESULTINC SI ;SI自加1INC NUMBERCALL CR;調(diào)用子程序LOOP INPUTJMP RANGE_0;轉(zhuǎn)入排序ER: LEA DX,ERROR;取ERROR的偏移地址 MOV AH,9 INT 21H JMP INPUTER1: LEA DX,ERROR1 MOV AH,9 INT 21H JMP INPUTRANGE_0:MOV BX,1MOV CX,9XOR DI,DIRANGE:MOV AL,RESULTDI;把RESULT(I)送到ALCMP AL,RESULTDI+1;進(jìn)行比較JAE N

13、EXT_1;大于或等于跳到NEXT_1XCHG RESULTDI+1,AL;小于則進(jìn)行交換MOV RESULTDI,AL;保存較大的數(shù)MOV BX,0NEXT_1:INC DILOOP RANGECMP BX,0JE RANGE_0 LEA DX,STRING2;取STRING2的偏移地址 MOV AH,9 INT 21H MOV CX,9;顯示輸出的次數(shù) XOR SI,SI;SI;清零 MOV AH,2RANGE_OUTPUT:;輸出排序后的得分 MOV DL,RESULTSI ADD DL,30H;把DL的值轉(zhuǎn)換成ASCII CMP DL,39H;判斷是否是10分 JA TENS_1;10

14、分就跳到TEXT_1 JBE TENS_0;不是就跳到TEXT_0TENS_1: MOV BX,1 MOV DL,'1'輸出字符1 INT 21H MOV DL,'0'輸出字符0 INT 21H INC SI MOV DL,','輸出逗號 INT 21H JMP NEXT_2TENS_0:;十位數(shù)位0,則按原分輸出 INT 21H INC SI MOV DL,',' INT 21HNEXT_2: LOOP RANGE_OUTPUT MOV AH,2 MOV DL,0AH;換行 INT 21H MOV DL,0AH;換行 INT 2

15、1H MOV DL,0DH;回車 INT 21H LEA DX,STRING3;取STRING3的偏移地址MOV AH,9H INT 21H MOV CX,7;累加中間7個數(shù)字 XOR AX,AX;AX清零 DEC SISUM:;求7個分?jǐn)?shù)的和DEC SI ADD AL,RESULTSI LOOP SUMCMP AL,46H;與滿分70 比較JAE FULL_MARK;大于等于挑到FULL_MARKJMP N_FULL_MARK;否則跳到N_FULL_MARKFULL_MARK:;滿分時MOV AH,2HMOV DL,'1'輸出字符1INT 21HMOV DL,'0&#

16、39;輸出字符0INT 21HMOV DL,'.'INT 21H;輸出字符MOV DL,'0'INT 21HMOV DL,'0'INT 21HJMP ENDINGN_FULL_MARK:;非滿分時MOV CX,3;設(shè)置循環(huán)3次,為下面的求兩位小數(shù)做準(zhǔn)備MOV BH,1;設(shè)置小數(shù)點出現(xiàn)一次DIVISION: MOV BL,7 DIV BL;除以7 PUSH AX;把除完后的AX入棧,存起來 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H;輸出商 CMP BH,0;把BX置為0,使下次循環(huán)不會出現(xiàn)小數(shù)點 JE DOT MO

17、V DL,'.' INT 21H MOV BX,0DOT: POP AX;恢復(fù)之前入棧的余數(shù) MOV AL,AH;余數(shù)存入AL MOV DL,10 MUL DL;余數(shù)乘以10,結(jié)果存入AXLOOP DIVISIONENDING:MOV AH,02;調(diào)用2號功能,置光標(biāo)位置MOV BH,0;顯示頁MOV DX,0E48H;顯示行列,DH=0CH行,DL=48H列INT 10H;設(shè)置光標(biāo)位置MOV AH,4CH INT 21HCODES ENDS END START5調(diào)試過程及操作說明如上圖,當(dāng)我們輸入一個整數(shù)的時候會自動跳到下行輸入,輸入的數(shù)不對如負(fù)數(shù),小數(shù)點,大于10的都會顯示錯誤的信息然后自動提醒再重新輸入。當(dāng)我們輸完數(shù)據(jù)之后會自動排序和計算成績6.總結(jié)這次課程設(shè)計,代碼雖然不長,當(dāng)卻可以從中了解很多的知識,比如哪幾號的功能是做什么的,

溫馨提示

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

評論

0/150

提交評論