累积器寄存器8051微处理器

问题描述 投票:0回答:1

我们的任务是找出代码中的问题。

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上都有一个未知的标签。我对这种类型的代码没有任何经验。我想是每个寄存器所占的位数问题,但我不确定。谁能给我解释一下。

谢谢你,我们的任务是找出问题所在

assembly cpu-registers 8051 accumulator
1个回答
1
投票

指令 MOV 可以用于不同的操作数。在你的例子中,汇编器会寻找一个 "即时值"。这可以是一个标签或一个字面数字。

对于我们人类来说,这两种 FFFFHFFH 看起来像字面数字,因为我们能识别十六进制数字和末尾的 "H"。

但软件使用了一个最简单的方法。如果第一个字符是小数点,操作数就是文字数字。如果是字母,则是一个标签。

这就是为什么EdSim51(或其汇编器,分别)把它们当作标签的原因。而由于没有定义任何一个标签,它就会报告你得到的错误。

然而,如果你在这两个标签前面加上一个零 "0",结果是 0FFFFH0FFH第一条指令可能会给你另一个错误。该值对指令来说太大了,指令要求8位宽度。

© www.soinside.com 2019 - 2024. All rights reserved.