How to pass/retrieve DOS command-line parameters in a 16-bit assembly program?

前端 未结 2 1559
天涯浪人
天涯浪人 2021-02-09 19:34

I am writing some little tools for MS-DOS. Now I\'m writing a Shutdown.com, like for Windows XP and greater. I have already written the entire code, now I just need

2条回答
  •  北荒
    北荒 (楼主)
    2021-02-09 20:20

    There is no specific API to retrieve the command-line in MS-DOS. Instead, you have to read the value from the appropriate offset of the Program Segment Prefix (PSP), which is a data structure that DOS uses to store program-specific data.

    At offset 80h, there is a 1-byte value that gives the length of the command-line arguments. The actual command-line argument string starts at offset 81h, and can be up to 127 bytes in length. You know how long it is based on the value at offset 80h, but it will also be terminated with a carriage return (0Dh).

    You can use these offsets relative to the pointer in the DS register when the program is first executed. Otherwise, you call INT 21h with AH set to 62h to retrieve a pointer to the current PSP in the BX register. (Function 62h requires DOS 3 or later; on DOS 2, you can use the undocumented function 51h).

    The old, 16-bit DOS version of Randall Hyde's Art of Assembly is available for free online (in HTML and PDF formats). In Chapter 13, section 13.3.11 describes the PSP, and the following two sections (13.3.12–13) explain how to access and parse command-line parameters, including sample code.

提交回复
热议问题