我们的任务是找出代码中的问题。
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在FFFFH和FFH上都有一个未知的标签。我对这种类型的代码没有任何经验。我想是每个寄存器所占的位数问题,但我不确定。谁能给我解释一下。
谢谢你,我们的任务是找出问题所在
指令 MOV
可以用于不同的操作数。在你的例子中,汇编器会寻找一个 "即时值"。这可以是一个标签或一个字面数字。
对于我们人类来说,这两种 FFFFH
和 FFH
看起来像字面数字,因为我们能识别十六进制数字和末尾的 "H"。
但软件使用了一个最简单的方法。如果第一个字符是小数点,操作数就是文字数字。如果是字母,则是一个标签。
这就是为什么EdSim51(或其汇编器,分别)把它们当作标签的原因。而由于没有定义任何一个标签,它就会报告你得到的错误。
然而,如果你在这两个标签前面加上一个零 "0",结果是 0FFFFH
和 0FFH
第一条指令可能会给你另一个错误。该值对指令来说太大了,指令要求8位宽度。