在我的程序结束时,我可以选择重新启动程序。
要执行此选项,我需要重置一些变量以确保不会出现任何问题。
我想询问是否有中断或功能(或其他)可以重启/重新加载程序?
如果不清楚,我正在使用DOS OS(在dosbox上)。
答案 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寄存器对的地址保存为两个保留字。因此,如果孩子被正常终止,我们可以将我们的堆栈指针返回到母程序。