Сборка AVR: Как продолжить с инструкции ветки?

скажем, у вас есть инструкция ветвления, которая ведет вас к какой-то другой подпрограмме, возможно ли затем вернуться к вызывающей подпрограмме и продолжить?.. Что-то вроде этого:

prog:
cp r16,r17
breq true
...

true:
out PORTA,r16
HOW DO I RETURN TO EXECUTE THE REST OF prog?

Я надеюсь, что это иллюстрирует проблему.

Спасибо!


person J Smith    schedule 29.03.2014    source источник


Ответы (1)


Либо вернитесь назад с помощью безусловного перехода (rjmp), либо преобразуйте свой фрагмент кода в true в подпрограмму и преобразуйте свой breq в brne, чтобы перепрыгнуть через rcall true, который вы помещаете после него.

prog:
    cp r16,r17
    brne false
    rcall true
false:
    ...

 ...

true:
    out PORTA,r16
    ret
person Ignacio Vazquez-Abrams    schedule 29.03.2014
comment
Хорошо, а что, если бы у меня было несколько условий, скажем, «истина: ложь: возможно:», как я мог бы вернуться к процедуре вызова? Спасибо за вашу помощь! - person J Smith; 30.03.2014
comment
... Я имею в виду, допустим, что он разветвился на false, потому что он выполнил условие, как бы вы оттуда вернулись? - person J Smith; 30.03.2014
comment
Хорошо, я понимаю, я думаю, что таким образом вы не можете вернуться и попытаться снова разветвиться для других условий, если вы уже разветвились... Если это имеет смысл. - person J Smith; 30.03.2014
comment
Инструкции ветвления не меняют никаких флагов; просто выполните другую инструкцию перехода. - person Ignacio Vazquez-Abrams; 30.03.2014