0

可能重复:
NASM 16bit Intel

我正在为微处理器课程中的简单微处理器编写汇编代码。我正在编写一个程序:将六个元素相加,从地址 300 开始存储在内存中,但忽略那些 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 但 esp 可以是索引——并且可以将 2、4 或 8 的“比例”乘以索引。学习了 32 位寻址模式的人很高兴忘记了 16 位寻址模式……显然有些人已经忘记了。:)

最好的,弗兰克

于 2012-09-28T22:01:45.803 回答
0

好吧,我不确定,但我猜您正在尝试将扩展 (aX) 寄存器的内容复制到另一个寄存器的低位 (bL) 中。

可能下半部分只是扩展后的一半大小......

于 2012-09-28T20:16:43.253 回答