NJUPT 微机 中断系统 日时钟中断之替换1CH实现字符串动态显示

来源:互联网 发布:淘宝乐高回力车 编辑:程序博客网 时间:2024/05/16 10:02

原理:

系统的8254的0号定时计数器会引发日时钟中断。

0号定时计数器每隔55ms向8259A IR0端提一次日时钟中断请求。

CPU响应之后转入08H中断服务程序,并在其中执行软件中断1CH。

所以,我们可以置换1CH的终端服务子程序,来实现系统每隔55ms执行08H的时候执行我们定义的1CH子程序。

要求:

1.每隔一定时间,显示字符串。书上的是显示黑白字符串,这里用bios调用显示彩色。

重点:

1.掌握中断向量的置换(用前保存、写入、用完恢复)
2.掌握用户中断(service)的设计(怎么样实现固定时间显示 和 彩色显示)

;njupt 3th experiment:show the character string dynamicly.486data segment use16;mesg db 'Hello,njupt!',0DH,0AH,'$'mesg db 'Hello,njupt!'ll equ $-mesgold1c dd ?icount db 18;延迟的时间 18*55 大约是1s count db 10data endscode segment use16assume cs:code,ds:databeg:mov ax,datamov ds,axclicall read1ccall write1cstiscan:cmp count,0jnz scancall resetmov ah,4chint 21hservice procpushapush dsmov ax,data;--mov ds,axmov es,axdec icountjnz exitmov icount,5 ;在这里修改每次显示延迟的时间  5*55msdec count;mov ah,9;原始的是用9号调用ds:dx指向要显示的字符串;如果要显示彩色字符串,用bios调用即可 13h显示字符串;lea dx,mesgmov ax,1301hmov bh,0mov bl,01001111Bmov cx,LLmov dh,10sub dh,count; 行数mov dl,0hlea bp,mesgint 10h;int 21hexit:pop dspopairetservice endp;------------------------read1c procmov ax,351chint 21hmov word ptr old1c,bxmov word ptr old1c+2,esretread1c endp;----------------------------write1c procpush dsmov ax,codemov ds,axmov dx,offset servicemov ax,251chint 21hpop dsretwrite1c endp;-------------------------reset procmov dx,word ptr old1cmov ds,word ptr old1c+2mov ax,251chint 21hretreset endpcode endsend beg

效果:


0 0
原创粉丝点击