【问题标题】:8051 Execution Time Little Confusion8051 执行时间有点混乱
【发布时间】:2015-08-03 14:34:07
【问题描述】:

如果使用 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 的每个循环中执行,但对此并不完全确定。

【问题讨论】:

  • 是的,它只是跳转到给定的位置并在那里继续执行,所以它将继续执行之后的任何操作。
  • 非常感谢小丑先生,现在我可以解决它了:)

标签: assembly time execution 8051


【解决方案1】:

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

跳转到地址意味着程序计数器(PC)设置为相应的。地址。然后从该地址继续执行。首先执行第一个地址的代码,递增PC,执行新地址的代码,递增……直到到达下一个分支(跳转命令)。然后将PC设置为跳转地址等等。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多