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, FFFFH
和 MOV B, FFH
EdSim51 有一个
unknow label on both FFFFH and FFH.
我对此类代码没有任何经验。我认为这取决于每个寄存器的位数,但我不确定。谁能给我解释一下。
指令MOV
可以与不同的操作数一起使用。在您的例子中,汇编程序查找 "immediate value"。这可以作为标签或文字数字给出。
对于我们人类来说,FFFFH
和 FFH
看起来都是文字数字,因为我们能识别十六进制数字和末尾的 "H"。
但是本软件采用了一个最简单的方法:如果第一个字符是十进制数字,则操作数是一个数字。如果是字母就是标签。
这就是为什么 EdSim51(或其汇编程序)将它们作为标签。由于定义了 none 个标签,它会报告您收到的错误。
但是,如果您在两者前面都加上一个零“0”,导致 0FFFFH
和 0FFH
,第一个指令可能会给您另一个错误:The value is too large for the指令,需要 8 位宽度。
我们的任务是找出下一个代码中的问题:
ORG 0000H
MAIN:
CLR A
MOV A, FFFFH
MOV B, FFH
AGAIN: DEC A
DJNZ B, AGAIN
END
在 MOV A, FFFFH
和 MOV B, FFH
EdSim51 有一个
unknow label on both FFFFH and FFH.
我对此类代码没有任何经验。我认为这取决于每个寄存器的位数,但我不确定。谁能给我解释一下。
指令MOV
可以与不同的操作数一起使用。在您的例子中,汇编程序查找 "immediate value"。这可以作为标签或文字数字给出。
对于我们人类来说,FFFFH
和 FFH
看起来都是文字数字,因为我们能识别十六进制数字和末尾的 "H"。
但是本软件采用了一个最简单的方法:如果第一个字符是十进制数字,则操作数是一个数字。如果是字母就是标签。
这就是为什么 EdSim51(或其汇编程序)将它们作为标签。由于定义了 none 个标签,它会报告您收到的错误。
但是,如果您在两者前面都加上一个零“0”,导致 0FFFFH
和 0FFH
,第一个指令可能会给您另一个错误:The value is too large for the指令,需要 8 位宽度。