В моей 16-битной DOS-программе я хочу получить полный путь к экземпляру моей программы, используя прерывание DOS или его внутренние таблицы.Другими словами, я ищу эквивалент DOS функции Windows API GetModuleFileName (NULL)
Прерывание 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" и запущен в DOSBox на Windows 10 / 64bits:
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:\>
Кто-нибудь знает способ получить argv [0] в 16-битной ассемблерной программе?