版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上微機原理匯編實驗一專 業(yè) 計算機科學與技術(shù) 班 級 學 生 學 號 目 錄1、 實驗要求.32、 實驗設(shè)計.31.分析及算法思想.32.數(shù)據(jù)結(jié)構(gòu).33.子程序.44.流程圖.4三、運行實例.6四、實驗總結(jié).6五、附頁(源代碼).7一、實驗要求:一個學生的信息包括姓名、班級、學號(班內(nèi)序號)、成績。試編寫程序?qū)崿F(xiàn)以下功能:(1)能錄入學生成績(十進制形式);提示:輸入形如:tom 301 16 95回車,每名學生用一行,選擇一個特殊符表示輸入結(jié)束;(2)能按要求:如學號或成績進行排序顯示;(3)能統(tǒng)計平均成績;(4)能統(tǒng)計不及格、60-70、70-80、80-90、90
2、-100各分數(shù)段的人數(shù)。2、 實驗設(shè)計:1.分析及算法思想:(1)采用數(shù)組進行數(shù)據(jù)存儲:學生數(shù)目信息數(shù)組(存儲學生數(shù)目),學生信息數(shù)組(按班級-學號-姓名格式存儲),平均成績數(shù)組。五個DB變量記錄各分數(shù)段人數(shù)。 (2)輸入學生數(shù)目保存在數(shù)組中,提示輸入學生信息并存儲,對于字符串輸入進行轉(zhuǎn)換,以二進制的形式存儲在數(shù)據(jù)段中。采用冒泡排序?qū)?shù)據(jù)段中的人員信息進行排序,以成績?yōu)閰?shù)進行遍歷,統(tǒng)計各分數(shù)段人數(shù)并將同時求出平均成績,輸出運算結(jié)果。2.數(shù)據(jù)結(jié)構(gòu): (1)輸入:a. 學生數(shù)目數(shù)組number db 3 dup(0) 說明:第一個存?zhèn)€/十位(ASCII碼),第二個存?zhèn)€位(ASCII碼),第三個存
3、學生數(shù)(二進制) b. 學生信息數(shù)組information db 99 dup(20 dup(0)說明:用20字節(jié)單元表示學生信息,0-19中:0對應(yīng)最大字符,1對應(yīng)實際輸入,2-18對應(yīng)輸入信息,19對應(yīng)'$' c.成績數(shù)組grade db 99 dup(7 dup(0) 說明:第一個存整數(shù)部分(二進制形式),第二個存小數(shù)部分(二進制形式)d.平均成績數(shù)組average_grade_buffer db 2 dup(0)說明:和成績數(shù)組原理一樣(2) 排序:(按成績分布排序)(3)提示信息:Student_num:提示輸入學生數(shù)目 student_information :提示
4、輸入學生信息 student_grade:提示輸入成績信息 average_grade:提示輸出平均成績 grade_rank :提示輸出成績排名 Result1 :(90-100)分數(shù)段人數(shù) Result2 :(80-90)分數(shù)段人數(shù) Result3 :(70-80)分數(shù)段人數(shù) Result4 :(60-70)分數(shù)段人數(shù) Result5:(0-60)分數(shù)段人數(shù) blank :輸出空格,便于查看結(jié)果 huanhang :輸出換行,便于查看結(jié)果 3.子程序:(1)store_student_num 存儲用戶輸入的學生數(shù)目;(2)store_student_information存儲學生姓名和班級
5、和學號;(3)store_student_grade存儲學生成績;(4)sort排序?qū)W生成績的函數(shù);(5)find_result顯示最后結(jié)果的函數(shù);(6)display輸出分數(shù)排序的函數(shù)。(7)show將二進制數(shù)(不大于127的十進制整數(shù))輸出的函數(shù)4.流程圖:3、 運行實例:輸入四個學生的信息:結(jié)果如下4、 實驗總結(jié) 通過這次的匯編程序,我從中學習到了很多知識。雖然剛開始的時候遇到了很多難題,但是通過與老師、同學的交流之后,逐步克服了一個個的難題。提高了自己編程的思維能力,在將來的學習,生活之中能夠快速的解決問題。匯編相對于別的編程語言而言,難度是比較大。匯編是直接對CUP進行操作,能夠直接
6、控制計算機編程。由于匯編不像JAVA 那樣的高級編程語言面向?qū)ο?,在編程的時候思維有點亂,容易出錯,而且小的錯誤也不容易找到,特別是程序代碼長的時候。5、 附頁(源代碼);輸入學生數(shù)目格式:1到99的整數(shù);輸入學生信息格式:班級(class)-學號(NUM)姓名(NAME),班級最多5位,學號最多5位,姓名最多6位,加上1位中間分隔符 ;輸入學生成績格式:0.0-100.0 最多一位小數(shù);!警告:任何錯誤的輸入都將導致程序運行失敗或錯誤!;#數(shù)據(jù)段開始DATAS SEGMENT ;此處輸入數(shù)據(jù)段代碼 ; 輸入輸出提示字符 student_num db 'Please inpu
7、t 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 input the student grade(0.0-100.0):',0dh,0ah,'$' average_grade db 0dh,0ah,'
8、The average grade is:',0dh,0ah,'$' result1 db 0dh,0ah,'The number of student in Up 90 is:',0dh,0ah,'$' ;各分數(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,'
9、$' result4 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 ' ','$&
10、#39; huanhang db 0dh,0ah,'$' kaishishuchu db 0dh,0ah,'*',0dh,0ah,'$' ;數(shù)據(jù) number db 3 dup(0) ;第一個存?zhèn)€/十位(ASCII碼),第二個存?zhèn)€位(ASCII碼),第三個存學生數(shù)(二進制) ;用20字節(jié)單元表示學生信息,0-19中:0對應(yīng)最大字符,1對應(yīng)實際輸入,2-18對應(yīng)輸入信息,19對應(yīng)'$' information db 99 dup(20 dup(0) ;用7字節(jié)單元來存分數(shù),0-6中,0-4對應(yīng)輸入字符,5對應(yīng)輸入整數(shù)部分的二進制數(shù),
11、6對應(yīng)于小數(shù)部分的二進制數(shù) grade db 99 dup(7 dup(0) average_grade_buffer db 2 dup(0) ;第一個存整數(shù)部分(二進制形式),第二個存小數(shù)部分(二進制形式) n0 db 0 ;各分數(shù)段人數(shù)存儲區(qū)(二進制形式) 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 ;指向每個學生信息 mov di,0 ;指向每個學生成績 mov cx,100
12、;初始化學生數(shù) mov dx, offset student_num ;請求輸入學生總數(shù) mov ah,09 int 21h call store_student_num ;存儲學生總數(shù),結(jié)果送cx中 cmp cx,0 ;輸入為0退出 jle OutToDOS cmp cx,100 ;學生數(shù)超出本程序范圍,退出 jge OutToDOS input: mov dx, offset student_information ;請求輸入學生信息 mov ah,09 int 21h call store_student_information ;存儲學生信息 add si,20 ;指向下一個學生信息
13、mov dx, offset student_grade ;請求輸入學生成績 mov ah,09 int 21h call store_student_grade ;存儲每個學生成績 add di,7 ;指向下一個學生 loop input ;循環(huán),直到輸入所有學生成績call sort ;排序call find_result ;顯示平均成績和分段人數(shù) call display ;顯示排序結(jié)果 OutToDOS: mov ah,1 ;任意鍵結(jié)束 int 21h mov ax,4c00h ;返回DOS int 21h ;#存儲學生數(shù)目的函數(shù)store_student_num proc ;調(diào)用之后
14、,cx中存儲了學生數(shù)(二進制) 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: 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)換為二進制數(shù) s4: mov number+2,al mov cx,0 mov cl,number+2 s5:
15、 pop bx pop ax retstore_student_num endp ;#存儲學生信息的函數(shù) store_student_information proc push ax push bx push dx mov al,18 mov informationsi,al lea dx,informationsi mov ah,0ah int 21h mov bl,informationsi + 1 ;實際輸入的字符個數(shù) mov al,' ' mov informationsi + bx + 2,al ;將回車換成' ' mov informationsi+
16、19,'$' ;將每個存儲單元的最后一個字節(jié)置為'$'以便輸出 pop dx pop bx pop ax retstore_student_information endp;#存儲學生成績的函數(shù)store_student_grade proc push ax push bx push cx push dx mov bx,0 mov cx,0 mov dx,di deal0: mov ah,1 int 21h cmp al,0dh ;判斷是否為回車 jz deal2 ;是回車 cmp al,'.' ;是否為小數(shù)點 jnz deal1 ;不是小數(shù)點
17、mov bx,cx ;bx指向小數(shù)點處 inc bx ;標記小數(shù)點字符出現(xiàn)在第幾個位置 deal1: push bx mov bx,dx mov gradebx,al pop bx inc cx ;記錄輸入字符的個數(shù) inc dx jmp deal0 deal2: cmp bx,0 jnz deal3 ;有小數(shù)點 ;無小數(shù)點 cmp cx,3 jg gout ;大于100 jz deal4 ;等于100 ;小于100 cmp cx,2 jz deal5 ;輸入數(shù)目為2位數(shù) ;個位數(shù) deal6: ;處理個位數(shù) mov al,gradedi sub al,'0' mov grad
18、edi + 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,gradedi + bx ;將小數(shù)部分處理 sub al,'0' mov gradedi + 6,al cmp bx,4 jz deal4 ;'.'出現(xiàn)在輸入字符的
19、第四位,則輸入的整數(shù)部分為3位數(shù) jg gout ;整數(shù)部分大于3位數(shù) cmp bx,3 jz deal5 ;'.'出現(xiàn)在輸入字符的第三位,則輸入的整數(shù)部分為2位數(shù) jmp deal6 ;否則為個位數(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 di mov dx,0 mov dl,number+2Loop1: ;使用冒泡排序法 mov cx,dx mov di,0 m
20、ov si,0 Loop2: ;先比整數(shù)部分,再比小數(shù)部分 mov al,gradedi + 5 cmp al,gradedi + 12 jg next ;大于,向下個移動 jl swap1 ;小于,交換成績,名字 ;等于,比較小數(shù)部分 mov al,gradedi + 6 cmp al,gradedi + 13 jge next ;大于或等于,向下個移動 jl swap1 ;小于,交換成績,名字swap1: mov bx,siswap11: ;交換學生信息 mov al,informationbx + 2 xchg al,informationbx + 22 mov informationb
21、x + 2,al inc bx cmp al,'$' jnz swap11 push bx mov bx,0swap2: ;交換學生成績 mov al,gradedi + bx xchg al,gradedi + bx + 7 mov gradedi + bx,al inc bx cmp bx,7 jnz swap2 pop bx next: add si,20 add di,7 dec cx jnz Loop2 dec dx jnz Loop1 pop di pop si pop dx pop cx pop bx pop ax retsort endp ;#顯示最后結(jié)果的函數(shù)
22、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中保存學生人數(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 ;大于等于80 ;小于80 cmp al,70 jge F70 ;大于等于70 ;小于70 cmp al
23、,60 jge F60 ;大于等于60 ;小于60 ;處理<60 mov dl,n4 inc dl mov n4,dl Fnext: ;處理平均成績 處理方式:整數(shù)部分*10+小數(shù)部分*10,結(jié)果先除以學生人數(shù),再輸出(輸出整數(shù)時除以10) mov al,gradedi + 5 mov dl,10 mul dl mov dl,gradedi + 6 mov dh,0 add ax,dx add bx,ax jmp F2 F90: ;處理>=90 mov dl,n0 inc dl mov n0,dl jmp Fnext F80: ;處理大于等于80小于90 mov dl,n1 inc
24、 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,7 dec cx jnz F1 ;處理所有學生 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
25、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ù)部分 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
26、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 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;#輸出分數(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中保存學生人數(shù) mov di
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兼職法務(wù)合同范例
- 拆除瀝青設(shè)備合同范例
- 銷售數(shù)控鋸床合同范例
- 圓管購買合同范例
- 物料商合同范例
- 2024年石油鉆采專用設(shè)備項目可行性研究報告
- 2024年中國加彈絲DTY市場調(diào)查研究報告
- 2024年中國內(nèi)螺紋管堵市場調(diào)查研究報告
- 山東青年政治學院《產(chǎn)品服務(wù)系統(tǒng)設(shè)計》2023-2024學年第一學期期末試卷
- 白芍收購合同范例
- 四川省資陽市安岳縣2023-2024年九年級上期期末化學試題
- 2023-2024學年廣東省深圳市福田區(qū)八年級(上)學期期末聯(lián)考數(shù)學試題(含解析)
- 《甲狀腺危象》課件
- 初中道德與法治差異化作業(yè)實踐探究
- 部編版小學道德與法治五年級上冊單元復習課件(全冊)
- 北京市2022-2023學年七年級上學期語文期末試卷(含答案)
- 電纜放線施工方案
- GB/T 43439-2023信息技術(shù)服務(wù)數(shù)字化轉(zhuǎn)型成熟度模型與評估
- 圖書破損或丟失登記表
- 2023-2024年新人教版pep六年級英語上冊試卷全套含答案
- 股靜脈穿刺血標本采集技術(shù)操作規(guī)程及評分標準
評論
0/150
提交評論