《匯編語言》課程設計報告判斷閏年程序(共11頁)_第1頁
《匯編語言》課程設計報告判斷閏年程序(共11頁)_第2頁
《匯編語言》課程設計報告判斷閏年程序(共11頁)_第3頁
《匯編語言》課程設計報告判斷閏年程序(共11頁)_第4頁
《匯編語言》課程設計報告判斷閏年程序(共11頁)_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選優質文檔-傾情為你奉上匯編語言課程設計報告 題 目: 判斷閏年程序 院 (系): 計算機與信息工程學院 班 級: 姓 名: 學 號: 指導教師: 1設計主要任務通過完成閏年判別程序設計掌握字符輸入及、調試過程。1.1設計任務與目標軟件所實現的任務與目標主要包括:(1)由鍵盤輸入任意年份,判斷輸入年份是否在限制區間2000-9999內;(2)若程序判別輸入年份為閏年,顯示,不是閏年顯示;(3)根據要求確定解決問題的編程方法;(4)畫出程序框圖、設計源程序;(5)在計算機上匯編、鏈接所設計的程序;(6)按照要求調試程序,記錄程序運行結果;(7)寫出設計總結報告。2 設計方案判斷某年是否為閏年具

2、體算法為如果該年份的數值正整數若能被400整除,或者不能被100整除,卻能被4整除,則該數值代表的年份為閏年。判斷結果的顯示符號可用值來實現。流程圖如下:開始顯示提示信息輸入年份到BUF緩沖區CX=BUF+1,即輸入年份的實際長度將年份數值轉換為ASCII字符判斷是否為閏年CF=1顯示是閏年的信息結束輸出范圍出錯判斷輸入范圍顯示非閏年信息4 子程序設計4.1 輸入判斷子程序該模塊是對輸入的年份的范圍的判斷,若是輸入不在2000-9999之內,則顯示錯誤Error,若是輸入在范圍內,則進行下面的操作。4.2數字轉換子程序將數字字符串轉換成數字,以便進行下面的程序操作。4.3 判斷閏年子程序判斷輸

3、入的年份是否為閏年,若是則輸出,若不是則輸出,然后退出。5 調試程序調試主要使用宏匯編程序MASM.EXE、連接程序LINK.EXE、系統操作界面當輸出年份時顯示結果當輸入為閏年時顯示笑臉并返回操作界面:6 設計總結通過這幾天的匯編課程設計,基本掌握閏年判別程序設計,首先是根據題目要求確定思路,然后根據思路按照題目要求編寫相應匯編程序,最后用軟件調試結果是否正確。在此次課程設計中,雖然課本上也講過年份的判別,但是比較分散,所以剛開始設計時思路不是太清,通過查閱相關資料,清楚了程序設計的基本框架,進而能編寫出相應程序,設計中又一個難題是最后屏幕顯示的問題,通過查閱相應ASCII值,使最后顯示出結

4、果。 一周的課程設計讓我收獲頗多,雖然調試中遇到不少問題,但通過調試明白程序中存在的問題并改正。通過本次實驗,以后的學習奠定了良好的基礎,是對自己綜合能力的一種提高。7 程序清單data segment infon db 0dh,0ah,' input a year: $' E db 0dh,0ah,'Error! $' w dw 0 ;保存年份的數值,因年份是字符串,需要轉換數 buf db 8 ;定義輸入緩沖區 db ? db 8 dup(?)data endsstack segment stack db 200 dup(0)stack endscode s

5、egment assume ds:data,ss:stack,cs:code start:mov ax,data mov ds,ax lea dx,infon ;在屏幕上顯示提示信息 mov ah,9;顯示字符串 int 21h lea dx,buf ;從鍵盤輸入年份字符串 mov ah,0Ah ;0AH功能調用從鍵盤接受字符串到內存的輸入緩存區 int 21h mov cl, buf+1 ;把輸入的字符的個數保存在cl中 lea di,buf+2 ;把從鍵盤輸入字符的首地址存放到di中 push ax a0: mov al,di cmp al,0dh jz a1 cmp al,'9&

6、#39; jg a3 cmp al,'2' jl a3 inc di a00: mov al,di cmp al,0dh jz a1 cmp al,'9' jg a3 cmp al,'0' jl a3 inc di jmp a00 a1: pop ax call datacate ;調用datacate子程序 call ifyears ;調用ifyears子程序 jc a2 ;如果進位則跳轉 sub AX,AX ;輸出不是閏年,顯示三角形 push AX mov AH,0FH int 10h mov AH,0 mov AL,2 int 10h m

7、ov CX,1 mov DX,0 MOV AH,2 int 10H mov AL,30 mov AH,0AH int 10H mov ah,9 int 21h jmp exit a2: sub AX,AX ;輸出是閏年顯示笑臉 push AX mov AH,0FH int 10h mov AH,0 mov AL,2 int 10h mov CX,1 mov DX,0 MOV AH,2 int 10H mov AL,2 mov AH,0AH int 10H mov ah,9 int 21h call exita3: lea dx,e mov ah,9 int 21h exit: mov ah,0

8、 int 16h mov ah,4ch ;返回操作系統 int 21hdatacate proc near ;用于把表示年份的字符串轉換為數值 push cx; dec cx ;讓cx寄存器自減1 lea si,buf+2 ;把字符串的首地址保存在源地址寄存器SI中讓si指向字符串的最低位 p1: inc si loop p1 pop cx mov dh,30h mov bl,10 mov ax,1 p2: push ax sub byte ptr si,dh;ASCII碼字符,減去30H后轉換十六進制數 mul byte ptr si ;計算ax乘以字符數字 add w,ax ;把計算結果累

9、加,并保存在w中 pop ax ;出棧操作,去除上一次操作后的倍數 mul bl ;乘以bl,計算當前的倍數 dec si ;修改源地址寄存器si的值,使得si指向下一個字符(即高位) loop p2 ;循環直到所有字符處理完畢( ret ;子程序返回指令datacate endpifyears proc near ;此子程序用來判斷年份是否為閏年 push bx push cx push dx mov ax,w ;把轉換后的年份的數值存入AX mov cx,ax mov dx,0 ;將dx清零 mov bx,4 ;把4存放到寄存器bx中(除數) div bx ;除法指令 cmp dx,0 ;將dx的余數與0進行比較,看似否整除 jnz lab1 ;若不相等跳轉 mov ax,cx ;判斷年份是否位400的整數倍 mov bx,100 ;將100賦給bx寄存器,做div的源操作數 mov dx,0 div bx cmp dx,0 ;將dx中的余數與0比較,看似否整除 jnz lab2 mov ax,cx ;判斷年份是否位400的整數倍 mov bx,400 mov dx,0 div b

溫馨提示

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

評論

0/150

提交評論