|
主题 : : 检测点15.1的“潜在问题” [待解决] |
回复[ 9次 ]
点击[ 853次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-06-30 15:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-15 23:01 |
在主程序中,如果在执行设置int9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则cpu将转去一个错误的地址执行,将发生错误。
------------------------------------------------------------------------------
书中的提示是用cli和sti,可我只用了cli,我知道会将可屏蔽的中断屏蔽,可是和显示'a'到'z'无关啊,为什么执行时无法清晰看见每个字母,但是时间是延长了,等了半天,显示出了'z'。中途没有任何键盘中断这个过程。而加上sti后就没问题了,难道IF会影响程序内部的执行吗,那每次使用时都要cli和sti成对出现吗?默认IF非要等于1吗?
请教了。。。。。。。。。。。。。。。。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-07-01 08:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23 |
首先,我觉得肯定不是IF影响你的程序的执行,就像你说的,跟你的显示a~z的程序是没有什么关系的。
我按照楼主的方式将书上的程序做了修改,只加上cli,运行结果是没有问题的。
楼主再看看? | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-07-01 12:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
涉及到键盘中断的程序,最好在实dos下运行调试,否则很容易出问题。这点书上有说明。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-07-29 14:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-29 14:37 |
欢迎大家光临 极酷论坛:www.jococ.com | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-02-09 20:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
在主程序中,如果在执行设置int9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则cpu将转去一个错误的地址执行,将发生错误。
------------------------------------------------------------------------------
mov 0:【9*4】,offset s
cli?
mov 0:【9*4+2】,cs
改成这样就不会发生错误? | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-02-09 20:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
我都觉得这种错误,发生的几率不大吧
你按键的速度能跟cpu处理速度比? | | |
|
|
|
|
[第6楼]
[ 回复时间:2009-02-09 20:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
|
|
|
|
|
[第7楼]
[ 回复时间:2009-02-09 20:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
cpu执行 mov 0:【9*4】,offset s时(没执行完指令), 键盘有操作,则发生中断9
此时中断9的向量表已经被更改,所以执行的不是原有的INT9中断历程
这2条指令根本就连不起,除非是 mov ss,n ---mov sp,n | | |
|
|
|
|
[第8楼]
[ 回复时间:2009-02-09 21:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
默认的标志寄存器都等于0吧
回去好好观察 不然这题目真的没解了 | | |
|
|
|
|
[第9楼]
[ 回复时间:2009-02-11 21:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
|