

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 8/8北郵微原作業(yè)中斷實(shí)驗(yàn)與編程 微原第二次軟件實(shí)驗(yàn) 一、實(shí)驗(yàn)要求 編寫(xiě)一程序,在顯示器上顯示時(shí)、分、秒。具體要求如下: 1)借用計(jì)數(shù)器8253的Timer()作為中斷源,通過(guò)8259A向CPU發(fā)中斷,每10ms產(chǎn)生 一次中斷; 2)在中斷服務(wù)程序中管理刷新時(shí)、分、秒; 3)輸入文件名后清屏顯示:Current time is : XX:XX:XX(時(shí)、分、秒鍵盤(pán)輸入); 4)當(dāng)鍵入CTRL+C時(shí),停止計(jì)時(shí),返回系統(tǒng),且系統(tǒng)正常運(yùn)行不死機(jī)。 二、設(shè)計(jì)思路 1)數(shù)據(jù)段定義四個(gè)字符串,分別用于顯示程序功能、提示用戶輸入,顯示當(dāng)前時(shí)間以 及錯(cuò)誤格式輸入提示。同時(shí)定義六個(gè)變量用于存儲(chǔ)當(dāng)前顯示的的時(shí)、
2、分、秒的十位 及個(gè)位,一個(gè)變量count100用以中斷計(jì)數(shù); 2)在BIOS功能調(diào)用中,令A(yù)H=6,設(shè)置窗口左上角、右下角行列位置使當(dāng)前頁(yè)上滾, 從而實(shí)現(xiàn)程序一開(kāi)始的清屏功能; 3)提示用戶輸入起始時(shí)間時(shí),需要對(duì)輸入格式進(jìn)行判斷,嚴(yán)格要求輸入在00:00:00 至23:59:59,正確輸入時(shí)則存入相應(yīng)的變量中,輸入任意鍵開(kāi)始計(jì)時(shí),錯(cuò)誤時(shí)則屏 幕顯示輸入錯(cuò)誤,提示用戶重新進(jìn)行輸入,若輸入為“CTRL+C”時(shí)退出程序; 4)利用8253作為中斷源,輸入控制字36H,時(shí)間常數(shù)為11932,使其選用通道0計(jì) 數(shù),產(chǎn)生頻率100Hz的方波,即中斷100次時(shí)間間隔為1s,時(shí)間刷新顯示; 5)8253中斷源
3、每中斷一次,進(jìn)入timer中斷子程序,將其段基地址及段內(nèi)偏移量存入 中斷向量表,利用8259向CPU發(fā)出中斷; 6)timer子程序會(huì)對(duì)中斷次數(shù)進(jìn)行判斷,每中斷滿100次時(shí)根據(jù)當(dāng)前時(shí)間進(jìn)行相應(yīng)的 時(shí)、分、秒修改,若不滿100次時(shí)直接退出中斷; 7)屏幕顯示時(shí)將時(shí)、分、秒的十位和個(gè)位分別送人al中,在BIOS功能調(diào)用中令ah=14h, 實(shí)現(xiàn)將al中的字符寫(xiě)到光標(biāo)位置,并將光標(biāo)進(jìn)一,8次循環(huán)直到時(shí)鐘完全顯示,同 時(shí)比對(duì)second,中斷滿100次時(shí),即時(shí)間間隔1s時(shí)second變化,當(dāng)檢測(cè)到這一變 化時(shí)重新進(jìn)入disp刷新顯示; 8)在每秒變化需要刷新顯示時(shí),都先進(jìn)行鍵盤(pán)輸入判斷,當(dāng)有輸入且輸入為
4、“ctrl+c” 時(shí),退出程序。 三、程序流程 1)主要程序流程圖 2)中斷程序流程圖 四、源代碼 data segment count100 db100 tenhour db0 hour db0,: tenmin db0 minute db0,: tensec db0 second db0 s1 db(00:00:0023:59:59 Ctrl+C to exit key to start)$ s4 dbStarting time is:$ s2 db(Ctrl+C to exit)Current time is:$ s3 db Error!,0dh,0ah,$ data ends stac
5、k segment stack db256dup(0) stack ends ;回車換行宏定義 CRLF MACRO mov ah,02h mov dl,0dh int21h mov dl,0ah int21h ENDM code segment assume ds:data,cs:code,ss:stack start:mov ax,data mov ds,ax mov es,ax ;清屏 mov al,0;整個(gè)窗口為空白 mov ch,0;窗口左上角的行位置 mov cl,0;窗口左上角的列位置 mov dh,24;窗口右下角的行位置 mov dl,79;窗口右下角的列位置 mov bh,
6、7;正常顯示屬性 mov ah,6;當(dāng)前顯示頁(yè)上滾功能調(diào)用號(hào) int10h;I/O中斷調(diào)用 begin: mov dx,offset s1 mov ah,09h;程序提示 int21h CRLF mov dx,offset s4 mov ah,09h;提示輸入 int21h mov bp,0;分輸入正確后加一,跳轉(zhuǎn)為秒輸入判斷mov di,offset tenhour mov ah,01h int21h cmp al,03h jnz goon1 ;讀取第一位,不為ctrl+c則繼續(xù)鍵入mov ah,4ch int21h goon1: mov bl,0;第一位為0到2 cmp al,bl jl
7、tiaoban mov bl,2 cmp al,bl jg tiaoban movdi,al;存入tenhour mov bh,al inc di mov ah,01h int21h cmp al,03h jnz goon2 ;讀取第二位,不為ctrl+c則繼續(xù)鍵入mov ah,4ch int21h goon2: cmp bh,2;如果第一位為2,則第二位為0到3 je tenhour2 mov bl,0;第二位為0到9 cmp al,bl jl tiaoban mov bl,9 cmp al,bl jg error movdi,al;存入hour jmp nextchar tiaoban:
8、jmp error ;用于跳轉(zhuǎn) tenhour2: mov bl,0 cmp al,bl jl error mov bl,3 cmp al,bl jg error movdi,al nextchar: inc di mov ah,01h int21h cmp al,03h jnz goon3 ;讀取第三位,不為ctrl+c則繼續(xù)鍵入mov ah,4ch int21h goon3: mov bl,:;第三位為: cmp al,bl jne error inc di mov ah,01h int21h cmp al,03h jnz goon4 ;讀取第四位,不為ctrl+c則繼續(xù)鍵入mov ah,
9、4ch int21h goon4: mov bl,0;分、秒均為00-59 cmp al,bl jl error mov bl,5 cmp al,bl jg error movdi,al;存入tenmin或tensec inc di mov ah,01h int21h cmp al,03h jnz goon5 ;讀取第五位,不為ctrl+c則繼續(xù)鍵入mov ah,4ch int21h goon5: mov bl,0 cmp al,bl jl error mov bl,9 cmp al,bl jg error movdi,al;存入minute或second inc bp cmp bp,1;bp
10、為1則繼續(xù)讀取秒鐘輸入 je nextchar signal: mov ah,0bh;輸入任意鍵開(kāi)始計(jì)時(shí) int21h or al,al jz signal ;無(wú)輸入繼續(xù)檢測(cè),有輸入才開(kāi)始 CRLF ;換行回車 jmp init error:mov dx,offset s3 mov ah,09h int21h;顯示錯(cuò)誤提示信息 JMP begin ;重新讀取 init: cli;關(guān)中斷 mov ax,0 mov es,ax;置附加段基地址為0 mov di,20h;中斷號(hào)08h*4 mov ax,offset timer ;中斷程序的段內(nèi)偏移量 stosw;偏移量存入中斷向量表 mov ax,
11、cs;中斷程序段基地址 stosw;段基地址存入中斷向量表 mov al,36h;選用0通道計(jì)數(shù)器,采用3號(hào)方式(方波)計(jì)數(shù)out43h,al mov bx,11932;時(shí)間常數(shù),輸出100HZ方波 mov al,bl out40h,al mov al,bh out40h,al mov al,0fch out21h,al;21h端口為中斷屏蔽寄存器,用以開(kāi)發(fā)外部中斷 sti;開(kāi)中斷 ;屏幕顯示當(dāng)前時(shí)間,變化時(shí)刷新顯示 disp: mov ah,0bh int21h or al,al jz noexit ;系統(tǒng)無(wú)輸入時(shí)不退出 mov ah,08h int21h cmp al,03h jnz no
12、exit mov ah,4ch int21h noexit: mov dx,offset s2 mov ah,09h int21h mov bx,offset tenhour mov cx,8 dispclk: mov al,bx call dispchar inc bx loop dispclk ;時(shí)分秒存入al并顯示 mov al,0dh call dispchar mov al,second ;時(shí)間變化時(shí)秒個(gè)位必變化 next: cmp al,second je next ;無(wú)變化時(shí)循環(huán) jmp disp ;有變化時(shí)刷新顯示 ;中斷一百次即為1s,時(shí)間相應(yīng)變化 timer proc fa
13、r push ax dec count100 jnz timerx mov count100,100 inc second cmp second,9;小于等于9,即之前秒個(gè)位為0-8 jle timerx ;秒個(gè)位0-8,變化后秒個(gè)位加1顯示即可mov second,0;原個(gè)位為9,變化后為0 inc tensec cmp tensec,6 jl timerx ;加1后小于5,即原秒十位為0-4,十位加1即可顯示mov tensec,0 inc minute ;與秒同理 cmp minute,9 jle timerx mov minute,0 inc tenmin cmp tenmin,6 j
14、l timerx mov tenmin,0 inc hour cmp tenhour,2 jl nexth cmp hour,3 jle timerx mov hour,0 mov tenhour,0 jmp timerx nexth: cmp hour,9 jle timerx adjhour: inc tenhour mov hour,0 timerx: mov al,20h out20h,al pop ax iret;中斷退出 timer endp dispchar proc push bx mov ah,14;寫(xiě)字符到光標(biāo)位置,光標(biāo)位置加1 int10h pop bx ret disp
15、char endp code ends end start 五、子程序清單 1)子程序名:timer; 功能:判斷中斷計(jì)數(shù)是否滿100次,若已滿對(duì)時(shí)間做出相應(yīng)的修改; 入口參數(shù):無(wú); 出口參數(shù):無(wú); 使用寄存器:AX,F(xiàn)R。 2)子程序名:dispchar; 功能:寫(xiě)入相應(yīng)字符至光標(biāo)位置,并將光標(biāo)前進(jìn)一位; 入口參數(shù):al,用以存儲(chǔ)待寫(xiě)入的字符; 出口參數(shù):無(wú); 使用寄存器:AX,BX。 六、程序分析 1)本程序一開(kāi)始利用INT 10H進(jìn)入BIOS功能調(diào)用,通過(guò)當(dāng)前頁(yè)上滾實(shí)現(xiàn)清屏功能, 采用用戶鍵入得到現(xiàn)行時(shí)鐘起始值,利用INT 21H讀取用戶鍵盤(pán)輸入,等待用戶正 確輸入后開(kāi)始計(jì)時(shí); 2)利用
16、8253作為中斷源,43H端口是8253三通道定時(shí)器中的命令寄存器,所使用的 命令字36H表示選用0通道定時(shí)器,以3號(hào)方式(產(chǎn)生方波)計(jì)數(shù)。向端口40H 送出的計(jì)數(shù)器初值選用11932是要求8253每秒發(fā)出100次時(shí)鐘中端(08H),將本 程序中的timer的起始地址送入中斷的入口地址,保證每次發(fā)生08H中斷時(shí),程序 自動(dòng)進(jìn)入timer; 3)程序運(yùn)行的大體過(guò)程為:主程序顯示時(shí)鐘值,發(fā)生中斷08H時(shí)進(jìn)入timer,查看中 斷計(jì)數(shù)是否達(dá)到100次,若沒(méi)有達(dá)到次數(shù)直接退出中斷返回主程序;若已達(dá)到,則 時(shí)間又過(guò)了1s,對(duì)個(gè)數(shù)據(jù)進(jìn)行修改后返回主程序; 4)本程序的時(shí)鐘顯示范圍是00:00:00至23:59:59,因而在計(jì)時(shí)至23:59:59時(shí),下一秒 將時(shí)間修改為00:00:00,針對(duì)不同的時(shí)間改變過(guò)程,程序中做了對(duì)應(yīng)的修改,已保
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 暑期教師家訪工作總結(jié)模版
- 醫(yī)療領(lǐng)域中醫(yī)院感染控制的創(chuàng)新策略
- led屏幕施工合同范例
- 區(qū)塊鏈技術(shù)在智慧城市中的安全應(yīng)用建議
- 代理審計(jì)合同范例
- 醫(yī)院感染控制與醫(yī)療安全風(fēng)險(xiǎn)管理
- 模式識(shí)別II-考試題A-2024-答案
- 臨時(shí)護(hù)工合同范例
- 專利交易合同范例
- 人工智能在醫(yī)學(xué)教育中的角色及其道德和法規(guī)責(zé)任
- 飛機(jī)維修員入門(mén)教程
- 超聲引導(dǎo)下神經(jīng)阻滯下肢篇
- 中國(guó)居民營(yíng)養(yǎng)與慢性病狀況報(bào)告
- 《如何處理人際關(guān)系》課件
- 小學(xué)教師漢字聽(tīng)寫(xiě)題庫(kù)
- 手機(jī)無(wú)線充電技術(shù)方案
- 中國(guó)帶狀皰疹診療專家共識(shí)2023版
- 《旋轉(zhuǎn)變壓器 》課件
- 通信線路工程維護(hù)
- 個(gè)人信息保護(hù)與隱私權(quán)益
- 無(wú)源物聯(lián)網(wǎng)簡(jiǎn)介演示
評(píng)論
0/150
提交評(píng)論