MOV BL,[AX]错误

时间:2012-09-28 20:11:48

标签: assembly x86-16 systems-programming microprocessors

  

可能重复:
  NASM 16bit Intel

我正在为微处理器课程中的简单微处理器编写汇编代码。我正在编写一个程序:对从地址300开始存储在内存中的六个元素求和,但忽略那些80或以上(>=80h)或20十六进制或更低(<=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]

有谁知道为什么?

2 个答案:

答案 0 :(得分:5)

16位寻址模式包含可选的偏移量,可选的基址寄存器(bx,bp)和可选的索引寄存器(si,di)。而已! “[ax]”不在列表中。 32位寻址模式更灵活 - 任何通用寄存器都可以是基数,任何GPR,但esp可以是​​索引 - 并且“2”,“4”或“8”的“比例”可以乘以索引。已经学会了32位寻址模式的人很高兴忘记16位寻址模式......显然有些人有。 :)

最佳, 弗兰克

答案 1 :(得分:0)

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

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