《匯編語(yǔ)言》課程設(shè)計(jì)報(bào)告判斷閏年程序.doc
《《匯編語(yǔ)言》課程設(shè)計(jì)報(bào)告判斷閏年程序.doc》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《《匯編語(yǔ)言》課程設(shè)計(jì)報(bào)告判斷閏年程序.doc(11頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
《匯編語(yǔ)言》課程設(shè)計(jì)報(bào)告 題 目: 判斷閏年程序 院 (系): 計(jì)算機(jī)與信息工程學(xué)院 班 級(jí): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 1設(shè)計(jì)主要任務(wù) 通過(guò)完成閏年判別程序設(shè)計(jì)掌握字符輸入及、調(diào)試過(guò)程。 1.1設(shè)計(jì)任務(wù)與目標(biāo) 軟件所實(shí)現(xiàn)的任務(wù)與目標(biāo)主要包括: (1)由鍵盤(pán)輸入任意年份,判斷輸入年份是否在限制區(qū)間2000-9999內(nèi); (2)若程序判別輸入年份為閏年,顯示?,不是閏年顯示△; (3)根據(jù)要求確定解決問(wèn)題的編程方法; (4)畫(huà)出程序框圖、設(shè)計(jì)源程序; (5)在計(jì)算機(jī)上匯編、鏈接所設(shè)計(jì)的程序; (6)按照要求調(diào)試程序,記錄程序運(yùn)行結(jié)果; (7)寫(xiě)出設(shè)計(jì)總結(jié)報(bào)告。 2 設(shè)計(jì)方案 判斷某年是否為閏年具體算法為如果該年份的數(shù)值正整數(shù)若能被400整除,或者不能被100整除,卻能被4整除,則該數(shù)值代表的年份為閏年。判斷結(jié)果的顯示符號(hào)可用ASCII值來(lái)實(shí)現(xiàn)。 流程圖如下: 開(kāi)始 顯示提示信息 輸入年份到BUF緩沖區(qū) CX=[BUF+1],即輸入年份的實(shí)際長(zhǎng)度 將年份數(shù)值轉(zhuǎn)換為ASCII字符 判斷是否為閏年 CF=1 顯示是閏年的信息 結(jié)束 輸出范圍出錯(cuò) 判斷輸入范圍 顯示非閏年信息 4 子程序設(shè)計(jì) 4.1 輸入判斷子程序 該模塊是對(duì)輸入的年份的范圍的判斷,若是輸入不在2000-9999之內(nèi),則顯示錯(cuò)誤Error,若是輸入在范圍內(nèi),則進(jìn)行下面的操作。 4.2數(shù)字轉(zhuǎn)換子程序 將數(shù)字字符串轉(zhuǎn)換成數(shù)字,以便進(jìn)行下面的程序操作。 4.3 判斷閏年子程序 判斷輸入的年份是否為閏年,若是則輸出?,若不是則輸出△,然后退出。 5 調(diào)試 程序調(diào)試主要使用宏匯編程序MASM.EXE、連接程序LINK.EXE、 系統(tǒng)操作界面當(dāng)輸出年份時(shí)顯示結(jié)果 當(dāng)輸入為閏年時(shí)顯示笑臉并返回操作界面: 6 設(shè)計(jì)總結(jié) 通過(guò)這幾天的匯編課程設(shè)計(jì),基本掌握閏年判別程序設(shè)計(jì),首先是根據(jù)題目要求確定思路,然后根據(jù)思路按照題目要求編寫(xiě)相應(yīng)匯編程序,最后用軟件調(diào)試結(jié)果是否正確。 在此次課程設(shè)計(jì)中,雖然課本上也講過(guò)年份的判別,但是比較分散,所以剛開(kāi)始設(shè)計(jì)時(shí)思路不是太清,通過(guò)查閱相關(guān)資料,清楚了程序設(shè)計(jì)的基本框架,進(jìn)而能編寫(xiě)出相應(yīng)程序,設(shè)計(jì)中又一個(gè)難題是最后屏幕顯示的問(wèn)題,通過(guò)查閱相應(yīng)ASCII值,使最后顯示出結(jié)果。 一周的課程設(shè)計(jì)讓我收獲頗多,雖然調(diào)試中遇到不少問(wèn)題,但通過(guò)調(diào)試明白程序中存在的問(wèn)題并改正。通過(guò)本次實(shí)驗(yàn),以后的學(xué)習(xí)奠定了良好的基礎(chǔ),是對(duì)自己綜合能力的一種提高。 7 程序清單 data segment infon db 0dh,0ah, input a year: $ E db 0dh,0ah,Error! $ w dw 0 ;保存年份的數(shù)值,因年份是字符串,需要轉(zhuǎn)換數(shù) buf db 8 ;定義輸入緩沖區(qū) db ? db 8 dup(?) data ends stack segment stack db 200 dup(0) stack ends code segment 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 ;從鍵盤(pán)輸入年份字符串 mov ah,0Ah ;0AH功能調(diào)用從鍵盤(pán)接受字符串到內(nèi)存的輸入緩存區(qū) int 21h mov cl, buf+1 ;把輸入的字符的個(gè)數(shù)保存在cl中 lea di,buf+2 ;把從鍵盤(pán)輸入字符的首地址存放到di中 push ax a0: mov al,[di] cmp al,0dh jz a1 cmp al,9 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 ;調(diào)用datacate子程序 call ifyears ;調(diào)用ifyears子程序 jc a2 ;如果進(jìn)位則跳轉(zhuǎn) 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,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 exit a3: lea dx,e mov ah,9 int 21h exit: mov ah,0 int 16h mov ah,4ch ;返回操作系統(tǒng) int 21h datacate proc near ;用于把表示年份的字符串轉(zhuǎn)換為數(shù)值 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后轉(zhuǎn)換十六進(jìn)制數(shù) mul byte ptr [si] ;計(jì)算ax乘以字符數(shù)字 add w,ax ;把計(jì)算結(jié)果累加,并保存在w中 pop ax ;出棧操作,去除上一次操作后的倍數(shù) mul bl ;乘以bl,計(jì)算當(dāng)前的倍數(shù) dec si ;修改源地址寄存器si的值,使得si指向下一個(gè)字符(即高位) loop p2 ;循環(huán)直到所有字符處理完畢( ret ;子程序返回指令 datacate endp ifyears proc near ;此子程序用來(lái)判斷年份是否為閏年 push bx push cx push dx mov ax,w ;把轉(zhuǎn)換后的年份的數(shù)值存入AX mov cx,ax mov dx,0 ;將dx清零 mov bx,4 ;把4存放到寄存器bx中(除數(shù)) div bx ;除法指令 cmp dx,0 ;將dx的余數(shù)與0進(jìn)行比較,看似否整除 jnz lab1 ;若不相等跳轉(zhuǎn) mov ax,cx ;判斷年份是否位400的整數(shù)倍 mov bx,100 ;將100賦給bx寄存器,做div的源操作數(shù) mov dx,0 div bx cmp dx,0 ;將dx中的余數(shù)與0比較,看似否整除 jnz lab2 mov ax,cx ;判斷年份是否位400的整數(shù)倍 mov bx,400 mov dx,0 div bx cmp dx,0 jz lab2 lab1: clc ;清除進(jìn)位標(biāo)志,即非閏年 jmp lab3 lab2: stc ;設(shè)置進(jìn)位標(biāo)志,即閏年 lab3: pop dx pop cx pop bx ret ;子程序返回指令 ifyears endp code ends end start- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 匯編語(yǔ)言 課程設(shè)計(jì) 報(bào)告 判斷 閏年 程序
鏈接地址:http://www.820124.com/p-6562869.html