检测点13.1
(1)在上面内容中,我们用7cH中断例程实现loop功能,则上面的7cH中断例程所能进行的最大转移位移是多少?
解:中断例程中使用的bx寄存器存储位移量,可知:16位补码可以表达的数值范围为[-32768~32767],故最大位移量为32768。
(2)用7ch中断例程完成jmp near ptr s指令功能,用bx向中断例程传送转移位移。
解:这个程序核心代码已经在教材 问题:7ch中断例程完成loop指令的功能 的实现代码中基本给出了。loop相对比jmp指令,只是多出了对于cx寄存器的dec操作。
例程实现如下:
;-------
;例程:7cH
;功能:实现jmp near ptr s指令的功能
;入口参数:bx,存放位移偏移量
;返回值:无
;-------
lj: push bp
mov bp,sp
add [bp+2],bx ;ip寄存器的值加上bx寄存器中的jmp位移量
pop bp
iret
ljend: nop
历程装载与中断向量表注册的代码就不给出了,上篇有具体代码。
检测点13.2
判断下面说法的正误:
(1)我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。
解:错误。0FFFF:0处的指令是只读的,无法修改。(真的要修改,也无法通过编程的方式修改吧,要改也是改动CPU吧)
(2)int 19h中断例程,可以由DOS提供。
解:错误。是BIOS提供的在主板ROM中不可修改的例程。