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

时间:2018-10-17 16:04:40

标签: assembly dos x86-16 tasm command-line-parsing

我正在使用TASM汇编器,但似乎找不到找到保存命令行参数甚至输出它们的方法。我尝试在int 21hdx=0081h期间进行ah=09h。尽管我已经读到它是这样做的方法,但是它什么也没做。

我添加了我认为可以复制并显示我键入的参数的代码:

mov dx, 81h
mov ah, 09h
int 21h

1 个答案:

答案 0 :(得分:6)

命令行位于Program Segment Prefix (PSP)中,从位置81h开始。在位置80h,您可以找到字符串的长度。该字符串始终以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