Assembly 程序集中的TSR保存在内存中

Assembly 程序集中的TSR保存在内存中,assembly,dos,terminate,Assembly,Dos,Terminate,我有TSR的问题,试图保存在内存中,并在启动程序时继续写其他东西,并在后面继续工作秒表 代码如下: cli xor ax,ax 斧头 mov bx[es:1Ch*4] mov[old_int_off],bx mov bx[es:1Ch*4+2] mov[old_int_seg],bx 定时器 mov[es:1Ch*4],dx mov-ax,cs 移动速度[es:1Ch*4+2],最大 推送ds 流行音乐 性病 mov ax,3100h 莫夫dx,500 int 21h 当我启动程序时,我可以编写

我有TSR的问题,试图保存在内存中,并在启动程序时继续写其他东西,并在后面继续工作秒表

代码如下:

cli xor ax,ax 斧头 mov bx[es:1Ch*4] mov[old_int_off],bx mov bx[es:1Ch*4+2] mov[old_int_seg],bx 定时器 mov[es:1Ch*4],dx mov-ax,cs 移动速度[es:1Ch*4+2],最大 推送ds 流行音乐 性病 mov ax,3100h 莫夫dx,500 int 21h 当我启动程序时,我可以编写其他东西。当我按F1启动秒表时,什么也没发生

但如果没有这一点:

mov ax,3100h 莫夫dx,500 int 21h
F1工作,但我不会写字。

定时器实际上做什么?它每55毫秒调用一次,目前唯一已知的信息是CS:IP。我怀疑你对GS的操纵。若计时器用于在数据段写入内存,则应从CS加载DS。它应该以远跳转到[old_int_seg:old_int_ofs]结束。将[old_int_seg]替换为cs:[old_int_seg],以便在程序段中有效地保存和加载bx。