利用windows 1ch 提供使用者中斷 自製時鐘 並能正常運行DOS程式

來源:互聯網
上載者:User

;程式用途:利用windows 1ch 提供使用者中斷 自製時鐘  並能正常運行DOS程式                                     *

;程式作者:湖北師範學院電腦科學與技術學院         0801班         王定橋                                 *
;核心演算法:取並儲存原中斷  建立新中段  讀取時間並駐留記憶體後退出   依次執行原、新中段顯示時間   返回中段   *      
;製作時間:2010-10-25             *
;程式著作權:代碼公開供學習交流使用,但不得全部引用;若要使用,請先仔細理解後自己製作            * 
;附加說明:此程式系作業系統實驗的一個實驗          * 
;主要參考:IBM-PC組合語言程式設計    淮海工學院 劉晶亮 微機原理與介面技術系統駐留時間設計     *             *   
;**********************************************************************************************************

codesg segment  ;程式僅用程式碼片段來描述assume ds:codesg,cs:codesgmain proc far start: push ds sub ax,ax push ax mov ax,codesg mov ds,ax;---------------------------------取1ch原來的中斷向量並儲存 mov al,1ch mov ah,35h int 21h mov oldint, bx mov bx, es mov oldint+2,bx;---------------------------------重設1ch中斷向量 mov dx,offset updtime mov ax,seg updtime mov ds,ax mov al,1ch mov ah,25h int 21h  ;---------------------------------取目前時間並儲存 mov ah,2ch int 21h mov hour,ch mov min,cl mov sec ,dh;---------------------------------程式駐留記憶體並退出  mov ah,31h        mov al,0         mov dx,((prog_len+15)/16)+16 ;計算駐留位元組        int  21h main endp;--------------------------------------------------------新中斷部分updtime  proc near;---------------------------------先執行原來的中斷的內容 pushf      call dword ptr cs:oldint;---------------------------------開始執行新添加的內容 push ax  ;---------- 保護寄存器           push bx push cx push dx;---------------------------------利用ds寄存器指明儲存的資料的地址 mov ax,codesg mov ds,ax;---------------------------------處理時間的顯示和進位部分 dec count jnz exit ;時間未到一秒鐘不用進位,繼續中斷 add sec,1  ;----------處理秒 cmp sec,60 jnz docnt  ;時間未到一分鐘不用進位,繼續中斷 mov sec,0 add min,1  ;----------處理分 cmp min,60 jnz docnt ;時間未到一小時不用進位,繼續中斷 mov min,0 add hour,1 ;----------處理時 cmp hour ,24 jnz docnt ;時間未到24時不用進位,繼續中斷 mov hour,0 docnt: mov count,18  ;時間到了一秒時重設計數器 call timeshow ;僅在1秒到了時更新時間,未到時不更新 exit:   ;--------------------------返回中斷 pop dx  ;---------- 恢複寄存器 pop cx pop bx pop ax iretupdtime endp;--------------------------------------------------------timeshow proc near  ;---------------根據時間在螢幕顯示;---------------------------------讀取當前游標位置並存貯 xor bh,bh mov ah,03h int 10h   mov cur,dx;---------------------------------置游標為合適位置 xor bh,bh mov dh,0 mov dl,71 mov ah,02 int 10h;---------------------------------顯示小時 sub bx,bx mov bl,hour call bindec ;調用2位十進位數字顯示子程式 call semi   ;調用分號顯示子程式;---------------------------------顯示分鐘 sub bx,bx mov bl,min call bindec  call semi   ;---------------------------------顯示秒鐘 sub bx,bx mov bl,sec call bindec;---------------------------------恢複游標 xor bh,bh mov dx,cur mov ah,02h int 10h ret timeshow endp;--------------------------------------------------------顯示2位十進位的數字bindec proc near mov cx,10 call dec_div ;轉化2位十進位數字時先除10求十位 call curmove mov cx,1 call dec_div  ;轉化2位十進位數字時再除1求個位 call curmove retbindec endp;--------------------------------------------------------將2位十進位數字轉化為1位十進位數來顯示dec_div proc near mov ax,bx mov dx,0 div cx  ;根據cx中內容作除法 mov bx,dx push bx add al,30h ;顯示商的大小 xor bh,bh mov bl,41h mov ah,09h mov cx,1 int 10h pop bx  ;將餘數保留以便下次計算出個位元字 retdec_div endp;--------------------------------------------------------顯示分號semi proc near mov al,':' xor bh,bh mov bl,41h mov ah,09h mov cx,1 int 10h call curmove ret semi endp;--------------------------------------------------------帶顏色顯示字元時移動游標curmove  proc near mov ah,03 int 10h inc dl mov ah,02 int 10h retcurmove endp;--------------------------------------------------------所要儲存和使用的資料 ;------------儲存舊的向量 oldint  dw   2 dup (?) ;------------計時參數 count  dw  18 hour  db  0 min   db  0 sec   db  0 ;------------游標參數 cur     dw      0 ;---------------- prog_len equ $-main codesg endsend start

 ***********************************************************************************************

運行效果:


本文對應程式:http://download.csdn.net/detail/ziyuanxiazai123/2791641

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.