Write and apply interrupt routines
1.编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处
参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址
assume cs:codesg
codesg segment
start: ;安装中断例程
mov ax,cs
mov ds,ax
mov si,offset sub
mov ax,0
mov es,ax
mov di,200H
mov cx,offset subend-sub
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
;设置中断例程
sub: push ax
push es
push di
mov ax,0b800H
mov es,ax
mov di,[dh*160+dl*2]
s: cmd ds:[si],0
je end
mov al,ds:[si]
mov es:[di],al
mov es:[di+1],cl
inc si
add di,2
jmp short s
end: pop di
pop es
pop ax
iret
subend: nop
codesg ends
endstart
2.编写并安装int 7ch中断例程,功能为完成loop指令的功能
参数:(cx)=循环次数,(bx)=位移
assume cs:codesg
codesg segment
start: ;安装中断例程和设置中断向量表省略
;以下为中断例程:完成loop指令的功能
sub: push bp
mov bp,sp
dec cx
jcxz end
add [bp+2],bx ;改变原IP值
end: pop bp
iret
subend: nop
3.下面的程序,分别在屏幕的第2 4 6 8行显示4句英文诗,补全程序
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: mov ax,cs
mov ds,ax
mov bx,offset s
mov si,offset row
mov cx,4
ok: mov bh,0
mov dh,ds:[si] ;行
mov dl,0
mov ah,2
int 10h
;调用为BIOS的10h标量的中断中的第二个程序
;设置光标位置
mov dx,[bx] ;dx寄存器为与标量21h处所对应的中断的输出有关
mov ah,9
int 21h
inc si
add bx,2
loop ok
;调用DOS的21h标量的中断中的第九个程序
mov ax,4c00h
int 21h
code ends
end start