如何用汇编语言读取命令行参数?

Sim*_*tis 2 assembly dos tasm command-line-parsing x86-16

我正在使用TASM汇编程序,我似乎找不到保存命令行参数甚至输出它们的方法.我试图做int 21hdx=0081hah=09h.它没有做任何事情,虽然我已经读到它是这样做的方式.

我添加了我认为应该复制的代码并显示我输入的参数:

mov dx, 81h
mov ah, 09h
int 21h
Run Code Online (Sandbox Code Playgroud)

rkh*_*khb 6

命令行位于程序段前缀(PSP)中,位于81h.在80h位置,您可以找到字符串的长度.这个字符串总是以a结束0Dh,而不是$(如果你想使用,请注意它int 21h/ah=09h).

在.exe程序开始时,段注册DSES指向该PSP.这就是为什么必须在程序开头用DATA段(mov ax, @data; mov ds, ax)加载DS的原因.我们跳过那一个:

MODEL small
.STACK 100h

.CODE

main PROC

    ; http://www.ctyme.com/intr/rb-2791.htm
    mov ah, 40h         ; DOS 2+ - WRITE - WRITE TO FILE OR DEVICE
    mov bx, 1           ; File handle = STDOUT
    xor ch, ch
    mov cl, ds:[0080h]  ; CX: number of bytes to write
    mov dx, 81h         ; DS:DX -> data to write (command line)
    int 21h             ; Call MSDOS

    ; http://www.ctyme.com/intr/rb-2974.htm
    mov ax, 4C00h       ; AH=4Ch, AL=00h -> exit (0)
    int 21h             ; Call MSDOS
main ENDP

END main
Run Code Online (Sandbox Code Playgroud)