汇编语言(王爽)——实验十三 编写及应用中断例程

一、显示字符串

1、题目

2、安装中断例程

assume cs:code
 
code segment
start:
;do0安装程序
mov ax,0
mov es,ax
mov di,200h;设置es:di指向目的地址
mov ax,cs
mov ds,ax
mov si,offset do0;设置ds:si指向源地址
mov cx,offset do0end-offset do0;设置cx为传输长度
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
 
do0:
push ax
push cx
push ds
push es
push si
push di 

;ds:[si]指向字符串首地址
mov ax,0B800h
mov es,ax
mov al,160
mul dh
mov dh,0
add dl,dl;dl*2
add ax,dx
mov di,ax;设置es:di指向显存空间的位置

s:
mov al,[si]
cmp al,0
je ok;如果是0跳到标号ok
mov es:[di],al
mov byte ptr es:[di+1],cl;设置颜色属性
inc si
add di,2
jmp short s

ok:
pop di
pop si
pop es
pop ds
pop cx
pop ax 

iret;两种返回方式都可以
;mov ax,4c00h
;int 21h

do0end:
nop

code ends
end start

3、测试程序

assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start:
mov dh,10
mov dl,10
mov cl,2
mov ax,data
mov ds,ax
mov si,0
int 7ch
mov ax,4c00h
int 21h

code ends
end start

4、执行结果

 

二、中断例程——loop指令功能

1、题目

 

2、安装中断例程

assume cs:code
 
code segment
start:
;do0安装程序
mov ax,0
mov es,ax
mov di,200h;设置es:di指向目的地址
mov ax,cs
mov ds,ax
mov si,offset do0;设置ds:si指向源地址
mov cx,offset do0end-offset do0;设置cx为传输长度
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

do0:
push bp
mov bp,sp
dec cx
jcxz ok
add [bp+2],bx;bp寄存器内存单元寻址时默认段寄存器是ss
ok:
pop bp
iret
do0end:
nop
code ends
end start

3、测试程序

assume cs:code

code segment
start:
mov ax,0b800h
mov es,ax
mov di,160*12
mov bx,offset s-offset se;设置从标号se到标号s的转移位移
mov cx,80

s:
mov byte ptr es:[di],'!'
add di,2
int 7ch;如果cx不等于0,则转到标号s处
se:
nop

mov ax,4c00h
int 21h
code ends

end start

4、结果

先执行中断例程安装程序,再执行测试程序结果如下:

三、BIOS、DOS中断例程——屏幕显示字符串

1、内容

2、代码

assume cs:code
code segment
s1:db 'Good,better,best,','$'
s2:db 'Never let it rest,','$'
s3:db 'Till good is better,','$'
s4:db 'And better,best.','$'
s:dw offset s1,offset s2,offset s3,offset s4
row:db 2,4,6,8

start:
;int 10h中断例程是BIOS提供中断例程
;int 21h中断例程是DOS提供中断例程
mov ax,cs
mov ds,ax
mov bx,offset s
mov si,offset row
mov cx,4

ok:
;调用10h号中断例程2号子程序-设置光标位置
mov bh,0;第0页
mov dh,[si];dh中放行号
mov dl,0;dl中放列号
mov ah,2;2号子程序
int 10h

;21h号中断例程9号子程序-在光标位置显示字符串
mov dx,[bx];ds:dx指向字符串
mov ah,9;9号子程序
int 21h
inc si
add bx,2
loop ok
mov ax,4c00h
int 21h
code ends

end start

 

3、结果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

z2bns

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

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

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

打赏作者

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

抵扣说明:

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

余额充值