實驗16---多功能子程序中斷例程:清屏,設置前景色,設置背景色,向上滾動一行

 

安裝一個新的int 7ch 中斷例程,爲顯示輸出提供如下的功能子程序

(1)清屏

(2)設置前景色

(3)設置背景色

(4)向上滾動一行

入口參數:ah傳遞功能號-0清屏,1-設置前景色,2-設置背景色,3-向上滾動一行

                     對於2,3號功能:al 傳送顏色值,al=(0,1,2,3,4,5,6,7)

assume cs:code
code segment
start:
     
      mov ax,cs   ;安裝中斷程序
      mov ds,ax
      mov si,offset setscreen
      mov ax,0
      mov es,ax
      mov di,200h

      mov cx,offset setend-offset setscreen
      cld
      rep movsb

      mov ax,0
      mov es,ax
  
      mov word ptr es:[7ch*4],200h ;修改中斷向量表
      mov word ptr es:[7ch*4+2],0
     

      mov ax,4c00h
      int 21h


setscreen:jmp short set

  table   dw sub1-setscreen+200h,sub2-setscreen+200h,sub3-setscreen+200h,sub4-setscreen+200h
   
    set:push bx
        cmp ah,3
 ja sret

 mov bl,ah
 mov bh,0
 add bx,bx

 call word ptr cs:[202h+bx]
 
 
 
  sret:pop bx
       iret             ;此處爲中斷,應該用iret 返回

 sub1:push bx
      push cx
      push es
      mov bx,0b800h
      mov es,bx
      mov bx,0
      mov cx,2000
sub1s:mov byte ptr es:[bx],' '
      add bx,2
      loop sub1s
      pop es
      pop cx
      pop bx
      ret

sub2: push bx
      push cx
      push es

      mov bx,0b800h
      mov es,bx
      mov bx,1
      mov cx,2000
sub2s:and byte ptr es:[bx],11111000b
      or es:[bx],al
      add bx,2
      loop sub2s

      pop es
      pop cx
      pop bx
      ret

 sub3:push bx
      push cx
      push es
      mov cl,4
      shl al,cl
      mov bx,0b800h
      mov es,bx
      mov bx,1
      mov cx,2000
sub3s:and byte ptr es:[bx],10001111b
      or es:[bx],al
      add bx,2
      loop sub3s
      pop es
      pop cx
      pop bx
      ret

sub4: push cx
      push si
      push di
      push es
      push ds

      mov si,0b800h
      mov es,si
      mov ds,si
      mov si,160
      mov di,0
      cld
      mov cx,24
sub4s:push cx
      mov cx,160
      rep movsb
      pop cx
      loop sub4s

      mov cx,80
      mov si,0
sub4s1:mov byte ptr [160*24+si],' '
       add si,2
       loop sub4s1

       pop ds
       pop es
       pop di
       pop si
       pop cx
       ret
setend:nop

code ends
end start

測試用小程序:

assume cs:code
code segment
start:mov ah,1 
      mov al,4
      int 7ch
      mov ax,4c00h
      int 21h
code ends
end start

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章