Вызов программы с использованием MSDOS EXEC API (int21h с AX = 4Bh) - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь использовать DOS API "EXEC" (int 21h с AH = 4Bh) для загрузки программы.Я попробовал несколько вещей, но это не работает.Я получаю код результата AX = 2, что означает «Файл не найден».Я думаю, что с блоком параметров что-то не так, но я не уверен, что именно.Есть ли у вас какие-либо предложения, как заставить код работать?

Вот что я пробовал до сих пор:

CLS

DIM Array(0 TO 127)  AS INTEGER
DEF SEG = VARSEG(Array(0))

TYPE paramblk
        segenv AS INTEGER
        cmdline AS INTEGER
        cseg AS INTEGER
        fcb1 AS INTEGER
        f1seg AS INTEGER
        fcb2 AS INTEGER
        f2seg AS INTEGER
END TYPE

TYPE RegTypeX
        ax AS INTEGER
        bx AS INTEGER
        cx AS INTEGER
        dx AS INTEGER
        bp AS INTEGER
        si AS INTEGER
        di AS INTEGER
        flags AS INTEGER
        ds AS INTEGER
        es AS INTEGER
END TYPE

DIM regs AS RegTypeX
DIM p AS paramblk

cmdline$ = CHR$(0) + "" + CHR$(&HD)
emptyfcb$ = CHR$(0) + "???????????" + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) +  _
CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0)

p.segenv = 0 ' 0 = copy environment of parent
p.cmdline = SADD(cmdline$)
p.cseg = SSEG(cmdline$)
p.fcb1 = SADD(emptyfcb$)
p.f1seg = SSEG(emptyfcb$)
p.fcb2 = SADD(emptyfcb$)
p.f2seg = SSEG(emptyfcb$)

REM I tried both of these
CHNAME$ = "AYDOS1.EXE" + CHR$(0)
REM chname$ = "C:\QB71\AYDOS1.EXE" + CHR$(0)

regs.ax = &H4B00
regs.ds = SSEG(CHNAME$)
regs.dx = SADD(CHNAME$)
regs.es = VARSEG(p)
regs.bx = VARPTR(p)
CALL interrupt(&H21, regs, regs)

PRINT "AX = ", regs.ax  ' I am receiving AX=2 (File not found) as result

Примечание: я не использую команду SHELL, потому что используюAPI EXEC, я хочу вызывать не-EXE файлы на следующих шагах

Примечание 2. Среда - DOSBox, и я использую QuickBasic 7.1 (с параметром / L)

...