現在的位置: 首頁 > 綜合 > 正文

編寫包含多個功能子程序的中斷例程

2018年05月03日 ⁄ 綜合 ⁄ 共 1449字 ⁄ 字號 評論關閉

王爽彙編語言

實驗16 編寫包含多個功能子程序的中斷例程

 

一、實驗要求

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

(1)清屏;

(2)設置前景色

(3)設置背景色

(4)向上滾動一行

 

入口參數說明:

(1)用ah寄存器傳遞功能號,0表示清屏,1表示設置前景色,2表示設置背景色,3表示向上滾動一行

(2)對於2,3功能,用al傳遞顏色值,(al)取值{0,1,2,3,4,5,6,7}

 

 

二、程序代碼

assume cs:code

code segment
setscreen:
 jmp short set
 
 table dw sub1,sub2,sub3,sub4  ;通過該表查找子程序的始地址
 
 set:
  push bx
  
  cmp ah,3
  ja sret
  mov bl,ah
  mov bh,0
  add bx,bx
  
  call word ptr table[bx]
  
 
 sret:
  pop bx
  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
 

setup:
 ;初始化安裝過程
 mov ax,cs
 mov ds,ax
 mov si,offset setscreen
 
 mov ax,0
 mov es,ax
 mov di,200h
 
 ;開始安裝
 mov cx,offset setup-offset setscreen
 cld
 rep movsb
 
 ;設置中斷向量表
 mov ax,0
 mov es,ax
 mov word ptr es:[7ch*4],0   ;ip
 mov word ptr es:[7ch*4+2],20h  ;cs
 
 ;安裝結束,返回操作系統
 mov ax,4c00h
 int 21h
 
code ends
end setup

抱歉!評論已關閉.