2017-01-21 5 views
-1

に入力ファイルから定数を読む私は8086 ASM:DOSBoxを

cal   equ 16 
length  equ 1000 

のように、プログラム上の定数を宣言していると、私の質問は:私はこのような私の.txtファイルで定数を宣言することができます。

cal,cal,cal 
私は

mov bx, ax  ;file handler 
mov ah, 3fh  ;interrupt number 
mov cx, length 
mov dx, offset music 
int 21h 

を使用して、私はデータセグメントに宣言したファイルからの読み込みに

db tab length dup (0) 

読み込み中はすべて正常に動作しますが、ASCII文字数ではなく定数を読み込む必要があります。例えば、私が持っている場合:

tab[0]= ascii of c 
tab[1]= ascii of a etc 

を私は

tab[0]= 16 

は、ASMでDOSBoxをしている可能性がある必要があります。

cal 

それは読み込み?
私の英語のために申し訳ありません、あなたに事前に感謝;)。

+0

文字列 'cal'を値に変換するのはあなたの仕事です。他の言語と同じように。 'if(strcmp(token、" cal ")== 0)tab [i] = cal;' – Jester

+0

のようなコードを書く必要があります。"あなたは確かに特定の値をチェックするために定数を使うことができます:' cmp cx、cal'は基本的に 'cmp cx、16'を意味しますが、" asciiの値 "(99)は、 16にマップされていますか? –

答えて

0

あなたは多くのことを混乱させるようです。上記で定義した定数は、EQUを介してテキスト文字列からアセンブリ時間の整数値(プログラムをアセンブルするとき)に変換されます。テキストファイルから読み取ろうとしている文字列は、の整数値ではなく、まだのテキストです(必要な整数値へのマッピングはありません)。

可能であれば、バイナリファイルからこのマッピングを再構築することは非常に複雑です。

これはさえ可能であることを疑う -を組み立てる前に、別個の辞書を作成しない限り、 - cal16間のテキストベース>値の関係があってもアセンブラを組み立てるとしない前テキスト置換のためにプリプロセッサによって使用されるため、それのを知っている。したがって、デバッグ情報には存在しません(.PDB-ファイルなど)。

デバッグ情報がバイナリファイルに含まれている場合でも、それと共に配信されても​​、そのような関係を再構築するのは非常に複雑です。


ので、短い答えは:あなたは.txtファイルを解析し、ご希望の値を取得するために自分で16からcal(文字列)(INT)から辞書またはいくつかの他のマッピングを作成する必要が

関連する問題