访问MASM汇编程序(x86)中的命令行参数

1 x86 assembly dos masm

我正在x86 MASM汇编程序中编写程序,我需要访问启动程序时提供的命令行参数.我在多个网站上阅读,我可以在程序段前缀或PSP上访问这些参数.

作为测试,我尝试打印提供的参数的第一个字符.我的问题是(取决于我如何尝试访问PSP)我得到了错误的字符(或根本没有字符)作为回报.

...

mov ah, 21h
int 50h

mov ds, dx

mov ah, 0Ah
mov al, offset ds:[81h]
mov bh, 0
mov cx, 1
int 10h

...
Run Code Online (Sandbox Code Playgroud)

这是访问命令行参数的正确方法吗?我错过了什么?我尝试以几种不同的方式访问参数,所以我确定我的问题是由于缺乏对如何使用偏移量访问特定内存地址的信息的理解.

有人可以向我解释如何访问PSP上的命令行参数,或者我如何能够访问某个特定内存位置的内容?

vit*_*oft 7

; mov ah, 21h ; Why?
; int 50h     ; There is no such service defined in DOS.
; mov ds, dx  ; Contents of dx is undefined, don't copy it to ds.
Run Code Online (Sandbox Code Playgroud)

当realmode程序(EXE或COM)启动时,段寄存器DS和ES都加载了PSP的段地址.Pm中的Cmdline参数位于偏移81h.所以,是的,您可以将第一个字符加载到AL

mov al,ds:[81h]  
Run Code Online (Sandbox Code Playgroud)

但没有

mov al, offset ds:[81h] 
Run Code Online (Sandbox Code Playgroud)

因为你想要地址DS的字节内容:[81h]而不是它的偏移量(数字81h)加载到AL中.