A86 を使用して 8086 用のコードを組み立てようとしています。問題を 4 行のコードに絞り込みました。
MOV BX, testz
ADD AL, [testz]
INT 20h
testz:
~ ^
#ERROR 16: Definition Conflicts With Forward Reference @@@@#
db ?
このコードのどこが間違っていると思いますか? アドレス自体を BX レジスタに移動し、testz アドレスのバイト値を AL に追加しています。
より大きなプログラムでは、#ERROR 13: Byte/Word Combination Not Allowed
.
しかし、はバイトlabel
の単語です。[label]
コンパイラがそれらを区別できないのはなぜですか?
ADD BL, [second]
MOV BX, second
~ ^
#ERROR 13: Byte/Word Combination Not Allowed
second:
~ ^
#ERROR 16: Definition Conflicts With Forward Reference @@@@#
db ?
バイト/ワードの競合が見られないためです。
私のコンパイラはオフセット testz と testz を同等に解釈します。バイトコードを調べましたが、違いはわかりませんでした。
MOV BX, testz
ADD AL, [BX]
上記のコードは機能しますが、これを 1 行で実行できる他の方法はありますか?
ADD AL, [testz]
[] にラベル名を入れると、コンパイラ a86 では受け入れられません。しかし、私はそれらが言語で許可されていると感じています。