我正在使用TASM汇编器,但似乎找不到找到保存命令行参数甚至输出它们的方法。我尝试在int 21h
和dx=0081h
期间进行ah=09h
。尽管我已经读到它是这样做的方法,但是它什么也没做。
我添加了我认为可以复制并显示我键入的参数的代码:
mov dx, 81h
mov ah, 09h
int 21h
答案 0 :(得分:6)
命令行位于Program Segment Prefix (PSP)中,从位置81h开始。在位置80h,您可以找到字符串的长度。该字符串始终以0Dh
而不是$
结尾(如果要使用int 21h/ah=09h
,请注意这一点)。
在.exe程序开始时,段寄存器DS
和ES
指向该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