编写、应用中断例程

打印 上一主题 下一主题

主题 972|帖子 972|积分 2916


  • 实行内容、程序清单及运行效果
编写、应用中断例程(讲义实行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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表