匯編語言綜合實驗_第1頁
匯編語言綜合實驗_第2頁
匯編語言綜合實驗_第3頁
匯編語言綜合實驗_第4頁
匯編語言綜合實驗_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上華北科技學院綜合性實 驗 報 告 課程名稱 匯 編 語 言 實驗學期 2017 至 2018 學年 第 1 學期學生所在系部 計算機學院網絡工程系 年級 三年級 專業(yè)班級 網絡B15- 學生姓名 學號 任課教師 實驗成績 計算機學院制 匯 編 語 言課程綜合性實驗報告開課實驗室:基礎實驗室一 日期:2022年4月28日實驗題目學生成績排序一、實驗目的進行匯編語言程序設計應用的綜合性訓練。綜合運用匯編語言循環(huán)程序、子程序、宏指令編程方法,提高匯編語言程序設計能力的應用水平。二、設備與環(huán)境PC兼容機、Windows操作系統(tǒng)、匯編程序masm for windows 201

2、5三、實驗內容 編寫程序,接收從鍵盤輸入某班學生的學號、姓名、成績,對學生的成績進行排序,最后把學號、姓名、學生成績、名次顯示出來。四、實驗結果及分析代碼功能該代碼的功能是實現對已經輸入的學生按成績進行排序,輸入時按學號輸出時按照成績的由小到大輸出,在成績交換位置時成績對應的姓名和學號也會跟隨一起變化使姓名和分數對應顯示。變量的定義緩沖區(qū)和存儲單元的定義這個過程是個關鍵的過程,因為在程序中匯涉及到使用單元空間的單元值,如果不能明確的定義變量和緩沖區(qū),在輸入學生信息,輸出學生信息都不能達到想要的效果,而且在程序中執(zhí)行循環(huán)時也會因為賦值不準確導致程序出現錯誤,而且這種錯誤系統(tǒng)不會提示,這就意味著查

3、找問題很困難,增加了編碼的難度和工作量。宏定義及其使用在進行編碼時為了使代碼量減少,應該適當定義一些宏,此程序定義了 5 個宏,hong1 實現的功能是定義了回車換行因為在對學生成績輸出時會用到換行而且是反復的使用,因此定義回車換行的宏可以減少一定的代碼量。hong1 macro ;-定義回車換行的宏!MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HEndmhong2 定義的功能是提示信息和輸入的功能,這個宏的定義主要用在對學生成績的輸入上,和相關信息的顯示,而且這個宏用到了傳參因為在調用 10 號功能和 9 號功能都能用這一個程序。hong

4、2 macro opr1,opr2 ;-定義輸入輸出!lea dx,opr1mov ah,opr2int 21hendm其中opr1是傳遞的緩沖區(qū)的亞元,opr2是傳遞功能號的亞元。Hong3定義空格的宏,這個宏的定義是為了在學生成績輸出時能顯示的更加美觀一些。hong3 macro ;-定義空格!mov dl,20hmov ah,2int 21hendmhong4定義的清楚回車鍵的宏,因為信息輸入用的是10號功能,在信息輸入結束時是以回車鍵結束的,而且程序中涉及到了信息的轉存,如果將回車鍵也一同轉存到新的存儲單元中,在用2號功能實現對學生信息的顯示時碰到回車鍵,就會出現終止的錯誤,因此在轉存

5、前就先對緩沖區(qū)里的回車鍵進行清空。hong4 macro opr1,opr2 ;-清楚緩沖區(qū)里的回車鍵!mov al,0pr1add al,2mov ah,0mov si,axmov buff1si,0因為定義了姓名、分數、學號三個緩沖區(qū),因此應定義帶有參數的宏,以方便對三個不同的緩沖區(qū)時只需用不同的參數就能實現相同的功能。Hong5定義的轉存的宏,程序中有將緩沖區(qū)里的數據轉存到一個大的存儲單元中,以方便實現成績的比較和最后學生所有信息的輸出,因為姓名、成績、學號都需轉存,而且轉存后還要進行對緩沖區(qū)的內容進行清空,這些都是操作的代碼出了存儲區(qū)和計算單元的個數其他的內容都是相同因此定義這個宏會減

6、少很多代碼的輸入。hong5 macro opr1,opr2,opr3,opr4mov cx,opr1lea si,opr2 ;傳送姓名lea di,opr3add di,opr4cldrep movsbmov cx,opr1mov ax,0lea di,opr3endm宏的引用雖然能夠減少大量的代碼但是在調用宏時應注意對應位置參數的傳遞以免出現錯誤導致程序不能正常運行。其次是在程序不能將程序都用宏調用,如果那樣在讀代碼時就會造成理解困難因為只有變量、緩沖區(qū)和存儲單元再有就是宏。讀者不能明白其中的格式,因此在調用宏時用該保留一個具體的程序段以方便讀者了解具體的代碼格式也方便查找錯誤。功能實現的

7、過程輸入過程用宏定義調用9號功能提示信息“input name”,接著調用10號功能將輸入的姓名存入緩沖區(qū)buff1,這就完成了姓名的輸入,用同樣的方法和調用宏完成分數和學號的輸入分別存入buff2、buff3,這就完成了一個學生信息的輸入,其中要記得將回車鍵清0,然后調用轉存的子程序。再執(zhí)行LOOP循環(huán)完成一定量學生信息的輸入。轉存實現的是將輸入的姓名、分數、學號存入到定義好的足夠長的存儲單元中,再轉存時需要注意單元地址的計算,其中包括首地址的計算和傳遞兩個字符串時之間的間隔,轉存不遜要循環(huán),因為沒輸入一次程序會自動調用轉存的子程序完成轉存的功能,但是在轉存的同時需要注意對緩沖區(qū)的清0的操作

8、因為如果沒有及時的對緩沖區(qū)清0,下一次向緩沖區(qū)里輸入信息時,原有信息將會被覆蓋,如果輸入的字符長度小于上一次輸入字符的長度,那么這次轉存的數據將是剛剛輸入的數據和上一次沒有被覆蓋的數據這就會時輸出錯誤。因此轉存時,關鍵注意的就是地址的計算和對緩沖區(qū)清0的操作。對存儲單元里的分數進行排序,采用的排序的方法是冒泡排序,存儲單元里的數據沒有轉換為十進制的兩位數,因此在執(zhí)行比較時就只能將他看做是十位和個位分別進行比較。我定義的分數的單元三個,因此比較時單元地址的間隔為三,而且是單元地址從0開始,如果十位相等,就對地址加1進行各位的比較,一次進行,然后對滿足條件的單元進行互換,采用xchg偽指令,這時也

9、要執(zhí)行相關數據的姓名和學號,在開始時就餓首先給di、si賦給初值為0,然后和分數的地址單單元一起進行循環(huán),但是這兩個寄存器循環(huán)時相加的值非別是10和3,因為姓名的間隔是10個單元,而學好的間隔是3個單元,在進行循環(huán)時應該注意到計數器cx的保存,因為在執(zhí)行分數的交換時會用到cx這時cx賦給的值是P-1而在進行姓名和學好進行交換時,分別賦給的值是數據的單元間隔就是和此時對的保護就會用到入棧,出棧。但是比較的程序要進行循環(huán)因為冒泡排序只能比較相鄰兩個數字的大小,因此此時會涉及到外循環(huán),就是對計數器的保護,采用入棧出棧的方式。這樣才能保證程序的順利進行。這個子程序主要用到的就是交換的指令代碼如下:MO

10、V AL,SCOREBXxchg al,scorebx+3mov scorebx,almov al,scorebx+1在進行姓名和學好的交換過程中也只用到這段代碼,只是將其中的存儲單元的名和中括號里的寄存器改變成為不一樣的就能夠執(zhí)行了。學生信息的輸出,這段子程序主要用到的就是號功能,雖然號功能每次只能顯示一個字符,但是經過多次的循環(huán)顯示會達到與號功能一樣的效果,這段程序中需要注意的也是地址的計算,只是單純的從存儲單元里顯示出來不需要什么計算地址從開始循環(huán)相應的存儲區(qū)單元的個數即可,程序中還加上了名次,方法比較簡單執(zhí)行循環(huán)每次加用好功能顯示,就能達到想要的結果。(4)排序流程圖交換子程序比較十位

11、比較個位交換分數交換姓名、學號寄存器加間隔大于小于小于(5)程序運行結果圖(6)總結與體會在這次的綜合實驗中,遇到了很多細節(jié)問題,首先就是在進行循環(huán)沒有及時的對計數器進行入棧保存,以至于在輸出時顯示的不是學生的信息而是亂碼,其次就是對寄存器的值沒有能夠正確的把握,因為在循環(huán)中沒有給計數器賦予正確的值則在轉存、比較、輸出時都會出現錯誤,而且這些錯誤不容易發(fā)現,因此在編程時應仔細計算循環(huán)的次數,即計數器的初值。遇到的最大的問題就是對姓名和學號的交換,因為姓名和學號的循環(huán)是基于分數交換的基礎上的,因此在分數交換的同時進行姓名和學號的交換成為了這個程序的關鍵,這里出現的問題也是最不好解決的的,最后終于

12、實現了在分數交換的同時姓名和學好也一切跟著進行了交換。這次試驗我學到了很多的知識,首先就是對書上的一些基礎知識進行了鞏固,指令、偽指令、宏、子程序的運用在程序中都用到了。全面的對學過的知識進行了綜合性的復習。而且在邊學程序時也會鍛煉思維能力,因為很多的地址單元和寄存器的值都是通過計算才能保證程序正常運行的,還有就是培養(yǎng)動腦的能力,因為同樣的功能可以有集中不同的方法,就像分數的比較上,可以先將它們轉化為十進制的兩位數再進行比較,也可以通過一位一位的比較實現對兩位數大小的比較。最后就是為了減少程序中的代碼量。適當的調用宏,既能夠使讀程序的人易于理解,也能方便自己修改??傊?,這次綜合實驗是自己獲益匪

13、淺。教 師 評 價評定項目ABCD評定項目ABCD算法正確操作熟練程序結構合理實驗結果正確功能完善文字流暢、報告規(guī)范其他: 評價教師簽名: 2017 年12月 3日源代碼:DATAS SEGMENT mess0 db 0ah,0dh,'num name score xuehao$' ; mess1 db 0ah,0dh,'input name :$' mess2 db 0ah,0dh,'input score:$' mess3 db 0ah,0dh,'input xuehao:$' mess4 db 'xueshengch

14、engjipaixu$' p equ 3;輸入的人數 buff1 db 10,?,10 dup(0);姓名緩沖區(qū),加$符號以便輸出時使用 buff2 db 3,?,3 dup(0);成績緩沖區(qū) buff3 db 4,?,4 dup(?) sname db p dup(10 dup(0);保存姓名 score db p dup(3 dup(0);保存成績 xuehao db p dup(4 dup(0) sing1 dw 0 sing2 dw 0 sing3 dw 0 count db '1'計數 ;此處輸入數據段代碼 DATAS ENDSSTACKS SEGMENT ;

15、此處輸入堆棧段代碼STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS hong1 macro ;定義回車換行的宏 mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h endm hong2 macro opr1,opr2 ;定義輸入輸出 lea dx,opr1 mov ah,opr2 int 21h endm hong3 macro ;定義空格 mov dl,20h mov ah,2 int 21h endm hong4 macro opr1,opr2 ;清楚緩存區(qū)里的

16、回車鍵 mov al,opr1 add al,2 mov ah,0 mov si,ax mov opr2,0 endm hong5 macro opr1,opr2,opr3,opr4 ;傳送姓名 mov cx,opr1 lea si,opr2 lea di,opr3 add di,opr4 cld rep movsb mov cx,opr1 mov ax,0 lea di,opr3 endm START: MOV AX,DATAS MOV DS,AX mov es,ax mov bx,0; mov cx,0 hong2 mess4,9 hong1 call input;調用子程序1 call

17、bijiao call print mov ah,4ch int 21h ;子程序1,輸入姓名、成績,學號input proc inc bx;輸入次數統(tǒng)計 cmp bx,p;輸入次數>p? ja exit hong2 mess1,9 ;宏調用提示和輸入姓名 lea dx,buff1;顯示提示1 mov ah,10 int 21h mov al,buff1+1;實際輸入個數放入AL add al,2;+2,包含buff1的0,1單元號 mov ah,0 mov si,ax;回車0d所在位置,跟在最后一個字符后 mov buff1si,0;將0d換為0,便于輸出顯示 hong2 mess2,

18、9 ;宏調用提示和輸入分數 hong2 buff2,10 hong4 buff2+1,buff2si ;宏調用清空回車鍵 hong2 mess3,9 ;宏調用提示和輸入學號 hong2 buff3,10 hong4 buff3+1,buff3si ;宏調用清空回車鍵 cmp bx,1 jz let5 add sing1,10 add sing2,3 add sing3,4 let5:call zhuancun jmp input exit: ret input endp ;轉存子程序 zhuancun proc mov cx,10 lea si,buff1+2 ;傳送姓名 lea di,sna

19、me add di,sing1 cld rep movsb mov cx,10 ;將緩存區(qū)清空 mov ax,0 lea di,buff1+2 rep stosb hong5 3,buff2+2,score,sing2 hong5 4,buff3+2,xuehao,sing3 ret zhuancun endp ;比較子程序 bijiao proc mov cx,p loop1:push cx ;保存外循環(huán) mov di,0 mov si,0 mov bx,0 mov cx,p-1 bj1:mov al,scorebx ;比較十位 cmp al,scorebx+3 jle bj2 add bx

20、,3 add si,10 add di,4 dec cx jnz bj1 jmp out1 bj2:jl bj3 ;比較個位 mov al,scorebx+1 cmp al,scorebx+4 jl bj3 add bx,3 add si,10 add di,4 dec cx jnz bj1 jmp out1 bj3:mov al,scorebx ;進行交換兩個數字的位置 xchg al,scorebx+3 mov scorebx,al mov al,scorebx+1 xchg al,scorebx+4 mov scorebx+1,al push si push cx mov cx,10 lp1: mov al,snamesi xchg al,snamesi+10 mov snamesi,al inc si dec cx jnz lp1 pu

溫馨提示

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

最新文檔

評論

0/150

提交評論