编写、应用中断例程

  • 实验内容、程序清单及运行结果

编写、应用中断例程(课本实验13

  1. 编写并安装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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值