首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >8051执行时间小混乱

问8051执行时间小混乱
EN

Stack Overflow用户
提问于 2015-08-03 14:34:07
回答 1查看 102关注 0票数 0

如果使用的是DJNZ助记符,那么只执行与DJNZ相关的标签,或者执行从该特定标签到DJNZ助记符的所有标签。

即

代码语言:javascript
复制
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时,它是只执行一次Label语句(MOV R3,#250),还是在每次执行重复标签时也在这里执行label?就像在其他编程语言中一样,我们总是有返回或中断语句,而在这个程序中没有类似的语句,所以我认为这里应该总是在每一个循环中再次执行,但对此并不完全确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-03 14:59:45

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

跳转到入口意味着程序计数器(PC)被设置为resp。地址。然后执行继续从那个地址。首先在第一个入口执行代码,增加PC,在新地址执行代码,然后递增.直到到达下一个分支为止(跳转命令)。然后PC被设置为跳转地址等等。

知道了这一点,您就会明白DJNZ不会执行标签或标签旁边的命令。它将程序计数器设置为新值。处理器或控制器继续从此地址执行。因此,如果您再次跳到,很明显,您也执行这里和下面的NOPs。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31790060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档