(一)执行n号中断源对应的中断服务程序,CS,IP的内容应被修改为:__3__
1、 (IP) = (n*4+2) (CS) = (n*4)
2、 (IP) = (n*2+2) (CS) = (n*2)
3、 (IP) = (n*4) (CS) = (n*4+2)
4、 (IP) = (n*2) (CS) = (n*2+2)
这道题好解决。先压栈CS,后IP,所以CS的内存单元地址要大。另外,一个中断程序入口的CS和IP各占一个字单元,所以,下一个中断号对应的CS和IP要加上4。故选3。
(二)关于ret 和 iret下列说法错误的是__1__
1、 ret和iret都改变标志寄存器的值
2、 ret不改变cs的值,iret改变cs的值
3、 ret和iret都改变sp的值
4、 ret和iret都改变ip的值
ret只弹出IP的值,iret先弹出IP,然后CS,最后标志寄存器。因为弹出栈中内容,所以SP的值当然会改变。
(三)用7ch中断例程模拟loop指令的功能,指令序列如下:
lp: push bp
mov bp,sp
dec cx
jcxz lpret
add [bp+2],bx
lpret: pop bp
iret
关于7ch中断下列说法正确的是__3__
1、 此中断的最大转移位移为128
2、 此中断的最大转移位移为1K
3、 此中断根据bx中的偏移量实现跳转
4、 此中断不能设定跳转的次数
此题开始时,有些不大懂,后来才知道,调用中断例程时,依次压栈标志寄存器,CS和IP。此时SP指向栈顶的存储的IP。中断例程执行时,压栈bp,此时SP减2,指向存储的BP的值。把sp的值传给bp后,bp存储的也就是栈顶的地址,所以bp+2就是指向IP的内存地址。[bp+2]就是IP的内容。所以add [bp+2],bx也就相当于把压栈的IP地址加上2。这样子,出栈时,程序将不会转到调用中断例程的跳转指令下一条指令,而是指向(IP)+2的地址处的指令。 |