实验13(1):https://blog.csdn.net/qq_41700629/article/details/89791836
实验13(2)
编写并安装int 7ch中断例程,功能为完成loop指令的功能。
参数:(cx)=循环次数,(bx)=位移。
以上中断例程安装好后,对下面的程序进行单步跟踪,尤其注意int,iret指令执行前后cs,ip的和栈中的状态。
在屏幕中间显示80个“!”
assume cs:code
code segment
start: 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], '!'
add di, 2
int 7cH
se: nop
mov ax, 4c00H
int 21H
code ends
end start
编写代码如下:
assume cs:code
data segment
data ends
code segment
start:
mov ax,code
mov ds,ax
mov si,offset s
mov ax,0
mov es,ax
mov di,200h
mov cx,offset send-offset s
cld
rep movsb ;安装
mov word ptr es:[7ch*4],0200h
mov word ptr es:[7ch*4+2],0 ;设置向量表
mov ax,4c00h
int 21h
s: push bp
dec cx
jcxz ok
mov bp,sp
add ss:[bp+2],bx ;这里用bp是因为[]里不能用sp所以要用(bx、bp、si、di)而bp与ss有联系,所以选用bp
ok: pop bp
iret
send: nop
code ends
end start
实验结果截图: