8051微处理器中的累加器寄存器

Accumulator register in 8051 microprocessor

我们的任务是找出下一个代码中的问题:

ORG 0000H
MAIN:
    CLR A
    MOV A, FFFFH
    MOV B, FFH
AGAIN: DEC A
    DJNZ B, AGAIN
END

MOV A, FFFFHMOV B, FFH EdSim51 有一个

unknow label on both FFFFH and FFH.

我对此类代码没有任何经验。我认为这取决于每个寄存器的位数,但我不确定。谁能给我解释一下。

指令MOV可以与不同的操作数一起使用。在您的例子中,汇编程序查找 "immediate value"。这可以作为标签或文字数字给出。

对于我们人类来说,FFFFHFFH 看起来都是文字数字,因为我们能识别十六进制数字和末尾的 "H"。

但是本软件采用了一个最简单的方法:如果第一个字符是十进制数字,则操作数是一个数字。如果是字母就是标签。

这就是为什么 EdSim51(或其汇编程序)将它们作为标签。由于定义了 none 个标签,它会报告您收到的错误。

但是,如果您在两者前面都加上一个零“0”,导致 0FFFFH0FFH,第一个指令可能会给您另一个错误:The value is too large for the指令,需要 8 位宽度。