匯編語(yǔ)言顯示學(xué)生名次表實(shí)驗(yàn)報(bào)告_第1頁(yè)
匯編語(yǔ)言顯示學(xué)生名次表實(shí)驗(yàn)報(bào)告_第2頁(yè)
匯編語(yǔ)言顯示學(xué)生名次表實(shí)驗(yàn)報(bào)告_第3頁(yè)
匯編語(yǔ)言顯示學(xué)生名次表實(shí)驗(yàn)報(bào)告_第4頁(yè)
匯編語(yǔ)言顯示學(xué)生名次表實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、湖北科技學(xué)院計(jì)算機(jī)學(xué)院 匯編語(yǔ)言課程設(shè)計(jì) 課題題目: 顯示學(xué)生名次表 學(xué)生姓名: 學(xué) 號(hào): 班 級(jí): 2013年 12 月26日一、 實(shí)驗(yàn)?zāi)康倪M(jìn)行匯編語(yǔ)言程序設(shè)計(jì)應(yīng)用的綜合性訓(xùn)練。綜合運(yùn)用匯編語(yǔ)言循環(huán)程序和子程序編程方法,鞏固提高匯編語(yǔ)言程序設(shè)計(jì)能力應(yīng)用水平。二、 設(shè)備與環(huán)境PC兼容機(jī)、Windows操作系統(tǒng)、匯編程序masm for windows 2010三、實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容: 編制一程序,要求接收從鍵盤(pán)輸入的一個(gè)班的學(xué)生成績(jī)和學(xué)號(hào),對(duì)學(xué)生的成績(jī)進(jìn)行排序,再按學(xué)號(hào)順序和學(xué)生名次順序分別把學(xué)生成績(jī)顯示出來(lái)。四、實(shí)驗(yàn)結(jié)果及分析實(shí)驗(yàn)功能:從鍵盤(pán)輸入學(xué)生姓名和成績(jī),按照成績(jī)的高低排名顯示輸出。程序

2、中設(shè)定的名字是英文的,需要小于9位字母,學(xué)生人數(shù)為3個(gè)。程序思路:1、本程序包括一個(gè)主程序和五個(gè)子程序。子程序包括INPUT鍵盤(pán)輸入、COPY數(shù)據(jù)轉(zhuǎn)存、CHANGE十進(jìn)制數(shù)ASCII碼轉(zhuǎn)二進(jìn)制、SORT按成績(jī)排序和PRINT打印班級(jí)名單。2、用變量p控制輸入的學(xué)生的個(gè)數(shù)。本程序中,p=3。3、姓名和成績(jī)輸入分別用DOS中被調(diào)用的10號(hào)功能實(shí)現(xiàn)字符串輸入。在輸入最后字符后,要將回車(chē)符改為0,以便輸出時(shí)直接用9號(hào)功能顯示姓名和成績(jī)。4、用buffer1和buffer2作為鍵入的姓名和成績(jī)的緩存區(qū),然后將所有人名和成績(jī)用串傳送指令轉(zhuǎn)到smane和score1中保存,打印輸出是可以使用。5、將scor

3、e1中成績(jī)的十進(jìn)制數(shù)ASCII碼轉(zhuǎn)換為二進(jìn)制數(shù)score2. 6、將score2中的成績(jī)排序,同時(shí)將保存在mingci中的輸入次序號(hào)也一換,以次序號(hào)作為排序指針,在smane和score1中查找相應(yīng)的人名和成績(jī)。7、打印排序名單時(shí),從mingci中取出次序號(hào)作為位移量,到smane和score1中取出姓名和對(duì)應(yīng)的成績(jī)用9號(hào)功能顯示。排序后mingci中先取出的次序號(hào)一定是成績(jī)最高的人的,其他類(lèi)推。程序代碼、代碼解析及流程圖主程序: 流程圖:START:main proc farMOV AX,DATAS MOV DS,AX mov es,ax mov bx,0 mov cx,0 call inp

4、ut call sort call print mov ah,4ch int 21hmain endp數(shù)據(jù)段定義:DATAS SEGMENT infor0 db 0ah,0dh,'sort= $' infor1 db 0ah,0dh,'input name: $' infor2 db 0ah,0dh,'input score:$' n equ 15 ;姓名長(zhǎng)度 m equ 4 ;成績(jī)長(zhǎng)度(3位+回車(chē)) p equ 4 ;輸入的人數(shù)(4個(gè) q equ 3 ;成績(jī)位數(shù) buff1 db n,?,n dup(0),'$' ;姓名緩沖區(qū),

5、加$以便輸出 buff2 db n,?,n dup(0),'$' ;成績(jī)緩沖區(qū) sname db p dup(n+1 dup(0) ;保存姓名 score1 dw p dup(m+1 dup(0) ;保存成績(jī) score2 dw p dup(m+1 dup(0) mingci db p dup(0) ;名次 x dw ? sign1 dw 0 sign2 dw 0 cont db '1' ;計(jì)數(shù)DATAS ENDS子程序(INPUT) 1:輸入姓名、成績(jī)input proc inc bx ;輸入次數(shù)統(tǒng)計(jì) cmp bx,p ;輸入次數(shù) ja exit lea dx

6、,infor1 ;顯示提示1 mov ah,9 int 21h lea dx,buff1 ;輸入姓名 mov ah,10 int 21h mov al,buff1+1 ;實(shí)際輸入個(gè)數(shù),al add al,2 ;+2,包含buffer1的0,1號(hào)單元 mov ah,0 mov si,ax ;回車(chē)od所在位置,跟在最后一個(gè)字符后 mov buff1si,0 ;將od換為0,便于輸出顯示 lea dx,infor2 ;顯示提示2 mov ah,9 int 21h lea dx,buff2 ;輸入成績(jī) mov ah,10 int 21h mov al,buff2+1 ;實(shí)際輸入個(gè)數(shù) add al,2

7、;個(gè)數(shù)+2,包含0,1單元找到od mov ah,0 mov si,ax mov buff2si,0 ;將od換為0,便于輸出顯示 mov mingcibx-1,bl ;bx為輸入次數(shù),保存輸入次序 cmp bx,1 ;第一次輸入轉(zhuǎn)let1 jz let1 add sign1,n+1 ;姓名間隔為n+1 add sign2,q ;成績(jī)間隔為qlet1: call copy ;子程序嵌套 jmp inputexit: retinput endp流程圖: 子程序2(COPY):數(shù)據(jù)轉(zhuǎn)存copy proc mov cx,n+1 ;姓名長(zhǎng)度+1(包含$) lea si,buff1+2 lea di,s

8、name ;姓名傳送到sname add di,sign1 ;加上間隔值 cld rep movsb mov cx,n mov ax,'$' ;用$覆蓋姓名區(qū),清除已輸入的姓名 lea di,buff1+2 rep stosb mov cx,m+1 ;成績(jī)位數(shù)+1(包含s) lea si,buff2+2 lea di,score1 ;成績(jī)傳送到scorel add di,sign2 ;加上間隔值 cld rep movsb lea si,buff2+2 mov di,sign2 call change ;二進(jìn)制成績(jī),scorel2 retcopy endp流程圖:子程序3(CH

9、ANGE):十進(jìn)制數(shù)ASCII碼二進(jìn)制change proc mov x,0 mov cx,si-1 ;成績(jī)的位數(shù),cx and cx,000fh ;保留低4位rept2: mov al,si ;按位取出成績(jī) cmp al,30h ;是否在09之間 jl exit1 cmp al,39h jg exit1 and ax,000fh ;去掉ASCII碼 xchg ax,x mov dx,10 ;將ax中前一次形成的數(shù)擴(kuò)大10倍 mul dx add x,ax ;保存到x inc si loop rept2 mov ax,x ;按十進(jìn)制形成的成績(jī)以二進(jìn)制保存 mov score2di,ax ;二進(jìn)

10、制成績(jī)送入score2 mov x,0 add sign2,2 ;下一個(gè)成績(jī)單exit1: retchange endp 流程圖 子程序4(SPORT):按成績(jī)排序 sort proc mov cx,p ;數(shù)組長(zhǎng)度 dec cxloop1:push cx ;保存外循環(huán)次數(shù) mov bx,0 mov si,0loop2:mov ax,score2bx cmp ax,score2bx+m+1 ;m+1=5 jge next ;降序 xchg ax,score2bx+m+1;交換成績(jī) mov score2bx,ax mov al,mingcisi xchg al,mingcisi+1 ;交換成績(jī) m

11、ov mingcisi,alnext:add bx,m+1 ;下一個(gè)成績(jī) inc si loop loop2 pop cx ;恢復(fù)外循環(huán)次數(shù) loop loop1 ret sort endp 子程序子程序5(PRINT):打印排序名單 print proc lea dx,infor0 ;顯示結(jié)果提示 mov ah,9 int 21h mov cx,p mov bx,0 mov ax,0 mov di,0rept3:mov dl,0ah ;回車(chē)換行mov ah,2int 21hmov dl,0dhint 21hmov dl,cont ;顯示名次序號(hào)mov ah,2int 21hinc contm

12、ov dl,0ah ;回車(chē)換行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov al,mingcidi ;取名次dec al ;位置-1,因?yàn)榈刂窂?開(kāi)始mov bl,9 ;姓名位置=al×9(包含$)mul bllea dx,snameadd dx,ax ;偏移地址+姓名位移量mov ah,9 ;顯示名字int 21hmov dl,0ah ;回車(chē)換行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov bx,0mov al,mingcidi ;取名次dec al ;地址從0開(kāi)始mov bl,5 ;成績(jī)位移量=a

13、l×5(包含$)mul bllea dx,score1add dx,ax ;顯示成績(jī)mov ah,9int 21hinc diloop rept3retprint endpcodes endsEND START 流程圖運(yùn)行結(jié)果:實(shí)驗(yàn)體會(huì):在復(fù)雜的程序設(shè)計(jì)中,采用模塊化結(jié)構(gòu)可以劃分功能、分界程序,使得程序有復(fù)雜變簡(jiǎn)單,變清晰。主程序和子程序之間嵌套使用,使得寫(xiě)代碼時(shí)思路更清楚明白,讀代碼時(shí)方便快捷清晰明了。這點(diǎn)跟高級(jí)編程語(yǔ)言類(lèi)似。而此程序中變量p可以跟蹤并控制輸入的人數(shù)、輸名字要預(yù)留緩存區(qū)、十進(jìn)制碼要和二進(jìn)制碼間相互轉(zhuǎn)換,這些又體現(xiàn)了編程低級(jí)語(yǔ)言的特點(diǎn)。學(xué)習(xí)匯編語(yǔ)言,重要的事掌握如何通

14、過(guò)匯編指令和程序來(lái)控制計(jì)算機(jī)各個(gè)組成部件工作,完成一系列任務(wù)。因此,學(xué)習(xí)匯編用語(yǔ)言與學(xué)習(xí)高級(jí)語(yǔ)言的不同之處是要學(xué)習(xí)如何深入到計(jì)算機(jī)的內(nèi)部進(jìn)行控制。通過(guò)這次實(shí)驗(yàn),加深了我對(duì)匯編語(yǔ)言的理解。每一步的輸入、存儲(chǔ)、轉(zhuǎn)換、輸出,都需要一條條的匯編指令執(zhí)行。而且每一步都有自己的源和目標(biāo)的地址,每個(gè)數(shù)據(jù)都有自己的存儲(chǔ)空間和地址,我們可以很清晰的“跟蹤”每一個(gè)數(shù)據(jù)的變化和地址的轉(zhuǎn)移。程序:DATA SEGMENT infor0 db 0ah,0dh,'sort= $' infor1 db 0ah,0dh,'input name: $' infor2 db 0ah,0dh,

15、9;input score:$' n equ 15 ;姓名長(zhǎng)度 m equ 4 ;成績(jī)長(zhǎng)度(3位+回車(chē)) p equ 4 ;輸入的人數(shù)(4個(gè) q equ 3 ;成績(jī)位數(shù) buff1 db n,?,n dup(0),'$' ;姓名緩沖區(qū),加$以便輸出 buff2 db m,?,m dup(0),'$' ;成績(jī)緩沖區(qū) sname db p dup(n+1 dup(0) ;保存姓名 score1 dw p dup(m+1 dup(0) ;保存成績(jī) score2 dw p dup(m+1 dup(0) mingci db p dup(0) ;名次 x dw ?

16、sign1 dw 0 sign2 dw 0 cont db '1' ;計(jì)數(shù)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:main proc far MOV AX,DATA MOV DS,AX mov es,ax mov bx,0 mov cx,0 call input call sort call print mov ah,4ch int 21hmain endp ;子程序1,輸入姓名、成績(jī)input proc inc bx ;輸入次數(shù)統(tǒng)計(jì) cmp bx,p ;輸入次數(shù) ja exit lea dx,infor1 ;顯示提示

17、1 mov ah,9 int 21h lea dx,buff1 ;輸入姓名 mov ah,10 int 21h mov al,buff1+1 ;實(shí)際輸入個(gè)數(shù),al add al,2 ;+2,包含buffer1的0,1號(hào)單元 mov ah,0 mov si,ax ;回車(chē)od所在位置,跟在最后一個(gè)字符后 mov buff1si,0 ;將od換為0,便于輸出顯示 lea dx,infor2 ;顯示提示2 mov ah,9 int 21h lea dx,buff2 ;輸入成績(jī) mov ah,10 int 21h mov al,buff2+1 ;實(shí)際輸入個(gè)數(shù) add al,2 ;個(gè)數(shù)+2,包含0,1單元

18、找到od mov ah,0 mov si,ax mov buff2si,0 ;將od換為0,便于輸出顯示 mov mingcibx-1,bl ;bx為輸入次數(shù),保存輸入次序 cmp bx,1 ;第一次輸入轉(zhuǎn)let1 jz let1 add sign1,n+1 ;姓名間隔為n+1 add sign2,q ;成績(jī)間隔為qlet1: call copy ;子程序嵌套 jmp inputexit: retinput endp ;子程序2,數(shù)據(jù)轉(zhuǎn)存copy proc mov cx,n+1 ;姓名長(zhǎng)度+1(包含$ lea si,buff1+2 lea di,sname ;姓名傳送到sname add di

19、,sign1 ;加上間隔值 cld rep movsb mov cx,n mov ax,'$' ;用$覆蓋姓名區(qū),清除已輸入的姓名 lea di,buff1+2 rep stosb mov cx,m+1 ;成績(jī)位數(shù)+1(包含s lea si,buff2+2 lea di,score1 ;成績(jī)傳送到scorel add di,sign2 ;加上間隔值 cld rep movsb lea si,buff2+2 mov di,sign2 call change ;二進(jìn)制成績(jī),scorel2 retcopy endp ;子程序3,十進(jìn)制數(shù)ASCII碼二進(jìn)制change proc mov

20、 x,0 mov cx,si-1 ;成績(jī)的位數(shù),cx and cx,000fh ;保留低4位rept2: mov al,si ;按位取出成績(jī) cmp al,30h ;是否在09之間 jl exit1 cmp al,39h jg exit1 and ax,000fh ;去掉ASCII碼 xchg ax,x mov dx,10 ;將ax中前一次形成的數(shù)擴(kuò)大10倍 mul dx add x,ax ;保存到x inc si loop rept2 mov ax,x ;按十進(jìn)制形成的成績(jī)以二進(jìn)制保存 mov score2di,ax ;二進(jìn)制成績(jī)送入score2 mov x,0 add sign2,2 ;下一個(gè)成績(jī)單元 exit1: ret change endp ;子程序4,按成績(jī)排序 sort proc mov cx,p ;數(shù)組長(zhǎng)度 dec cxloop1:push cx ;保存外循環(huán)次數(shù) mov bx,0 mov si,0loop2:mov ax,score2bx cmp ax,score2bx+m+1 ;m+1=5 jge next ;降序 xchg ax,score2bx+m+1 ;交換成績(jī) mov score2bx,ax mov al,mingcisi xchg al,mingcisi+1 ;交換成績(jī) mov m

溫馨提示

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

評(píng)論

0/150

提交評(píng)論