如何在程序集中退出for语句

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

此代码的目的是将打开的位闪烁三次,退出循环并将其关闭。目前,代码似乎处于无限循环中,并且在计数为0后不会退出循环

                   mov.b   #0x00,&P2REN ;

                   mov.b   #0xFF,&P2OUT ;
                   ;mov.b   #3, r5
                   .bss    i,3 





                                     mov.w   #3,&i        ; 



                   dec.w   &i           ; i--,
                   jnz     for          ; back to for loop
  for_Done:

                    delayloop:                 dec.w   r15          ;
                   jnz     delayloop    ;jump if not zero to delayloop
                   jmp     for         ;jump to the for
                   ;jmp    for_Done
assembly msp430
1个回答
1
投票

就像提到的@PeterCordes一样,最后一个命令是无条件跳转到循环。

该循环递减变量i,在从结束跳转到循环之后为0。它不会再次用3初始化。在循环中递减i之后,它将是负数并且将保持超过32000次迭代(w = 16Bit?)。比它继续到最后一跳,所有都将从新的开始。

你真的需要最后一跳吗?如果你达到这个代码,你可以肯定i == 0

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