【问题标题】:Assembly TSR(Terminate-Stay-Resident) on interupt 9h中断 9h 上的装配 TSR(终止驻留)
【发布时间】:2014-10-31 17:14:36
【问题描述】:

我创建了一个程序,用我自己的名为“tastatura”的例程更改汇编中的基本 INT 9h。

_inst_09:

cli
xor     ax, ax
mov     es, ax
mov     bx, [es:09h*4]
mov     [stari_int09_off], bx 
mov     bx, [es:09h*4+2]
mov     [stari_int09_seg], bx

mov     dx, tastatura
mov     [es:09h*4], dx
mov     ax, cs
mov     [es:09h*4+2], ax
sti
ret

我想做的是让这个程序常驻。我的意思是,当我的程序完成后,我仍然希望 INT 9h 指向我的例程。
我知道我需要使用 mov ah,31hint 21h 来创建 TSR,但我不知道把它放在哪里。
如果你给我一个实际的答案而不是一些链接和教程会很好,因为我阅读了它们全部,并阅读了所有书籍,但我仍然无法弄清楚。
如果您需要完整的代码,我可以编辑帖子并将其放上。
提前致谢。

【问题讨论】:

    标签: assembly dos tsr


    【解决方案1】:

    sti之后,调用中断21h的函数31h:

    mov ax, 3100h ; function 31h in AH, exit code 0 in AL
    mov dx, 17 ; memory size to keep; 16 for PSP alone
    int 21h
    

    就是这样。您的程序终止但保留在内存中。 int 21h 后面的行不会执行。

    【讨论】:

    • 在 TSR 更新可用常规内存量时,DOS 是否不使用 dx 的值(要保持常驻的段落数)?
    • 我有个小问题。当我的程序终止时,我无法输入任何内容。它就像屏幕被冻结了
    • 这是一个无关的问题;请接受这个并提出一个新问题。很可能,您的 int 9 中断处理程序是错误的。您是否首先调用原始处理程序?
    猜你喜欢
    • 1970-01-01
    • 2019-11-29
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多