【汇编语言】第 13 章 int 指令

版权声明:本文为 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




推荐阅读更多精彩内容