8086 - 在数组中存储命令行参数

时间:2011-12-12 04:55:44

标签: assembly masm x86-16 huffman-code tasm

我正在使用针对dos 8086的Huffman算法编写一个编码/解码.COM程序(不使用库的16位tasm或masm),并且需要在数组中存储2个命令行参数(inputfilename和outputfilename),以便我可以读取输入文件,应用我的霍夫曼编码,并写入输出文件。

我读过他们存储在地址80h,其中80h包含参数的长度,81h包含参数本身。所以我的想法是将第一个参数存储在inarg中(第二个存储在outarg中,我还没有开始工作) 用子程序9调用中断21h的目的是检查我是否正确。 (事实并非如此)

这是我到目前为止所做的:

getCLargs proc near 

mov cx, [080h]        ; store memory address of command-line argument length
mov bx, 082h          ; store command-line arguments first byte

sub si,si  
sub di,di
next:         
mov dx, [bx]          ; store first byte of argument into dx 
mov inarg[si],dx      ; put it into the first byte of the array inarg
cmp cx, di            ; compare di to the length of the args
je print              ; if equal, done, jump to print
inc di                ; else: inc di
;    inc si
jmp next              ; do it again until cx=di
print:
mov ah, 09h           ; print content of inarg array to check it's right
mov dx, inarg
mov inarg[si+1], '$'  ; not sure whether I must terminate my string array with '$'
int 21h
done:    
ret
getCLargs endp

使用以下相关数据:

inarg dw ?
outarg dw ?

我已经开始使用基础知识而不考虑分隔符,并且只尝试获取第一个参数(inarg,即输入文件名)。

它不起作用,所以我肯定做错了什么。 对于任何有经验的程序员来说,这看起来可能是一团糟,但那是因为我试图跟踪我在互联网上找到的资源而没有成功,因此切换到仅使用我目前所理解的概念来实现它。 任何帮助将不胜感激, 谢谢。

1 个答案:

答案 0 :(得分:4)

您的代码有几个问题。而不是我描述如何解决它,你可能会认为你不必复制参数。它们已经存在于内存中,因此您可以将指针存储到参数及其长度中。如果你不想,你甚至不需要存储长度。相反,在每个参数的末尾将一个0字节放在内存中。

http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_13/CH13-9.html上的文章有一个很好的解析命令行的例子。

在16位版本的在线书籍Art of Assembly语言中,第13章中有关于解析命令行的部分。这本书可以在网上的几个地方找到。一个很好的链接(截至05/04/2016)是http://www.plantation-productions.com/Webster/www.artofasm.com/DOS/ch13/CH13-9.html#HEADING9-1