《匯編 判斷閏年 課程設計報告.doc》由會員分享,可在線閱讀,更多相關《匯編 判斷閏年 課程設計報告.doc(17頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、
課程設計說明書
題目: 判斷閏年
院 系: 計算機科學與工程學院
專業(yè)班級:
學 號:
學生姓名:
指導教師:
2010 年 12 月 30 日
安徽理工大學課程設計(論文)任務書
計算機科學與工程學院 硬件 教研室
學 號
學生姓名
專業(yè)
2、(班級)
設
計
題
目
題目一:判斷閏年√
題目二: 簡單計算器
題目三: 代碼轉換程序
題目四:字符圖形程序
題目五: 學生成績管理
題目六: 打字練習 (注:請在自己選做的題目后打√)
設
計
技
術
參
數(shù)
1. 熟悉匯編指令、宏匯編語言的編程方法
2. BIOS中斷調(diào)用、系統(tǒng)功能中斷調(diào)用方法
3. 磁盤文件、及文件內(nèi)容操作
設
計
要
求
題目的選擇是根據(jù)匯編語言的特點主要針對系統(tǒng)內(nèi)部的一些中斷調(diào)用、系統(tǒng)功能調(diào)用、系統(tǒng)數(shù)據(jù)處理、文件數(shù)據(jù)處理而設計的,是對所學課程知識較為系統(tǒng)的應用。
由于匯編語言編程相對其他語言編
3、程比較復雜,因此,在設計上應把重點放在程序的功能實現(xiàn)上,不要太在意程序的結構和顯示界面的設計。不要局限于題目所規(guī)定的要求,可以靈活裁減,設計出功能更完善的程序。
另外,也可以自己設計題目,同時,提出詳細的功能描述,經(jīng)指導老師審查同意后也可作為課程設計的題目。
工
作
量
1. 完成所選題目的軟件設計;
2. 課程設計說明書1000字(不包括程序源代碼)左右。
工
作
計
劃
第1次熟悉軟件環(huán)境。第2次繪制程序流程圖。第3次用編寫程序。
第4次用調(diào)試運行程序。第5次編寫課程設計說明書
參
考
資
料
1.李敬兆 8086/8088和arm核匯編語言程序設計
4、中國科技大學出版社
2.沈美明,溫冬嬋 編著IBM—PC匯編語言程序設計(第二版) 清華大學出版社出版
3. 沈美明,溫冬嬋,張赤紅 編著IBM—PC 匯編語言程序設計實驗教程 清華大學出版社出版
指導教師簽字
教研室主任簽字
2010年 12月 17 日
安徽理工大學課程設計(論文)成績評定表
指導教師評語:
成績:
指導教師:
年
5、 月 日
摘要
本程序是用匯編語言編寫的簡單的判斷閏年的小程序。在運行后,屏幕會提示輸入年份,輸入后程序會自動判斷輸入的年份是否為閏年。判斷某年為閏年的匯編語言表達式為:(((AX) MOD 4 EQ 0) AND ((AX) MOD 100 EQ 0)) OR ((AX) MOD 400 EQ 0)其中,(AX)中存放的是從鍵盤輸入的年份值。在本程序運行后,只要輸入年份就能判斷是否為閏年。完成的主要功能1、在屏幕上顯示提示信息,輸入年份。2、判斷輸入的年份是否為閏年。3、判斷完后返回。
關鍵詞: AX,BUF,CALL,DATACATE,IFYEARS
目錄
6、1設計目的 1
2概要設計 2
2.1 系統(tǒng)總體分析 2
2.2 主模塊框圖及說明 2
3 詳細設計 3
3.1 主模塊及子模塊說明 3
3.2 各模塊詳細設計 3
4.程序調(diào)試 7
4.1 運行界面分析 7
4.2 算法的分析 7
4.3 調(diào)試過程及分析 8
5心得體會 9
5.1 設計體會 9
5.2 系統(tǒng)改進 9
參考文獻 10
I
安徽理工大學課程設計(論文)
1設計目的
本次課程設計是關于判斷閏年的程序,既輸入具體的年份,輸出本年是否為閏年的提示信息,然后退出此程序。
本次課程設計的目的主要是將課堂上所學的知識學以致用,通過程序的制作過
7、程學習課外的新知識,并加強加深對舊知識的理解與掌握。
2概要設計
2.1 系統(tǒng)總體分析
總體設計思想本程序是用匯編語言編寫的簡單的判斷閏年的小程序。在運行后,屏幕會提示輸入年份,輸入后程序會自動判斷輸入的年份是否為閏年。判斷某年為閏年的匯編語言表達式為:(((AX) MOD 4 EQ 0) AND ((AX) MOD 100 EQ 0)) OR ((AX) MOD 400 EQ 0)其中,(AX)中存放的是從鍵盤輸入的年份值。在本程序運行后,只要輸入年份就能判斷是否為閏年。完成的主要功能1、在屏幕上顯示提示信息,輸入年份。2、判斷輸入的年份是否為閏年。3、判斷完后返回。
2.2 主
8、模塊框圖及說明
主模塊框圖如圖2-1
圖2-1
本框圖列出了此次課程設計的總流程,顯示信息,輸入數(shù)據(jù),判斷格式,判斷閏年和結束程序??陀^顯示了設計的順序結構,循環(huán)結構及分支結構。
3 詳細設計
3.1 主模塊及子模塊說明
判斷輸入模塊:
模塊是對輸入的年份的格式的判斷,若是錯誤則退出本程序,正確則進行下面的操作。
字符串轉換格式模塊:
此模塊是將數(shù)字字符串轉換成數(shù)字,以便進行下面的模塊。
判斷閏年模塊:
此模塊是判斷輸入的年份是否為閏年,若是則輸出“This is a leap year!”,若不是則輸出“This is not a leap year!”,然后退
9、出。
3.2 各模塊詳細設計
定義數(shù)據(jù)段,將輸入的數(shù)據(jù)放到buf中。
data segment ;定義數(shù)據(jù)段
infon db 0dh,0ah,Please input a year: $
i db 0dh,0ah,quit"q" $
Y db 0dh,0ah,This is a leap year! $
N db 0dh,0ah,This is not a leap year! $
e db 0dh,0ah,no year! $
w dw 0
buf db 8
db ?
db
10、8 dup(?)
data ends
將地址放到al中,然后取出字符串里面的每一個字符與回車鍵比較相等則跳轉到a5,不等與‘9’比較,比‘9’大跳轉到a0,不等與‘0’比較,比‘0’小,跳轉,否則指向下一個字符。
zm:
mov al,[di]
cmp al,0dh
jz a5
cmp al,9
jg a0
cmp al,0
jl a0
inc di
jmp zm
將zm跳轉的字符串放到a5中通過 datacate和ifyears兩個子程序 檢驗其是否為閏
11、年,是(CF=1)執(zhí)行a1,否(CF=0)執(zhí)行a2,然后跳轉到結束段。
a5:
call datacate
call ifyears
jnc a2 ;有進位
jc a1 ;無進位
a1: lea dx,y
a2: lea dx,n
輸出“q”,執(zhí)行退出功能,結束本實驗。
exit:
mov ah,0
int 16h
cmp ah,71h
12、 mov ah,4ch
int 21h
ret
datacate子程序將字符串轉換為數(shù)字存到w變量中。
datacate proc near ;用于把表示年份的字符串轉換為數(shù)值
push cx; ;進棧操作,保存cx,即字符個數(shù)
dec cx ;讓cx寄存器自減1
lea si,buf+2 ;把字符串的首地址保存在源地址寄存器SI中
13、
tt1:
inc si ;si寄存器中內(nèi)容增1
loop tt1 ;loop是循環(huán)語句
pop cx ;出棧操作,與55行進棧操作相呼應
mov dh,30h
mov bl,10
mov ax,1
l1:
push ax ;入棧操作,
sub byte ptr [si],dh ;由于字符是ASC
14、II碼表示的,因此減去30H后即可轉換為十六進制數(shù)
mul byte ptr [si] ;計算ax乘以字符數(shù)字
add w,ax ;把計算結果累加,并保存在w中
pop ax ;出棧操作,去除上一次操作后的倍數(shù)
mul bl ;乘以bl,計算當前的倍數(shù)
dec si ;修改源地址寄存器si的值
loop l1
15、 ;循環(huán)直到所有字符處理完畢
ret ;子程序返回指令
datacate endp
ifyears子程序是判斷閏年的模塊,將數(shù)據(jù)與“4”相除,若dx不為“0”跳轉到la1,令CF=1否與“100”,相除,若dx不為“0”跳轉到la2,令CF=0否與“400” 相除,若dx為“0”跳轉到la2,令CF=1否則CF=0
ifyears proc near ;此子程序用來判斷年份是否為閏年
push bx ;將寄存器實行入棧操作是為了保存寄存器狀態(tài)
16、 push cx
push dx
mov ax,w ;把轉換后的年份的數(shù)值存入AX
mov cx,ax ;把AX中存儲的年份的數(shù)值存入CX,作用是復制一個年份數(shù)值,
mov dx,0 ;把0存放到寄存器dx中
mov bx,4 ;把4存放到寄存器bx中(除數(shù))
div bx ;除法指令
cmp dx,0
17、 ;將dx中的余數(shù)與0進行比較,看似否整除
jnz lab1 ;JNZ用來判斷比較的結果,如果有不等的數(shù)據(jù)則跳轉。(zf=1則轉移)
mov ax,cx ;將前面復制到cx寄存器中的年份的數(shù)值傳給ax
mov bx,100 ;將100賦給bx寄存器,做div的源操作數(shù)
mov dx,0
div bx
cmp dx,0 ;將dx中的余數(shù)與0進行比較,
18、看似否整除
jnz lab2 ;JNZ用來判斷比較的結果,如果有不等的數(shù)據(jù)則跳轉。(zf=1則轉移)
;判斷年份是否位400的整數(shù)倍
mov ax,cx
mov bx,400
mov dx,0
div bx
cmp dx,0
jz lab2
lab1:
clc ;清除進位標志,即非閏年(進位標志用于標志
19、是否為閏年)
jmp lab3 ;jmp無條件轉移
lab2: stc ;設置進位標志,即閏年
lab3: pop dx ;出棧操作,寄存器狀態(tài)。
pop cx
pop bx
ret ;子程序返回指令
ifyears endp
4.程序調(diào)試
4.1 運行界面分析
初始界面:如圖4-1
圖4-1
按照提示輸入年份如2004按回
20、車執(zhí)行程序,界面如圖4-2
圖4-2
顯示“This is a leap year!”若不是閏年則顯示,如圖4-3
圖4-3
若輸入錯誤則顯示如圖4-4
圖4-4
最后按提示輸入“q”退出本程序。
4.2算法的分析
本程序主要是將各個模塊組合來完成一個目標及判斷閏年。通過主程序的調(diào)集子程序,將各個子程序的功能整合起來,完成實驗目的。
4.3 調(diào)試過程及分析
(1)此程序中隊buf的地址地存放了解不夠,它是從第二位開始的,在編譯過程中,使顯示總是錯誤。
(2)本程序用了很多的跳轉,如:jz、jg、jl等,使用時要注意防止它們跳轉的格式,使用范圍,如:
21、jg、jl它們是帶符號位比較轉移指令。
5心得體會
5.1 設計體會
將近一周的課程設計,使我了解了匯編語言的基本的編程,雖然這次設計的只是一個小程序,但是這其間我還是學到了不少東西。在這次課程設計的過程,我得到來自老師以及同學們的幫助和鼓勵,致使最后圓滿完成預期任務。
在設計過程中在做這個課程設計過程中,我深深感受到自己所掌握知識還是不足,已掌握也不牢固是遇到的一些棘手的問題不能解決,比如,buf地址的移動,年份的字符串轉換為數(shù)值,判斷閏年的語法實現(xiàn)等問題,但是,我通過詢問同學,以及查詢資料最終獲得了解決,由此我們深刻體會到,只有在實際編程我們才能認識到自己的不足,才能進而進行彌補來
22、使自己的編程水平有所提高。這次課程設計也加深了對匯編語言這門課的認識,匯編語言課程主要是研究軟件到硬件的程序設計問題,它是計算機能夠提供給用戶使用的最快而又最有效的用語言,也是能夠利用計算機所有硬件特性并直接控制硬件的唯一語言。并且通過本次課程設計,我的思維能力、綜合應用能力和專業(yè)素質(zhì)得到提高。
本程序雖然已經(jīng)完成了課程設計的需求,但是就應用上來說還是不完整的。由于時間倉促,故只提出一些改進的思想。最后,感謝老師,以及同學們對我的幫助。
5.2 系統(tǒng)改進
由于時間比較緊,對程序的設計還不夠完美,只是設計出了程序的大體功能。對于界面還有待繼續(xù)設計。在以后完善程序的過程中,可以加上運行一次程
23、序多次判斷閏年等功能,此功能可通過利用選擇語句來判斷程序是否繼續(xù)執(zhí)行跳轉來重新進行本程序,并且系統(tǒng)還有很多地方需要去改善,使其更為簡潔易懂。
參考文獻
[1] 李敬兆, 8086/8088和arm核匯編語言程序設計 中國科技大學出版社
[2] 陳夠喜等著,微機原理應用實驗教程. 北京:人民郵電出版社,2006.
[3] 劉全忠,匯編語言實用程序.天津:天津大學出版社,1991.6.
[4] 劉樂善,微型計算機接口技術及應用.武漢:華中科技大學出版社,2004.
[5] 譚硫安 張雪蘭,windows匯編語言程序設計教程:電子工業(yè)大學出版社,2005.4
[6] 張光長,匯編語言程序設計:北京大學出版社,2009.7
[7] 沈美明,溫冬嬋 編著IBM—PC匯編語言程序設計(第二版) 清華大學出版社
[8] 周荷琴,微型計算機與接口技術.合肥:中國科學技術大學出版社,2004.12.
-10-