Я пишу программу кодирования / декодирования .COM, использующую алгоритм Хаффмана для DOS 8086 (16-битный TEMM или MASM без использования библиотек), и мне нужно хранить 2 аргумента командной строки (inputfilename и outputfilename) в массивах, чтобы Я могу прочитать входной файл, применить кодировку Хаффмана и записать в выходной файл.
Я читал, что они хранятся по адресу 80h, где 80h содержит длину аргументов, а 81h и далее сами аргументы. Таким образом, идея заключается в том, чтобы сохранить первый аргумент в inarg (а второй в outarg, над которым я еще не начал работать)
Цель вызова прерывания 21h с подпрограммой 9 состояла в том, чтобы проверить, правильно ли я это сделал. (что не так)
Вот что у меня есть:
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, который является именем входного файла).
И это не работает, поэтому я определенно делаю что-то не так.
Это может показаться полным беспорядком любому опытному программисту, но это потому, что я безуспешно пытался следить за ресурсами, которые нашел в Интернете, и поэтому переключаюсь на его реализацию, используя только те концепции, которые я понимаю до сих пор.
Любая помощь будет принята с благодарностью,
Спасибо.