(1)编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数:(dh)=行号,(dl)一列号,(c1)二颜色,ds:si指向字符串首地址。
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int, fret指令执行前后CS, IP和栈中的状态。
assume cs:code
data segment
db 'welcome to masm! ',0
data ends
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset capital
mov ax,0
mov es,ax
mov di,200h
mov cx,offset capitalend-offset capital
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 dh,10
mov dl, 10
mov cl,2
mov ax,data
mov ds,ax
mov si,0
int 7ch
mov ax,4c00h
int 21h
capital:
push ax
push es
push di
push si
mov ax,0b800h
mov es,ax
mov al,0a0h
mul dh
mov di,ax
mov al,2
mul dl
add di,ax
mov ah,cl
s:
mov al,[si]
cmp al,0
je ok
mov word ptr es:[di],ax
add di,2
inc si
jmp short s
ok:
pop si
pop di
pop es
pop ax
iret
capitalend:
nop
code ends
end start
(2)编写并安装int 7ch中断例程,功能为完成loop指令的功能。
参数:(cx)=循环次数,(bx)一位移。
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int, iret指令执行前后CS, IP和栈中的状态。
在屏幕中问显示80个“!”
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset capital
mov ax,0
mov es,ax
mov di,200h
mov cx,offset capitalend-offset capital
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,0b800h
mov es,ax
mov di,12*160
mov bx,offset s-offset se
mov cx,80
s:
mov byte ptr es:[di],'!'
add di,2
int 7ch
se:
nop
mov ax,4c00h
int 21h
capital:
push bp
mov bp,sp
dec cx
jcxz ok
add [bp+2],bx
ok:
pop bp
iret
capitalend:
nop
code ends
end start
