汇编语言(王爽)——实验十六 编写包含多个功能子程序的中断例程

1、题目

2、个人代码

assume cs:code

stack segment
db 128 dup (0)
stack ends

code segment

start:
mov ax,offset sub1;可以把标号直接当做数据定义的是数据标号
mov ax,offset sub2
mov ax,offset sub3
mov ax,offset sub4

mov ax,stack
mov ss,ax
mov sp,128

;do0安装程序
mov ax,0
mov es,ax
mov di,200h;设置es:di指向目的地址
mov ax,cs
mov ds,ax
mov si,offset setscreen;设置ds:si指向源地址
mov cx,offset setscreenend-offset setscreen;设置cx为传输长度
cld;设置传输方向为正
rep movsb

;设置中端向量表
mov ax,0
mov es,ax
cli
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
sti

;--------测试新的int7c中断例程----------

;设置前景色为红色
mov ah,1;
mov al,4;传递颜色值
int 7ch
call delay

;设置背景色为绿色
mov ah,2;
mov al,2;
int 7ch
call delay

;向上滚动一行
mov ah,3;
int 7ch
call delay

;清屏
mov ah,0;传递功能号
int 7ch
call delay


mov ah,0;传递功能号
int 7ch
call delay



;---------------------------------------
mov ax,4c00h
int 21h

;延时子程序
delay:
push ax
push dx
mov dx,10h
mov ax,0

s1:
sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret

;安装新的int7c中断处理程序
setscreen:
jmp short set
table dw offset sub1-offset setscreen+200h;sub1相对于段地址0的偏移地址
      dw offset sub2-offset setscreen+200h
      dw offset sub3-offset setscreen+200h
      dw offset sub4-offset setscreen+200h
set:
push bx
cmp ah,3;判断功能号是否大于3
ja sret
mov bl,ah
mov bh,0
add bx,bx;根据ah中的功能号计算对应子程序在table表中的偏移
;call word ptr table[bx];调用对应的功能子程序
call word ptr cs:[bx+202h]

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;ds:si指向第n+1行
mov di,0;es:di指向第n行
cld
mov cx,24;共复制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

setscreenend:
nop

code ends
end start

 

3、结果

设置前景色为红色

设置背景色为绿色

向上滚动一行

清屏

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z2bns

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值