版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、文檔來源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持閏年判斷主要代碼Getrightday proc near ;此子程序用來判斷年份是否為閏年push bx ;保存寄存器狀態(tài)push cxpush dxmov si, offset wmov ax,Yearmov cx,ax ;把轉(zhuǎn)換后的年份的數(shù)值存入cxmov dx,0 ;計(jì)算年份是否為 4的整數(shù)倍mov bx,4div bxmov b, dx ;把此刻的余數(shù)賦給b,便于后面天數(shù)計(jì)算cmp dx,0jnz lab1 ;不能被4整除,不為閏年mov ax,cx ;接著判斷年份是否為100的倍數(shù)mov bx ,100div bxmov
2、cc,dx ;把此刻的余數(shù)賦給cc,便于后面天數(shù)計(jì)算cmp dx,0jnz lab2 ;不為100的倍數(shù),則為閏年mov ax,cx ;再判斷是否為400的倍數(shù)mov bx,400div bxmov d,dx ;把此刻的余數(shù)賦給d,便于后面天數(shù)計(jì)算cmp dx,0jz lab2 ;為400的倍數(shù),則為閏年閏年判斷流程圖蔡勒(Zeller)公式主要代碼dec yearmov ax,yearmov cx,ax ; year 自減 1 再存入 cxmov dx,0mov bl ,4div bxadd cx,ax ;把丫-1/4 的商加入 cxxor ax,axxor bx,bxmov ax ,yea
3、rmov dx,0mov bl ,100div bxsub cx,ax ;用cx中的值減去Y-1/100的商xor ax,axxor bx,bxxor dx,dxmov ax ,yearmov bx,400div bxadd cx,ax ;把丫-1/400 的商加入 cxxor ax,axmov dx,0mov bx,0inc monthmov al,monthmov bl, 13mul bl ;月加1后乘以13xor bx,bxmov bl ,5div bxadd cx,ax ;把上面得到的月除以5取整加入cx蔡勒(Zeller)公式運(yùn)用流程圖說明:是只把前面得出的結(jié)果賦值給后者a的值和星期
4、的對應(yīng)關(guān)系a 的值 0 1 2 3 4 5 6星期星期日星期一星期二星期三星期四星期五星期六五、程序源代碼stack SEGMENT stack DB 200 DUP(0) stack ENDS data segment Year dw 0 Month db 0 Day db 0 temp db 10 dup (0) count dw ?0dh,0ah,'$'ErrMsg db 0dh,0ah,'Input wrong!please input again!',' $' str1 db 0dh,0ah,'please input year
5、 month day:' 0dh ,0ah,'$' str2 db 0dh,0ah,'Whether or not to continue inquiries Yes/No', weekstr0 db 'Today is Sunday','$'weekstr1 db 'Today is Monday','$' weekstr2 db 'Today is Tuesday','$' weekstr3 db 'Today is Wednesday',
6、*' weekstr4 db 'Today is Thursday','$' weekstr5 db 'Today is Friday','$' weekstr6 db 'Today is Saturday','$' a dw ? b dw ? cc dw ? d dw ? w db ? data ends ;定義了變量和信息code segmentassume cs: code ,ds: data ,ss: stackstart :mov ax,datamov ds,axlea dx, s
7、trl ;提醒你輸入年月日mov ah,9hint 21 h ;顯示字符串call GetYearMonthDay ;調(diào)用子程序輸入正確的年月日call display ;調(diào)用子程序通過計(jì)算得出星期sel: lea dx,str2 ;提醒你選擇退出程序還是繼續(xù)mov ah,9hint 21 hmov ah,1 ;輸入你的選擇(鍵盤輸入并回顯)int 21 hcmp al,'Y'je startcmp al,'y'輸入y或Y繼續(xù)程序je startcmp al,'N'je exitcmp al,'n'輸入n或N退出程序je exit
8、jmp selexit :mov ah,4ch主程序int 21 h ;退出* ;GetYearMonthDay proc near ;子程序輸入正確的年月日push axpush cxpush sipush di ;壓棧inputagain :mov Year,0mov Month ,0mov Day ,0mov si, 0 ;把年月日重新歸零repeatY :mov ah,1 ;輸入年int 21 hcmp al, 0dh ;換行je EndY ;回車結(jié)束年的輸入cmp al,20h ;判斷是否是是空格鍵SPje EndY ;空格結(jié)束年的輸入cmp al, 1bh ;判斷是否是退出 ESC
9、je ExitDosO ;退出鍵則退出程序cmp al, 30h ;和 0 比較jb Err ;小于0轉(zhuǎn)到錯(cuò)誤提示cmp al, 39h ;和 9 比較temp si中ja Err ;大于9轉(zhuǎn)到錯(cuò)誤提示sub al,30 h ;把讀入的數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制保存到mov temp si, alinc si ; si 力口 1jmp repeatYErr: lea dx,ErrMsg ;提示錯(cuò)誤mov ah,9hint 21 h16文檔收集于互聯(lián)網(wǎng),如有不妥請聯(lián)系刪除mov ah,2 ;顯示輸出mov dl,0dhint 21 h ;換行mov dl ,0ahint 21 h ;回車jmp input
10、again ;跳回到 inputagain 重新輸入年月 日EndY:mov bx ,10 ;把 10 存入 bxmov di ,si ;把si的值傳給 dimov si, 0 ;再把si清零NextYBit :mov ah,0mov al,temp si;再把存在temp si中的數(shù)據(jù)存入 almov count, di ;把 di 中的轉(zhuǎn)至1J countsub count, si ; count=count- sidec count ; count- 1mov cx,count ;把自減后的 count 存入 cxjcxz skipY ; cx 為 0 轉(zhuǎn)移lopmul :mul bx
11、; * 10,主要實(shí)現(xiàn)把年按千位,百位,十位,各位存放loop lopmul ; cx-1 循環(huán)skipY:add Year ,ax ;把a(bǔ)x中存入的年的值賦給yearinc si ; si 自力口 1cmp si, di ; 比較 si 和 dijne NextYBit ;不相等轉(zhuǎn)移; 主要實(shí)現(xiàn)把年按千位,百位,十位,各位存放push dxmov ah,2mov dl ,0dh ;換行int 21 hmov dl ,0ah ;回車int 21 hpop dxjmp skiplap ;跳到月的輸入ExitDos0 :jmp ExitDos ;退出skiplap :mov si, 0 ; si
12、清零repeatM :mov ah,1 ;輸入月數(shù)int 21 hcmp al, 0dhje EndMon ;換行cmp al,20hje EndMon ;空格結(jié)束輸入cmp al, 1bhje ExitDos1 ;ESC 退出程序cmp al,30hjb Err1 ;小于0報(bào)錯(cuò)cmp al,39hja Err1 ;大于9報(bào)錯(cuò)sub al,30 h ;轉(zhuǎn)為二進(jìn)制存貯mov temp si, al ;把讀入的數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制保存到temp si中inc si ; si 力口 1jmp repeatM ;重新輸入下一個(gè)字符Err1 : jmp ErrExitDos1 : jmp ExitDosEn
13、dMon :mov di ,si ;把si的值傳給 dimov si, 0 ;再把si清零mov bl ,10 ;把 10 存入 blNextMBit :mov al,temp simov count, disub count, sidec countmov cx,countjcxz skipMlpmul :mul blloop lpmulskipM :add Month ,alinc sicmp si, dijne NextMBitcmp Month ,12 ;大于 12 報(bào)錯(cuò)ja Err1; 把月按十位,各位存貯push dxmov ah,2mov dl ,0dh ;回車int 21 hm
14、ov dl,0ah ;換行int 21 hpop dxjmp skiplaplskiplapl :mov si, 0repeatD :mov ah,1int 21 hcmp al, 0dhje EndDay ;換行cmp al,20hje EndDay ;空格結(jié)束輸入cmp al, 1bhje ExitDos ; ESC 退出程序cmp al,30hjb Err2 ;小于0報(bào)錯(cuò)cmp al,39h ;大于9報(bào)錯(cuò)ja Err2temp si中sub al,30 h ;轉(zhuǎn)為二進(jìn)制存貯mov temp si, al ;把讀入的數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制保存到inc si ; si 力口 1jmp repeat
15、D ;重新輸入下一個(gè)字符Err2 : jmp Err1EndDay :mov di ,si ;把si的值傳給 dimov si, 0 ;再把si清零mov bl ,10 ;把 10 存入 blNextDBit : mov al,temp si mov count, di sub count, si dec count mov cx,count jcxz skipD lpmul1 : mul bl loop lpmul1 skipD : add Day,al inc si cmp si, di jne NextDBit call Getrightday ;調(diào)用子程序確定每個(gè)月的最大天數(shù)mov a
16、l,si;把寄存器si中的值存入 alcmp Day,al ;用輸入的 day和al比較ja Err ;若day大于al則報(bào)錯(cuò); 把日按十位,各位存貯push dx mov ah,2 mov dl ,0dh int 21 h mov dl ,0ah int 21 h pop dx pop di pop si pop cx pop ax ret ExitDos : mov ah,4ch int 21 h GetYearMonthDay endp;* 閏年 *Getrightday proc near ;此子程序用來判斷年份是否為閏年push bx ;保存寄存器狀態(tài)push cxpush dxmo
17、v si, offset wmov ax,Yearmov cx,ax ;把轉(zhuǎn)換后的年份的數(shù)值存入cxmov dx,0 ;計(jì)算年份是否為4的整數(shù)倍mov bx,4div bxmov b, dx ;把此刻的余數(shù)賦給b,便于后面天數(shù)計(jì)算cmp dx,0jnz lab1 ;不能被4整除,不為閏年mov ax,cx ;接著判斷年份是否為100的倍數(shù)mov bx ,100div bxmov cc,dx ;把此刻的余數(shù)賦給cc,便于后面天數(shù)計(jì)算cmp dx,0jnz lab2 ;不為100的倍數(shù),則為閏年mov ax,cx ;再判斷是否為400的倍數(shù)mov bx,400div bxmov d,dx ;把此刻
18、的余數(shù)賦給d,便于后面天數(shù)計(jì)算cmp dx,0jz lab2 ;為400的倍數(shù),則為閏年lab1 :;確定平年各月的天數(shù) cmp Month , 1je 11cmp Month ,3je 11cmp Month ,5je 11cmp Month ,7je 11cmp Month ,8je l1cmp Month ,10je l1cmp Month ,12je l1cmp Month ,4je l2cmp Month ,6je l2cmp Month ,9je l2cmp Month , 11je l2mov al ,28mov si, al ;平年2月為28天jmp lab3 ;判斷結(jié)束11:
19、 mov al,31mov si, aljmp lab312: mov al,30mov si, aljmp lab3lab2:;確定閏年各月的天數(shù)cmp Month , 1je l1cmp Month ,3je l1cmp Month ,5je 11cmp Month ,7je 11cmp Month ,8je 11cmp Month ,10je 11cmp Month ,12je l1cmp Month ,4je l2cmp Month ,6je l2cmp Month ,9je l2cmp Month , 11je l2mov al ,29mov si, al ;閏年的2月為29天jmp
20、 lab3lab3: pop dx ;恢復(fù)寄存器狀態(tài)pop cxpop bxretGetrightday endpdisplay proc near ;子程序利用年月日計(jì)算星期,利用蔡勒cmp month ,2jg lab11 ;月大于2直接計(jì)算add month , 12sub year, 1 ;小于等于2則月加12,年再減1再計(jì)算lab11 :xor ax,axxor bx,bxxor cx,cxxor dx,dx ;先把各種要用的寄存器清零dec yearmov ax,yearmov cx,ax ; year 自減 1 再存入 cxmov dx,0mov bl ,4div bxadd c
21、x,ax ;把丫-1/4 的商加入 cxxor ax,axxor bx,bxmov ax ,yearmov dx,0mov bl ,100div bxsub cx,ax ;用cx中的值減去Y-1/100的商xor ax,axxor bx,bxxor dx,dxmov ax ,yearmov bx,400div bxadd cx,ax ;把丫-1/400 的商加入 cxxor ax,axmov dx,0mov bx,0inc monthmov al,monthmov bl, 13mul bl ;月加1后乘以13xor bx,bxmov bl ,5div bxadd cx,ax ;把上面得到的月除
22、以5取整加入cxxor ax,axxor dx,dxcmp month ,13ja noaddd ;當(dāng)此時(shí)month大于13時(shí),即月為1、2月時(shí)不用考慮加 1cmp b, 0jne noadddcmp cc,0jne adddcmp d, 0je addd ;當(dāng)是閏年而且月為3到12時(shí),day要加1addd :add day ,1 ; day + 1jmp dodnoaddd :jmp dod ; day 不用加 1dod:mov al ,dayadd cx,ax ;把 day 送個(gè) cxxor ax,axxor bx,bxxor dx,dx ;把要用到的寄存器先清零mov ax ,cxmov
23、 bl ,7 div bxmov a,dx ;把由公式的來的和除以7,取余cmp a,0 ;由余數(shù)確定星期je s0cmp a, 1je s1 cmp a,2je s2 cmp a,3je s3cmp a,4je s4cmp a,5je s5lea dx,weekstr6mov ah,9hint 21 hjmp exit150: lea dx ,weekstr0 ;顯示各個(gè)星期mov ah,9hint 21 hjmp exit151: lea dx,weekstr1mov ah,9hint 21 hjmp exit152: lea dx,weekstr2mov ah,9hint 21 hjmp
24、 exit153: lea dx,weekstr3mov ah,9hint 21 hjmp exit154: lea dx,weekstr4mov ah,9hint 21 hjmp exit155: lea dx,weekstr5mov ah,9hint 21 hexit1 :retdisplay endpcode endsend start運(yùn)行結(jié)果:文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯.歡迎下載支持dseg segmentYeardw 0Monthdb 0Daydb 0temp db 10 dup(0) count dw ?ErrMsg db 'Input wrong!
25、please input again!',' $ str1 db 0dh,0ah,"please input year month day:$" str2 db 0dh,0ah,'bye-bye!$' str3db0dh,0ah,'WhetherornottocontinueinquiriesYes/No','$'adb?weekstr0db'Today is Sunday','$'weekstr1db'Today is Monday','$'we
26、ekstr2db'Today is Tuesday','$'weekstr3db'Today is Wednesday','$'weekstr4db'Today is Thursday','$'weekstr5db'Today is Friday','$'weekstr6db'Today is Saturday','$'w db ?dseg endscseg segmentassume cs:cseg,ds:dseg start:mov
27、 ax,dsegmov ds,ax指向源地址lea dx,str1提示輸入年月日mov ah,9int 21hcall GetYearMonthDay調(diào)用輸入年月日子程序call display調(diào)用顯示子程序sel: lea dx,str3mov ah,9調(diào)用用9 號功能顯示字符串int 21hmov ah,1int 21h鍵盤接受數(shù)據(jù)cmp al,'Y'je start 跳轉(zhuǎn)的程序標(biāo)志入口4cmp al,'y' je start cmp al,'N' je exit 跳轉(zhuǎn)到程序結(jié)束cmp al,'n' je exitjmp sel exit:lea dx,str2mov ah,9i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024幼兒園保育員幼兒活動組織與實(shí)施合同2篇
- 2024年高端人才引進(jìn)保密合同
- 2024年標(biāo)準(zhǔn)版土方工程車輛租賃合同版
- 2024年藝術(shù)品交易合作合同
- 2025年度文化創(chuàng)意產(chǎn)業(yè)廠房股權(quán)置換與合資經(jīng)營合同3篇
- 2024年度家庭財(cái)產(chǎn)贈與法律咨詢合同3篇
- 2024年綠色能源發(fā)電項(xiàng)目投資與合作合同
- 2024防火門供貨及安裝合同
- 2024正規(guī)企業(yè)資源規(guī)劃開發(fā)合同范本2篇
- 2024年餐飲項(xiàng)目三位股東權(quán)益分配合同版B版
- 電力建設(shè)安全工作規(guī)程解析(線路部分)課件
- 軟膠囊生產(chǎn)工藝流程
- 液相色譜質(zhì)譜質(zhì)譜儀LCMSMSSYSTEM
- 民辦非企業(yè)單位章程核準(zhǔn)表-空白表格
- 派克與永華互換表
- 宣傳廣告彩頁制作合同
- 小學(xué)高年級語文作文情景互動教學(xué)策略探究教研課題論文開題中期結(jié)題報(bào)告教學(xué)反思經(jīng)驗(yàn)交流
- 【語法】小學(xué)英語語法大全
- 除濕機(jī)說明書
- 春節(jié)新年紅燈籠中國風(fēng)信紙
- 優(yōu)雅清新浪漫簡潔的PPT模板背景(免費(fèi))
評論
0/150
提交評論