. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点15.1的“潜在问题”  [待解决] 回复[ 9次 ]   点击[ 853次 ]  
huige
[帖 主]   [ 发表时间: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吗?
请教了。。。。。。。。。。。。。。。。
younggay
[第1楼]   [ 回复时间:2008-07-01 08:45 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
首先,我觉得肯定不是IF影响你的程序的执行,就像你说的,跟你的显示a~z的程序是没有什么关系的。
我按照楼主的方式将书上的程序做了修改,只加上cli,运行结果是没有问题的。
楼主再看看?
mouse
[第2楼]   [ 回复时间:2008-07-01 12:15 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
涉及到键盘中断的程序,最好在实dos下运行调试,否则很容易出问题。这点书上有说明。
wwtwx
[第3楼]   [ 回复时间:2008-07-29 14:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-29 14:37
欢迎大家光临 极酷论坛:www.jococ.com
zcouyangpeng
[第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

改成这样就不会发生错误?
zcouyangpeng
[第5楼]   [ 回复时间:2009-02-09 20:14 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
我都觉得这种错误,发生的几率不大吧

你按键的速度能跟cpu处理速度比?
zcouyangpeng
[第6楼]   [ 回复时间:2009-02-09 20:42 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
我现在是解决不了

加上这条也 没用啊
zcouyangpeng
[第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
zcouyangpeng
[第8楼]   [ 回复时间:2009-02-09 21:00 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
默认的标志寄存器都等于0吧

回去好好观察  不然这题目真的没解了
zcouyangpeng
[第9楼]   [ 回复时间:2009-02-11 21:08 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
忘记了,int9为可屏蔽中断 不用执行的
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved