编写包含多个功能子程序的中断例程

王爽汇编语言

实验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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c6678是德州仪器(Texas Instruments)公司生产的一款高性能数字信号处理器(DSP),具有多个定时器模块可用于产生中断。多个定时器中断程是指在c6678上同时或者交替使用多个定时器模块来实现中断功能。 在c6678上,每个定时器都有自己的控制寄存器和计数寄存器,可以通过设置定时器的控制寄存器来配置其工作模式和定时器周期。定时器中断程主要包括以下几个步骤: 1. 初始化定时器:首先需要对定时器进行初始化,设置定时器的控制寄存器和计数寄存器的初始值,以及中断服务函数的地址。 2. 开启定时器中断:将定时器中断使能位设置为1,使得定时器计数到达设定的周期后触发中断。 3. 编写中断服务函数:当定时器产生中断时,CPU会跳转到中断服务函数,执行用户定义的中断处理程序。 4. 复位中断标志位:在中断服务函数中,需要手动清除定时器的中断标志位,以便定时器能再次产生中断。 5. 关闭定时器中断:如果需要关闭定时器中断,可以将定时器中断使能位设置为0,停止定时器的计数。 通过使用多个定时器模块,并根据需求设置不同的定时器周期,可以实现多个不同精度的定时器中断程。这样可以更好地满足不同应用场景下的定时和计时需求。同时,c6678的多个定时器模块可以独立工作,互不干扰,提高了系统的并行性和响应速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值