. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于端口读取的问题  [已解决] 回复[ 4次 ]   点击[ 394次 ]  
lamapig
[帖 主]   [ 发表时间:2010-03-12 22:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-03-10 12:02
第15章的实验,有个问题,指令是这样的:
IN  AL,60H
CALL    DWORD  PTR  DS:[0]
CMP   AL,1
这里有个疑问,从端口读取按键数据后,调用DS:[0]处的程序,然后再把AL的值和ESC的通码比较看是否按下了ESC键。那么,程序如何保证一定能读到60端口的数据呢?假如程序执行到读取端口时,我没按键,而指令执行过后我才按键,那么这个程序还能正常工作吗?
还有,调用完其他程序后,AL的值不变吗??受到保护?
再有,调用原来的INT 9H后,60H端口的数据和没调用之前比变化了吗?如果端口的数据没有被读取走,在案件会被覆盖吧??
请高手指点迷津,多谢!!!
mgf1988629
[第1楼]   [ 回复时间:2010-03-13 22:22 ]   [引用]   [回复]   [ top ] 
荣誉值:14
信誉值:2
注册日期:2009-11-30 11:46
不知道阁下本章完没有!
反正我是按照书上做不出来!
我是:
1.将原中断int9入口地址保存起来
2.cli
3.设置中断向量表
4.sti
5.调用时间延时程序(call)
6.恢复原中断入口地址
7.程序返回
8.延时程序
9.中断例程
我认为本程序同时做了两件事:其一当在延时程序时它不能瞬间就完成
其二你按键盘时发生中断过程,执行中断例程,如果不是那个键就返回(iret)到延时程序执行到哪里就返回到哪里,如果是那个键就显示后才返回!
lamapig
[第2楼]   [ 回复时间:2010-03-15 15:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-03-10 12:02
明白了,谢谢提醒,这问题问的好愚蠢,呵呵
lamapig
[第3楼]   [ 回复时间:2010-03-15 15:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-03-10 12:02
还有个疑问,如果此段改为
IN  AL,60H 
CMP   AL,1 
CALL    DWORD  PTR  DS:[0]
这样可以吗???
lamapig
[第4楼]   [ 回复时间:2010-03-23 23:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-03-10 12:02
此贴由 贴主 于 [ 2010-03-23 23:32 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(mgf1988629):6分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved