读书人

端口练习题:在屏幕中间依次显示amp;#39;a

发布时间: 2013-01-04 10:04:14 作者: rapoo

端口练习:在屏幕中间依次显示'a'到'z',在显示过程中按ESC键则改变颜色
总结:
1.编写一个新的中断例程,并保持原in9中断例程的入口地址在ds:0处,在新的中断例程的时候调用原int9例程的时候可以模拟int9的中断.
2.模拟中断例程有如下分析:
1.标志寄存器入栈
2.IF=0 TF=0
3.CS IP 入栈
4.(IP)=((ds)*16+0)(CS)=((ds)*16+2)
3.可以用以下语句来模拟int的过程
pushf ;标志寄存器入栈
pushf
pop bx
and bh,1111110B
push bx
popf ;IF=0TF=0 call dword ptr ds:[0];(IP)=((ds)*16+0)(CS)=((ds)*16+2)


assume cs:code,ds:data,ss:stackstack segmentdb 128 dup (0)stack endsdata segmentdw 0,0data endscode segmentstart:mov ax,datamov ds,ax;设置(ds)=datamov ax,stackmov ss,axmov sp,128;设置栈顶mov ax,0mov es,ax;(es)=0push es:[9*4]pop ds:[0]push es:[9*4+2]pop ds:[2];将原9号中断例程入口放入ds:[0]里mov es:[9*4],offset int9mov es:[9*4+2],csmov ax,0B800H;以下为显示字符程序mov es,axmov ah,'a's:mov es:[160*12+2*39],ahcall delay;延时功能inc ahcmp ah,'z'jna smov ax,4c00hint 21h;~~~~~~~~~~~~~~~~~~~~~~延时功能,空循环10000000次~~~~~~~~~~~~~~~~~~~~delay:push axpush dxmov dx,1000Hmov ax,0s1:sub ax,1sbb dx,0cmp ax,0jne s1cmp dx,0jne s1pop dxpop axret;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~int9:push axpush bxpush esin al,60hpushfpushfpop bxand bh,11111100Bpush bxpopfcall dword ptr ds:[0]cmp al,1jne int9retmov ax,0B800Hmov es,axinc byte ptr es:[160*12+39*2+1];设置颜色+1int9ret:pop espop bxpop axiretcode endsend start

读书人网 >编程

热点推荐