1、检测点 13.1
(1)用 7ch 中断例程实现 loop 的功能,则上述 7ch 中断例程所能进行的最大转移位移是多少?
上述中断例程进行的位移存放在寄存器 BX 内:
mov bx,offset s-offset se
寄存器 BX 为 16 位寄存器,所表示的最大转移位移为 -32768~32767。
(2)用 7ch 中断例程完成 jmp near ptr s 指令的功能,用 bx 向中断例程传送转移位移。
应用举例:在屏幕的第 12 行显式 data 段中,以 0 结尾的字符串。
7ch中断例程的安装程序和中断处理子程序代码如下:
assume cs:code
code segment
start: ;7ch例程安装程序
mov ax,0
mov es,ax
mov di,200h
mov ax,cs
mov ds,ax
mov si,offset lp
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],0h
mov ax,4c00h
int 21h
lp: ;7ch中断处理程序
push bp
mov bp,sp
add [bp+2],bx ;将IP的内容设置为标号s的偏移地址
pop bp
iret
lpend:
nop
code ends
end start
应用程序调用7ch中断例程代码如下:
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:
mov ax,data
mov ds,ax ;段寄存器DS指向data段
mov si,0
mov ax,0b800h
mov es,ax ;段寄存器ES指向显示区域
mov di,160*12
s:
cmp byte ptr [si],0
je ok ;如果上述比较等于零则跳转到标号ok处
mov al,[si]
mov byte ptr es:[di],al ;写入字符串内容
mov byte ptr es:[di+1],2h ;给字符加上绿色属性
inc si ;偏移1个字节从字符串取字符
add di,2 ;偏移2个字节得到下一个写入地址
mov bx,offset s-offset ok ;转移位移
int 7ch
ok:
mov ax,4c00h
int 21h
code ends
end start
2、检测点 13.2
(1)我们可以编程改变 FFFF:0 处的指令,使得 CPU 不去执行 BIOS 中的硬件系统检测和初始化程序。
错误,该内存区域为BIOS的ROM,可读不可写
(2)int 19h 中断例程,可以由 DOS 提供。
错误,int19h 不是由 DOS 提供的,因为在 DOS 装入中断例程前 int19h 已存在于内存中,int19h恰恰是为了引导操作系统的安装,在此之前操作系统还未建立不可用。