安装一个新的int 7ch中断例程,为显示输出提供如下的功能子程序。
(1)清屏。
(2)设置前景色。
(3)设置背景色。
(4)向上滚动一行
(一)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
(二)对于2、3号功能,用al传递颜色值,(al)∈{0,1,2,3,4,5,6,7}。
代码如下:
;功能:安装一个新的int7ch中断例程,实现一个子程序 setScreen ,提供如下功能: ; (1)清屏。 ; (2)设置前景色。 ; (3)设置背景色。 ; (4)向上滚动一行; 入口参数说明: ; (1)每个子程序用 ah 寄存器传递功能号: ; (2)对于2、3号功能,用al传送颜色值, assume cs:code,ds:datadata segment err db ' ~~~~~ ah args is error! ~~~~~','$'init dw 10 dup(0)data endscode segmentstart:mov ax,datamov ds,axmov ax,0mov es,axmov ax,es:[7ch*4]mov init[0],axmov ax,es:[7ch*4+2]mov init[1],axmov es:[7ch*4],offset setScreenmov es:[7ch*4+2],csmov ax,102hint 7ch;call breakPointmov ax,201hint 7ch;call breakPointmov ax,300hint 7ch;call breakPointmov ax,0hint 7chmov ax,400hint 7chmov ax,0mov es,axmov ax,datamov ds,axmov ax,init[0]mov es:[7ch*4],axmov ax,init[1]mov es:[7ch*4+2],axok: mov ax,4c00hint 21hsetScreen:jmp short setmainlist dw sub0,sub1,sub2,sub3setmain:cmp ah,3ja subErrmov bl,ahmov bh,0shl bx,1call word ptr list[bx]iretsub0: ;清屏mov cx,0b800hmov es,cxmov cx,2000mov bx,0sub0s:mov byte ptr es:[bx],' 'add bx,2loop sub0sretsub1: ;设置前景色。mov cx,0b800hmov es,cxmov cx,2000mov bx,1sub1s:and byte ptr es:[bx],11111000bor es:[bx],aladd bx,2loop sub1sretsub2: ;设置背景色。mov cx,0b800hmov es,cxmov cx,2000mov bx,1shl al,1shl al,1shl al,1shl al,1sub2s:and byte ptr es:[bx],10001111bor es:[bx],aladd bx,2loop sub2sretsub3: ;向上滚动一行mov cx,0b800hmov es,cxmov ds,cxmov di,0mov si,160climov cx,24sub3s:push cxmov cx,160rep movsbpop cxloop sub3smov cx,160mov bx,0sub3s1:mov byte ptr es:3840[bx],' 'add bx,2loop sub3s1retsubErr: ;显示错误信息mov ax,datamov ds,axmov ah,9mov dx,offset errint 21hjmp okbreakPoint: ;设置断点,用于调试pushfpop bxor bh,3push bxpopfretcode endsend start