在我的16位DOS程序中,我希望使用DOS中断或其内部表获取到程序实例的完整路径。
换句话说,我正在寻找Windows API函数GetModuleFileName(NULL)的DOS等效函数。
中断21h/AH=60h似乎是正确的轨迹,但当程序不在当前目录时会失败。我编写了一个简单的测试程序:
它被创建为"C:\WORK\MYTEST.COM",并在Windows 10/64位的DOSBox上运行:
中断21h/AH=60h似乎是正确的轨迹,但当程序不在当前目录时会失败。我编写了一个简单的测试程序:
MYTEST PROGRAM FORMAT=COM
MOV AH,60h ; TRUENAME - CANONICALIZE FILENAME OR PATH.
MOV SI,MyName
MOV DI,MyFullName
INT 21h ; Convert filename DS:SI to canonizalized name in ES:DI.
MOV AH,09h ; WRITE STRING$ TO STARNDARD OUTPUT.
MOV DX,DI
INT 21h ; Display the canonizalized name.
RET ; Terminate program.
MyName DB "MYTEST.COM",0 ; The ASCIIZ name of self (this executable program).
MyFullName DB 256 * BYTE '$' ; Room for the canonizalized name, $-terminated.
ENDPROGRAM MYTEST
它被创建为"C:\WORK\MYTEST.COM",并在Windows 10/64位的DOSBox上运行:
C:\WORK>dir
MYTEST COM 284 Bytes.
C:\WORK>mytest
C:\WORK\MYTEST.COM REM this works as expected.
C:\WORK>d:
D:\>c:mytest
D:\MYTEST.COM REM this is wrong, no such file exists.
D:\>
有人知道如何在16位汇编程序中获取argv [0]的方法吗?
argv [0]
和“DOS可执行文件中的完整路径”是不同的东西。 我不确定如何获取任何一个。 - fuz