版权声明:本文为 gfson
原创文章,转载请注明出处。
注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢。
13.1 int 指令
13.2 检测点 13.1
- 答案:
- (1)65535
- (2)如下所示:
jnp: push bp
mov bp, sp
add [bp+2], bx
pop bp
iret
# 13.3 BIOS 和 DOS 中断例程安装过程
![](http://upload-images.jianshu.io/upload_images/5351166-10adc1e723b2574a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
# 13.4 检测点 13.2
![](http://upload-images.jianshu.io/upload_images/5351166-25c554a34e4697e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 答案:
- (1)错误:FFFF:0 处的内容无法修改。
- (2)错误:此时 DOS 还未被引导。
# 13.5 实验 13
实验内容请参考原书。
- 答案:
(1)编写并安装 int 7ch 中断例程,功能为显示一个用 0 结束的字符串,中断例程安装在 0:200 处。
assume cs:code
code segment
start: mov ax, cs
mov ds, ax
mov si, offset print
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset printend - offset print
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
print:
push es
push ax
push cx
push dx
push si
push di
mov ax, 0b800h
mov es, ax
mov al, 160
mov ah, 0
mul dh
mov di, ax
add dl, dl
mov dh, 0
add di, dx
mov al, cl
printstart:
mov ch, 0
mov cl, [si]
jcxz zero
mov ch, al
mov es:[di], cx
add di, 2
inc si
jmp printstart
zero:
pop di
pop si
pop dx
pop cx
pop ax
pop es
iret
printend:
nop
code ends
end start
(2)编写并安装 int 7ch 中断例程,功能为完成 loop 指令功能。
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 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
lp: push bp
mov bp, sp
dec cx
jcxz lpret
add [bp + 2], bx
lpret: pop bp
iret
lpend: nop
code ends
end start
(3)下面的程序,分别在屏幕的第 2、4、6、8 行显示 4 句英文诗,补全程序。
[si]
[bx]
add bx, 2
inc si