北郵微機(jī)原理實(shí)驗(yàn)報(bào)告_第1頁
北郵微機(jī)原理實(shí)驗(yàn)報(bào)告_第2頁
北郵微機(jī)原理實(shí)驗(yàn)報(bào)告_第3頁
北郵微機(jī)原理實(shí)驗(yàn)報(bào)告_第4頁
北郵微機(jī)原理實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、實(shí)驗(yàn)要求:一個(gè)學(xué)生的信息包括姓名、班級(jí)、學(xué)號(hào)(班內(nèi)序號(hào))、成績。試編寫程序?qū)崿F(xiàn)以下功能:(1)能錄入學(xué)生成績(十進(jìn)制形式);提示:輸入形如:tom 301 16 95回車,每名學(xué)生用一行,選擇一個(gè)特殊符表示輸入結(jié)束;(2)能按要求:如學(xué)號(hào)或成績進(jìn)行排序顯示;(3)能統(tǒng)計(jì)平均成績;(4)能統(tǒng)計(jì)不及格、60-70、70-80、80-90、90-100各分?jǐn)?shù)段的人數(shù)。2、 實(shí)驗(yàn)設(shè)計(jì):1.分析及算法思想:(1)采用數(shù)組進(jìn)行數(shù)據(jù)存儲(chǔ):學(xué)生數(shù)目信息數(shù)組(存儲(chǔ)學(xué)生數(shù)目),學(xué)生信息數(shù)組(按班級(jí)-學(xué)號(hào)-姓名格式存儲(chǔ)),平均成績數(shù)組。五個(gè)DB變量記錄各分?jǐn)?shù)段人數(shù)。 (2)輸入學(xué)生數(shù)目保存在數(shù)組中,提示輸入學(xué)生

2、信息并存儲(chǔ),對(duì)于字符串輸入進(jìn)行轉(zhuǎn)換,以二進(jìn)制的形式存儲(chǔ)在數(shù)據(jù)段中。采用冒泡排序?qū)?shù)據(jù)段中的人員信息進(jìn)行排序,以成績?yōu)閰?shù)進(jìn)行遍歷,統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù)并將同時(shí)求出平均成績,輸出運(yùn)算結(jié)果。2.數(shù)據(jù)結(jié)構(gòu):(1)輸入:a. 學(xué)生數(shù)目數(shù)組number db 3 dup(0) 說明:第一個(gè)存?zhèn)€/十位(ASCII碼),第二個(gè)存?zhèn)€位(ASCII碼),第三個(gè)存學(xué)生數(shù)(二進(jìn)制)b. 學(xué)生信息數(shù)組information db 99 dup(20 dup(0)說明:用20字節(jié)單元表示學(xué)生信息,0-19中:0對(duì)應(yīng)最大字符,1對(duì)應(yīng)實(shí)際輸入,2-18對(duì)應(yīng)輸入信息,19對(duì)應(yīng)$c.成績數(shù)組grade db 99 dup(7 du

3、p(0)說明:第一個(gè)存整數(shù)部分(二進(jìn)制形式),第二個(gè)存小數(shù)部分(二進(jìn)制形式)d.平均成績數(shù)組average_grade_buffer db 2 dup(0)說明:和成績數(shù)組原理一樣(2) 排序:(按成績分布排序)(3)提示信息:Student_num:提示輸入學(xué)生數(shù)目student_information:提示輸入學(xué)生信息student_grade:提示輸入成績信息average_grade:提示輸出平均成績grade_rank:提示輸出成績排名Result1:(90-100)分?jǐn)?shù)段人數(shù)Result2:(80-90)分?jǐn)?shù)段人數(shù)Result3:(70-80)分?jǐn)?shù)段人數(shù)Result4:(60-70

4、)分?jǐn)?shù)段人數(shù)Result5:(0-60)分?jǐn)?shù)段人數(shù)blank :輸出空格,便于查看結(jié)果huanhang:輸出換行,便于查看結(jié)果3.子程序:(1)store_student_num 存儲(chǔ)用戶輸入的學(xué)生數(shù)目;(2)store_student_information存儲(chǔ)學(xué)生姓名和班級(jí)和學(xué)號(hào);(3)store_student_grade存儲(chǔ)學(xué)生成績;(4)sort排序?qū)W生成績的函數(shù);(5)find_result顯示最后結(jié)果的函數(shù);(6)display輸出分?jǐn)?shù)排序的函數(shù)。(7)show將二進(jìn)制數(shù)(不大于127的十進(jìn)制整數(shù))輸出的函數(shù)4.流程圖:3、 運(yùn)行實(shí)例:輸入四個(gè)學(xué)生的信息:結(jié)果如下4、 實(shí)驗(yàn)總結(jié)通

5、過這次的匯編程序,我從中學(xué)習(xí)到了很多知識(shí)。雖然剛開始的時(shí)候遇到了很多難題,但是通過與老師、同學(xué)的交流之后,逐步克服了一個(gè)個(gè)的難題。提高了自己編程的思維能力,在將來的學(xué)習(xí),生活之中能夠快速的解決問題。匯編相對(duì)于別的編程語言而言,難度是比較大。匯編是直接對(duì)CUP進(jìn)行操作,能夠直接控制計(jì)算機(jī)編程。由于匯編不像JAVA那樣的高級(jí)編程語言面向?qū)ο螅诰幊痰臅r(shí)候思維有點(diǎn)亂,容易出錯(cuò),而且小的錯(cuò)誤也不容易找到,特別是程序代碼長的時(shí)候。5、 附頁(源代碼);輸入學(xué)生數(shù)目格式:1到99的整數(shù);輸入學(xué)生信息格式:班級(jí)(class)-學(xué)號(hào)(NUM)姓名(NAME),班級(jí)最多5位,學(xué)號(hào)最多5位,姓名最多6位,加上1位

6、中間分隔符 ;輸入學(xué)生成績格式:0.0-100.0 最多一位小數(shù);!警告:任何錯(cuò)誤的輸入都將導(dǎo)致程序運(yùn)行失敗或錯(cuò)誤!;#數(shù)據(jù)段開始DATAS SEGMENT ;此處輸入數(shù)據(jù)段代碼 ; 輸入輸出提示字符 student_num db Please input the number of students(1-99):,0dh,0ah,$ student_information db 0dh,0ah,Please input the student information(CLASS-NUM-NAME):,0dh,0ah,$ student_grade db 0dh,0ah,Please inpu

7、t the student grade(0.0-100.0):,0dh,0ah,$ average_grade db 0dh,0ah,The average grade is:,0dh,0ah,$ result1 db 0dh,0ah,The number of student in Up 90 is:,0dh,0ah,$ ;各分?jǐn)?shù)段人數(shù) result2 db 0dh,0ah,The number of student in 80-90 is:,0dh,0ah,$ result3 db 0dh,0ah,The number of student in 70-80 is:,0dh,0ah,$ r

8、esult4 db 0dh,0ah,The number of student in 60-70 is:,0dh,0ah,$ result5 db 0dh,0ah,The number of student in Below 60 is:,0dh,0ah,$ grade_rank db 0dh,0ah,The grade rank(from high to low)is:,0dh,0ah,$ ;打印排名 blank db ,$ huanhang db 0dh,0ah,$ kaishishuchu db 0dh,0ah,*,0dh,0ah,$ ;數(shù)據(jù) number db 3 dup(0) ;第一

9、個(gè)存?zhèn)€/十位(ASCII碼),第二個(gè)存?zhèn)€位(ASCII碼),第三個(gè)存學(xué)生數(shù)(二進(jìn)制) ;用20字節(jié)單元表示學(xué)生信息,0-19中:0對(duì)應(yīng)最大字符,1對(duì)應(yīng)實(shí)際輸入,2-18對(duì)應(yīng)輸入信息,19對(duì)應(yīng)$ information db 99 dup(20 dup(0) ;用7字節(jié)單元來存分?jǐn)?shù),0-6中,0-4對(duì)應(yīng)輸入字符,5對(duì)應(yīng)輸入整數(shù)部分的二進(jìn)制數(shù),6對(duì)應(yīng)于小數(shù)部分的二進(jìn)制數(shù) grade db 99 dup(7 dup(0) average_grade_buffer db 2 dup(0) ;第一個(gè)存整數(shù)部分(二進(jìn)制形式),第二個(gè)存小數(shù)部分(二進(jìn)制形式) n0 db 0 ;各分?jǐn)?shù)段人數(shù)存儲(chǔ)區(qū)(二進(jìn)制形式

10、) n1 db 0 n2 db 0 n3 db 0 n4 db 0DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: ;此處輸入代碼段代碼 MOV AX,DATAS MOV DS,AX mov si,0 ;指向每個(gè)學(xué)生信息mov di,0 ;指向每個(gè)學(xué)生成績 mov cx,100 ;初始化學(xué)生數(shù) mov dx, offset student_num ;請(qǐng)求輸入學(xué)生總數(shù) mov ah,09 int 21h call store_student_num ;存儲(chǔ)學(xué)生總數(shù),結(jié)果送cx中 cmp cx,0 ;輸入為0退出jle OutToDOSc

11、mp cx,100 ;學(xué)生數(shù)超出本程序范圍,退出jge OutToDOSinput: mov dx, offset student_information ;請(qǐng)求輸入學(xué)生信息mov ah,09 int 21h call store_student_information ;存儲(chǔ)學(xué)生信息add si,20 ;指向下一個(gè)學(xué)生信息mov dx, offset student_grade ;請(qǐng)求輸入學(xué)生成績mov ah,09int 21hcall store_student_grade ;存儲(chǔ)每個(gè)學(xué)生成績 add di,7 ;指向下一個(gè)學(xué)生loop input ;循環(huán),直到輸入所有學(xué)生成績call s

12、ort ;排序call find_result ;顯示平均成績和分段人數(shù)call display ;顯示排序結(jié)果OutToDOS: mov ah,1 ;任意鍵結(jié)束 int 21h mov ax,4c00h ;返回DOSint 21h ;#存儲(chǔ)學(xué)生數(shù)目的函數(shù)store_student_num proc ;調(diào)用之后,cx中存儲(chǔ)了學(xué)生數(shù)(二進(jìn)制) push ax push bx mov bx,0 s1: mov ah,1 int 21h cmp al,0dh ;是否為回車 je s2 and al,0fh ;轉(zhuǎn)換為非壓縮的BCD碼 mov numberbx,al inc bx jmp s1 s2:

13、cmp bx,2 jg s5 ;大于2 jz s3 ;等于2 ;小于2 mov al,number jmp s4 s3: mov ah,number mov al,number+1 aad ;BCD碼轉(zhuǎn)換為二進(jìn)制數(shù) s4: mov number+2,al mov cx,0 mov cl,number+2 s5: pop bx pop ax retstore_student_num endp ;#存儲(chǔ)學(xué)生信息的函數(shù) store_student_information proc push ax push bx push dx mov al,18 mov informationsi,al lea d

14、x,informationsi mov ah,0ah int 21h mov bl,informationsi + 1 ;實(shí)際輸入的字符個(gè)數(shù) mov al, mov informationsi + bx + 2,al ;將回車換成 mov informationsi+19,$ ;將每個(gè)存儲(chǔ)單元的最后一個(gè)字節(jié)置為$以便輸出 pop dx pop bx pop ax retstore_student_information endp;#存儲(chǔ)學(xué)生成績的函數(shù)store_student_grade proc push ax push bx push cx push dx mov bx,0 mov cx,

15、0 mov dx,di deal0: mov ah,1 int 21h cmp al,0dh ;判斷是否為回車 jz deal2 ;是回車 cmp al,. ;是否為小數(shù)點(diǎn) jnz deal1 ;不是小數(shù)點(diǎn) mov bx,cx ;bx指向小數(shù)點(diǎn)處 inc bx ;標(biāo)記小數(shù)點(diǎn)字符出現(xiàn)在第幾個(gè)位置 deal1: push bx mov bx,dx mov gradebx,al pop bx inc cx ;記錄輸入字符的個(gè)數(shù) inc dx jmp deal0 deal2: cmp bx,0 jnz deal3 ;有小數(shù)點(diǎn) ;無小數(shù)點(diǎn) cmp cx,3 jg gout ;大于100 jz deal4

16、 ;等于100 ;小于100 cmp cx,2 jz deal5 ;輸入數(shù)目為2位數(shù) ;個(gè)位數(shù) deal6: ;處理個(gè)位數(shù) mov al,gradedi sub al,0 mov gradedi + 5,al jmp gout deal5: ;處理2位數(shù) mov ah,gradedi and ah,0fh mov al,gradedi + 1 and al,0fh aad mov gradedi + 5,al jmp gout deal4: ;處理3位數(shù) mov al,100 mov gradedi + 5,al jmp gout deal3: ;處理帶有小數(shù)部分的成績 mov al,grad

17、edi + bx ;將小數(shù)部分處理 sub al,0 mov gradedi + 6,al cmp bx,4 jz deal4 ;.出現(xiàn)在輸入字符的第四位,則輸入的整數(shù)部分為3位數(shù) jg gout ;整數(shù)部分大于3位數(shù) cmp bx,3 jz deal5 ;.出現(xiàn)在輸入字符的第三位,則輸入的整數(shù)部分為2位數(shù) jmp deal6 ;否則為個(gè)位數(shù) gout: pop dx pop cx pop bx pop ax retstore_student_grade endp;#排序?qū)W生成績的函數(shù) sort proc push ax push bx push cx push dx push si push

18、 di mov dx,0 mov dl,number+2Loop1: ;使用冒泡排序法 mov cx,dx mov di,0 mov si,0Loop2: ;先比整數(shù)部分,再比小數(shù)部分 mov al,gradedi + 5 cmp al,gradedi + 12 jg next ;大于,向下個(gè)移動(dòng) jl swap1 ;小于,交換成績,名字 ;等于,比較小數(shù)部分 mov al,gradedi + 6 cmp al,gradedi + 13 jge next ;大于或等于,向下個(gè)移動(dòng) jl swap1 ;小于,交換成績,名字swap1: mov bx,siswap11: ;交換學(xué)生信息 mov a

19、l,informationbx + 2 xchg al,informationbx + 22 mov informationbx + 2,al inc bx cmp al,$ jnz swap11 push bx mov bx,0swap2: ;交換學(xué)生成績 mov al,gradedi + bx xchg al,gradedi + bx + 7 mov gradedi + bx,al inc bx cmp bx,7 jnz swap2 pop bxnext: add si,20 add di,7 dec cx jnz Loop2 dec dx jnz Loop1 pop di pop si

20、pop dx pop cx pop bx pop ax retsort endp ;#顯示最后結(jié)果的函數(shù)find_result proc push ax push bx push cx push dx push si push di mov bx,0 mov cx,0 mov cl,number+2 ;cl中保存學(xué)生人數(shù) mov di,0 mov si,0 F1: mov al,gradedi + 5 cmp al,100 jg Fout ;大于100 jz F90 ;等于100 ;小于100 cmp al,90 jge F90 ;大于等于90 ;小于90 cmp al,80 jge F80

21、;大于等于80 ;小于80 cmp al,70 jge F70 ;大于等于70 ;小于70 cmp al,60 jge F60 ;大于等于60 ;小于60 ;處理=90 mov dl,n0 inc dl mov n0,dl jmp Fnext F80: ;處理大于等于80小于90 mov dl,n1 inc dl mov n1,dl jmp Fnext F70: ;處理大于等于70小于80 mov dl,n2 inc dl mov n2,dl jmp Fnext F60: ;處理大于等于60小于70 mov dl,n3 inc dl mov n3,dl jmp Fnext F2: add di

22、,7 dec cx jnz F1 ;處理所有學(xué)生 mov dx,offset kaishishuchu ;打印一段* mov ah,09 int 21h mov dx,offset average_grade ;打印平均成績 mov ah,09 int 21h mov ax,bx mov dx,0 mov cx,0 mov cl,number+2 div cx mov cl,10 div cl call show ;先打印平均成績的整數(shù)部分 push ax mov dl,. ;打印. mov ah,2 int 21h pop ax mov al,ah call show ;再打印平均成績的小數(shù)

23、部分 mov dx,offset result1 ;輸出大于等于90的人數(shù) mov ah,09 int 21h mov al,n0 call show mov dx,offset result2 ;輸出大于等于80并小于90的人數(shù) mov ah,09 int 21h mov al,n1 call show mov dx,offset result3 ;輸出大于等于70并小于80的人數(shù) mov ah,09 int 21h mov al,n2 call show mov dx,offset result4 ;輸出大于等于60并小于70的人數(shù) mov ah,09 int 21h mov al,n3

24、call show mov dx,offset result5 ;輸出小于60的人數(shù) mov ah,09 int 21h mov al,n4 call show Fout: pop di pop si pop dx pop cx pop bx pop ax retfind_result endp;#輸出分?jǐn)?shù)排序的函數(shù)display proc push ax push bx push cx push dx push si push di mov dx, offset grade_rank mov ah,09 int 21h mov cx,0 mov cl,number+2 ;cl中保存學(xué)生人數(shù) mov di,0 mov si,0 D1: lea dx, offset information add dx,s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論