如果使用的是DJNZ助记符,那么只执行与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时,它是只执行一次Label语句(MOV R3,#250),还是在每次执行重复标签时也在这里执行label?就像在其他编程语言中一样,我们总是有返回或中断语句,而在这个程序中没有类似的语句,所以我认为这里应该总是在每一个循环中再次执行,但对此并不完全确定。
发布于 2015-08-03 14:59:45
DJNZ递减指定的寄存器,如果寄存器不是零,则跳到指定的地址。在您的示例中,地址由标签指定。
跳转到入口意味着程序计数器(PC)被设置为resp。地址。然后执行继续从那个地址。首先在第一个入口执行代码,增加PC,在新地址执行代码,然后递增.直到到达下一个分支为止(跳转命令)。然后PC被设置为跳转地址等等。
知道了这一点,您就会明白DJNZ不会执行标签或标签旁边的命令。它将程序计数器设置为新值。处理器或控制器继续从此地址执行。因此,如果您再次跳到,很明显,您也执行这里和下面的NOPs。
https://stackoverflow.com/questions/31790060
复制相似问题