【发布时间】:2013-11-04 11:28:06
【问题描述】:
我正在为一个装配班做作业。
我之前已经设法让我的计时器中断显示并在每个滴答时更新一个“时钟”。
我正在尝试使用这些知识来替换我的键盘中断。但即使我注释掉新键盘中断处理程序的安装,我的程序也会干扰 MS-DOS 活动(即无法运行任何可执行文件,只能使用 'dir'、'cd' 和类似命令):
.model tiny
.8086
.code
org 100h
start:
jmp setup
new_key PROC
jmp cs: old_key
new_key ENDP
setup:
mov ax, cs
mov ds, ax
old_key DD 00000000h
MOV AL, 9h ;+-
MOV AH, 35h ;| Save old_key
INT 21h ;|
MOV WORD PTR [old_key],BX
MOV WORD PTR [old_key][2],ES
; cli
; PUSH CS ;| Install new_key
; POP DS ;|
; LEA DX, new_key
; MOV AL, 9h
; MOV AH, 25h
; INT 21h
cli
push ds
LDS DX,CS:[old_key] ;+-
MOV AL, 9h ;| Disinstall new_key
MOV AH, 25h ;|
INT 21h
POP DS
STI
mov ax, TSR
int CALLDOS
end start
由于即使我已经注释掉了安装也有问题,我认为问题在于卸载或 old_key 保存。但是我不知道出了什么问题;安装和卸载代码不应该本质上类似于定时器中断的安装/卸载代码吗?
我们将不胜感激,在此先感谢您。
【问题讨论】:
-
有点跑题了,这有助于我将新键盘中断与旧键盘中断挂钩。但是仍然无助于卸载:stackoverflow.com/questions/15119745/…
标签: assembly dos x86-16 interrupt-handling keyboardinterrupt