Sim*_*tis 2 assembly dos tasm command-line-parsing x86-16
我正在使用TASM汇编程序,我似乎找不到保存命令行参数甚至输出它们的方法.我试图做int 21h而dx=0081h和ah=09h.它没有做任何事情,虽然我已经读到它是这样做的方式.
我添加了我认为应该复制的代码并显示我输入的参数:
mov dx, 81h
mov ah, 09h
int 21h
Run Code Online (Sandbox Code Playgroud)
命令行位于程序段前缀(PSP)中,位于81h.在80h位置,您可以找到字符串的长度.这个字符串总是以a结束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
Run Code Online (Sandbox Code Playgroud)