我需要在汇编程序(TASM)上编写程序。当按下任何按钮时,它应该在控制台上写一条消息
它应该是int 9h处理程序!
那么如何为我自己的处理程序更改标准键盘处理程序:
keyboardhandler proc
mov ah,9
mov dx,offset myMsg
int 21h
iret
keyboardhandler endp
越简越好。 谢谢。
============================================== <登记/> 那么我现在拥有的......有一个程序
.model small
.386
.stack 100h
.data
old9 dd ?
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
jmp setup
prg proc
mov ah,2
mov dl,'X'
iret
prg endp
setup:
cli
mov ax,0h
mov es,ax
mov bx,es:[9*4]
mov word ptr old9,bx
mov bx,es:[9*4+2]
mov word ptr old9+2,bx
mov word ptr es:[9*4],offset prg
mov es:[9*4+2],cs
sti
int 09h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; this one
lds dx,dword ptr old9
mov ax,2509h
int 21h
mov ax,4c00h
int 21h
end start
效果很好。但是有一个问题。当我将行09改为
时mov ah,01h
int 21h
它还会打印出'X',但在该程序挂起后(和ms-dos一样)。 我该如何解决?
答案 0 :(得分:2)
答案 1 :(得分:1)
这并不像看起来那么简单。要输出到控制台,需要进行系统调用。不允许从中断处理程序调用所需的系统调用(write()
。
根据运行的环境,不同的系统调用适用于此用途。例如,在Linux下,kprintf()
用于将消息排入系统日志文件,最终可能会显示在系统控制台上。
由于您使用的是TASM,可能是在MSDOS上运行?在这种情况下,您可以通过在内存中的正确位置写入字节来直接写入屏幕文本缓冲区。但是,这需要管理当前光标位置等等。你必须决定 - 或者有人已经告诉你 - 什么是可接受的控制台显示器。