检测点13.1
1. 第一题
7ch 中断例程实现 loop 的功能,则上面的 7ch 中断例程所能进行的最大转移位移是多少?
(1)、 此中断例程实现的是 loop 功能,而 loop 是短转移指令,
范围为 [-128,+127], 所以从这个角度来看,最大转移位移是128.
(2)、 从bx 的角度来看,若视bx为有符号数,则bx的范围为 [-32768,+32767] ,
此时最大转移为 32768 ;若视bx为无符号数,则bx的范围为 [0,65535], 此时最大转移为 65535 .
2. 用 7ch 中断例程完成 jmp near ptr s 指令功能,用 bx 向中断例程传送转移位移。
应用举例:在屏幕的第 12 行,显示 data 段中以 0 结尾的字符串
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset nr
mov ax,0
mov es,ax
mov di,200h
mov cx,offset nrend-offset nr
cld
rep movsb
;以上9句为安装中断例程
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
;以上2句为设置中断向量
mov ax,data
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov di,12*160
s: cmp byte ptr [si],0
je ok
mov al,[si]
mov es:[di],al
inc si
add di,2
mov bx,offset s-offset ok
int 7ch
ok: mov ax,4c00h
int 21h
nr: push bp ; 定义中断例程[开始]
mov bp,sp
add [bp+2],bx
nrret:
pop bp
iret ; 中断返回指令
nrend:
nop ; 定义中断例程[结束]
code ends
end start