(1)仔细分析一下上面的int9中断例程,看看是否可以精简一下?
其实在我们的int9中断例程中,模拟int指令调用原int9中断例程的程序段是可以精简的,因为在进入中
断例程后,IF和TF都已经置0,没有必要再进行设置了.对于程序段:
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
________________pushf
________________call dword ptr ds:[0]
两条指令.
(2)仔细分析上面的程序中的主程序,看看有什么潜在的问题?
在主程序中,如果在执行设置int9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则CPU将转去
一个错误的地址执行,将发生错误.
找出这样的程序段,改写它们,排除潜在的问题.
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
应改为:
cli
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti
- [anwu00] 写反了,最小为1001H,最大为2000H 05/10 11:04
- [crazyman] 博主确实好久不见了。 这里是一个开始,希望更多人都能从这里明确方向,开始自己的计算机之路。 08/16 14:55
- [游客] 你那个循环3FH错了 应该是循环40H 因为是添入0-63 就是添64次 08/02 17:27
- [游客] 我猜是因为2000:0000这段是给当成了一段栈寄存器使用了 所以一些数据会往里写入 写入的数据有的 07/29 23:00
- [游客] 2^N=寻址能力 N是总线宽度 算出的能力是B为单位 比如宽度13的CPU 2^13=8192 07/29 22:56
- [游客] 恩,有道理 04/08 12:25
- [atel] 那主程序我测试过的,可以显示的.但是加载到了软盘就不行了. 04/06 22:36
- [wdm] 没有错误啊。 我试了,运行ok的! 04/06 18:17
- [wdm] 说明程序还是有问题哟。 建议你一点一点的来做,先做一显示功能选项的界面吧。 然后在一点点的进行功 04/06 18:10
- [atel] 有什么错误? 04/04 21:33