8051执行时间小混乱

时间:2015-08-03 14:34:07

标签: assembly time execution 8051

我是否可以得到你的帮助,如果混淆使用DJNZ助记符,那么只会执行随附的标签,或者执行该特定标签到DJNZ助记符的所有标签?

DELAY:  MOV R5,#100
BACK:   MOV R2,#200
AGAIN:  MOV R3,#250
HERE:   NOP
NOP
NOP
DJNZ R3,HERE
DJNZ R2,AGAIN
DJNZ R5,BACK

因此,当执行DJNZ R2时,它只执行AGAIN Label语句(MOV R3,#250),或者每次执行AGAIN标签时它也会执行HERE标签?和其他编程语言一样,我们总是有return或break语句,而在这个程序中没有类似的东西,所以我认为HERE应该始终在AGAIN的每个循环中执行,但不能完全确定。

1 个答案:

答案 0 :(得分:0)

如果寄存器不为零,则DJNZ递减指定的寄存器然后跳转到指定的地址。在您的示例中,地址由标签指定。

跳转到地址意味着程序计数器(PC)设置为分配。地址。然后从该地址继续执行。首先执行第一个地址中的代码,递增PC,在新地址执行代码,递增......直到它到达下一个分支(跳转命令)。然后将PC设置为跳转地址,依此类推。

了解这一点,您将了解DJNZ不执行标签或标签旁边的命令。它将程序计数器设置为新值。处理器或控制器从该地址继续执行。所以如果你跳到AGAIN,很明显你也执行HERE和它下面的NOP。