如何重新启动程序(8086 TASM)

时间:2014-03-07 16:15:19

标签: assembly dos x86-16

在我的程序结束时,我可以选择重新启动程序。

要执行此选项,我需要重置一些变量以确保不会出现任何问题。

我想询问是否有中断或功能(或其他)可以重启/重新加载程序?

如果不清楚,我正在使用DOS OS(在dosbox上)。

3 个答案:

答案 0 :(得分:2)

我认为没有任何DOS system call重新启动程序,就像在现代操作系统中没有这样的系统调用一样(AFAIK,如果我错了,请纠正我)。

答案 1 :(得分:0)

您可以再次运行您的程序作为子进程(在运行子进程之前不要忘记减少当前进程分配的内存)。

答案 2 :(得分:0)

简单地重置存储在数据段中的某些变量的起始值,而不终止并重新启动程序。

Numberone = 1
Numbertwo = 2
Numberthree = 3

VALUE1 DD Numberone
VALUE2 DD Numbertwo
VALUE3 DD Numberthree

mov DWORD PTR[VALUE1], Numberone
mov DWORD PTR[VALUE2], Numbertwo
mov DWORD PTR[VALUE3], Numberthree

终止并重新启动程序: 喜欢" Egor Skriptunoff"使用" INT 21H功能4B00H"可以像孩子一样加载,启动和执行程序,因此我们可以使用它构建一个程序,可以启动并重启其他.exe或.com程序,比如文件命令克隆的一部分。

如果子程序以AL-Register中的错误级别字节终止,以便用我们自己的特殊值重新启动信号,那么母程序可以检查它(就像在批处理文件中一样)并且可以很快重新启动程序,由儿童计划间接控制。

Ralf Browns中断列表(RBIL):inter61b.zip-> INTERRUP.G

--------D-214B-------------------------------
INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
AH = 4Bh
AL = type of load
    00h load and execute
    01h load but do not execute
    03h load overlay (see #01591)
    04h load and execute in background (European MS-DOS 4.0 only)
    "Exec & Go" (see also AH=80h)
DS:DX -> ASCIZ program name (must include extension)
ES:BX -> parameter block (see #01590,#01591,#01592)
CX = mode (subfunction 04h only)
    0000h child placed in zombie mode after termination
    0001h child's return code discarded on termination
Return: CF clear if successful
    BX,DX destroyed

...cut...

Format of EXEC parameter block for AL=00h,01h,04h:
Offset  Size    Description (Table 01590)
 00h    WORD    segment of environment to copy for child process (copy caller's
      environment if 0000h)
 02h    DWORD   pointer to command tail to be copied into child's PSP
 06h    DWORD   pointer to first FCB to be copied into child's PSP
 0Ah    DWORD   pointer to second FCB to be copied into child's PSP
 0Eh    DWORD   (AL=01h) will hold subprogram's initial SS:SP on return
 12h    DWORD   (AL=01h) will hold entry point (CS:IP) on return
SeeAlso: #01591,#01592

参数块示例:

PARBLOCK  equ THIS WORD      ; parameter-block for the EXEC-Function
          DW 0               ; same environment-block
          DW OFFSET COMLINE  ; Offset-address and
          DW SEG COD         ;  segmentaddress of the command line
          DD 0               ; no date in PSP #1
          DD 0               ; no data in PSP #2
COMLINE   DB 80h dup (0)     ; command line

提示:在调用此中断之前,我们必须在我们的母程序的代码段中将SS和SP寄存器对的地址保存为两个保留字。因此,如果孩子被正常终止,我们可以将我们的堆栈指针返回到母程序。