Assembly AVR汇编:如何从分支指令继续?
假设有一条分支指令将您带到另一个子例程,那么是否可以返回到调用的子例程并继续?。。大概是这样的:Assembly AVR汇编:如何从分支指令继续?,assembly,avr,Assembly,Avr,假设有一条分支指令将您带到另一个子例程,那么是否可以返回到调用的子例程并继续?。。大概是这样的: prog: cp r16,r17 breq true ... true: out PORTA,r16 HOW DO I RETURN TO EXECUTE THE REST OF prog? 我希望这能说明问题所在 谢谢 使用无条件分支(rjmp)返回分支,或者将true处的代码位转换为子例程,并将breq转换为brne以跳过放置在其后面的rcall true prog: cp r16,
prog:
cp r16,r17
breq true
...
true:
out PORTA,r16
HOW DO I RETURN TO EXECUTE THE REST OF prog?
我希望这能说明问题所在
谢谢 使用无条件分支(
rjmp
)返回分支,或者将true
处的代码位转换为子例程,并将breq
转换为brne
以跳过放置在其后面的rcall true
prog:
cp r16,r17
brne false
rcall true
false:
...
...
true:
out PORTA,r16
ret
好吧,如果我有多个条件,说‘真:假:也许’,‘我怎么能跳回调用例程呢?谢谢你的帮助!。。。我的意思是,假设它分支为false,因为它满足了条件,你如何从那里返回?好的,我明白了,我想这样你就不能返回并尝试在其他条件下再次分支,如果你已经分支了。。。分支指令不改变任何标志;只需执行另一条分支指令。
prog:
cpse r16,r17
rjmp continue
out PORTA,r16
continue:
...
prog:
cp r16,r17
breq true ;branch if equal
brne false ;branch in not equal
Rest of the program
.
.
.
rjmp prog
false:
Do something
.
.
ret
true:
out PORTA,r16
;HOW DO I RETURN TO EXECUTE THE REST OF prog?
;Add a return statement, that will continue where you left
ret