0

重複の可能性:
NASM 16bit Intel

私はマイクロプロセッサコースで簡単なマイクロプロセッサのアセンブリコードに取り組んでいます。アドレス 300 からメモリに保存された 6 つの要素を合計するプログラムを作成していますが、80 hex 以上 ( >=80h) または 20 hex 以下 ( <=20h) の要素は無視します。偶数が追加されたかどうかを 6 回比較した後、プログラムは停止するはずです。

これが私のコードです:

    E 300 30 40 50 60 70 75
    A 100
100:MOV AX,2FF
103:ADD AX,1
106:CMP AX,306
109:JAE 11C
10B:MOV BL,[AX]
10E:CMP BL,20
111:JBE 103
113:CMP BL,80
116:JAE 103
118:ADD CL,BL
11A:JMP 103
11C:INT3

しかし、次の行でエラーが発生します。

10B:MOV BL,[AX]

誰かが理由を知っていますか?

4

2 に答える 2

5

16 ビット アドレッシング モードには、オプションのオフセット、オプションのベース レジスタ (bx、bp)、およびオプションのインデックス レジスタ (si、di) が含まれます。それでおしまい!「[ax]」はリストにありません。32 ビット アドレッシング モードはより柔軟です。任意の汎用レジスタをベースにすることができ、任意の GPR をインデックスにすることができます。また、2、4、または 8 の「スケール」にインデックスを掛けることができます。32 ビットのアドレッシング モードを学んだ人は、喜んで 16 ビットのアドレッシング モードを忘れてしまいます。:)

ベスト、フランク

于 2012-09-28T22:01:45.803 に答える
0

確かではありませんが、拡張 (aX) レジスターの内容を別のレジスターの下位部分 (bL) にコピーしようとしていると思います。

おそらく下部は拡張のちょうど半分のサイズです...

于 2012-09-28T20:16:43.253 に答える