dos 8086(ライブラリを使用しない16ビットtasmまたはmasm)のハフマンアルゴリズムを使用してエンコード/デコード.COMプログラムを作成しており、2つのコマンドライン引数(inputfilenameとoutputfilename)を配列に格納して読み取る必要があります。入力ファイル、ハフマンエンコーディングを適用し、出力ファイルに書き込みます。
それらはアドレス80hに格納されていることを読みました。ここで、80hには引数の長さが含まれ、81h以降は引数自体が含まれます。したがって、最初の引数をinarg(および2番目の引数はまだ作業を開始していない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)のみを取得しようとしました。
そしてそれはうまくいかないので、私は間違いなく何か間違ったことをしています。これは経験豊富なプログラマーにとっては完全に混乱しているように見えるかもしれませんが、それはインターネットで見つけたリソースをうまく追跡しようとしなかったため、これまでに理解した概念のみを使用して実装に切り替えたためです。どんな助けでも大歓迎です、ありがとう。