- 实验内容、程序清单及运行结果
编写、应用中断例程(课本实验13)
- 编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset dp
mov ax,0
mov es,ax
mov di,200h
mov cx,offset dpend-offset dp ;安装中断例程
cld
rep movsb
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0 ;设置中断向量表
mov dh,10
mov dl,10
mov cl,2
mov ax,data
mov ds,ax ;测试int 7ch
mov si,0
int 7ch
mov ax,4c00h
int 21h
dp:
mov al,160
mul dh
add dl,dl
mov dh,0
add ax,dx
mov di,ax
mov ax,0b800h
mov es,ax
;中断例程
s:
mov al,ds:[si]
mov ah,0
cmp ax,0
je f
mov ah,cl
mov es:[di],ax
inc si
inc di
inc di
jmp s
f:
iret
dpend:nop
code ends
end start
运行结果:
(2)编写并安装int 7ch中断例程,功能为完成loop指令的功能。
参数:(cx)=循环次数,(bx)=位移
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset lp
mov ax,0
mov es,ax
mov di,200h
mov cx,offset lpend-offset lp ;安装中断例程
cld
rep movsb
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0 ;设置中断向量表
mov ax,0b800h
mov es,ax
mov di,160*12
mov bx,offset s-offset se
mov cx,80
s:
mov byte ptr es:[di],'!' ;测试int 7ch
add di,2
int 7ch
se:
nop
mov ax,4c00h
int 21h
lp:
push bp
dec cx
jcxz f
mov bp,sp
add [bp+2],bx ;中断例程
f:
pop bp
iret
lpend:nop
code ends
end start
运行结果;
(3)
assume cs:code
code segment
s1: db 'Good,better,best,','$' ; 定义字符串s1,并以逗号结尾
s2: db 'Never let it rest,','$' ; 定义字符串s2,并以逗号结尾
s3: db 'Till good is better,','$' ; 定义字符串s3,并以逗号结尾
s4: db 'And better,best.','$' ; 定义字符串s4,并以逗号结尾
s: dw offset s1,offset s2,offset s3,offset s4 ; 定义一个偏移地址表,存储各字符串的偏移地址
row: db 2,4,6,8 ; 定义一个行数表,用于打印相应行数的字符串
start:
mov ax,cs
mov ds,ax
mov bx,offset s ; 将偏移地址表的起始地址加载到寄存器bx
mov si,offset row ; 将行数表的起始地址加载到寄存器si
mov cx,4 ; 设置循环次数为4
ok: mov bh,0 ; 重置高位寄存器bh为0
mov dh,[si] ; 将当前行数加载到寄存器dh
mov dl,0 ; 重置低位寄存器dl为0
mov ah,2 ; 设置功能号为2,用于设置光标位置
int 10h ; 调用BIOS中断10h以设置光标位置
mov dx,[bx] ; 将字符串地址加载到寄存器dx
mov ah,9 ; 设置功能号为9,用于在屏幕上显示字符串
int 21h ; 调用DOS中断21h以显示字符串
inc si ; 递增si,指向下一个行数
add bx,2 ; 增加bx的值,指向下一个字符串地址
loop ok ; 循环,直到cx减为0
mov ax,4c00h ; 设置终止程序的DOS功能号
int 21h ; 调用DOS中断21h以终止程序
code ends
end start