Heyo,
Мой класс в колледже имеет нас программы записи в блоке. Я действительно никогда не ценил простоты C до сих пор.
Теперь, когда я программирую в блоке, я часто должен делать while/for/if циклы и условные выражения с маркировками, например:
SKIP:
...
COMP:ADD R1, R1, #0 ;Check for equality
BRZ WHILEEND
... ;code inside the while loop
JMP COMP ;Return to while loop
WHILEEND:
...
Так, в этом цикле с условием продолжения (пример) я использовал 1 маркировку для подпрограммы и еще 2 для самого цикла. У меня закончились хорошие названия маркировки всех циклов и ответвлений, которые я делаю в блоке, что делает Вас, парни делают для хранения его, варьировался и описательный?
Большинство ассемблеров разрешают локальные метки:
routine_1:
...
.loop:
...
jne .loop
routine_2:
...
.loop:
...
jne .loop
...
jmp routine_1.loop
или анонимные метки, где вы можете повторно использовать одно и то же имя метки и ссылка «ближайший назад» или «ближайший вперед»:
routine_1:
...
@@:
...
jne @b
routine_2:
...
@@:
...
jne @b
( b для обратного направления)
Если ни один из них не поддерживается вашим ассемблером, я полагаю, вы могли бы префикс всех локальных меток с меткой рассматриваемая процедура:
routine_1:
...
routine_1.loop:
...
jne routine_1.loop
Во многих ассемблерах вы можете создать несколько меток с одним и тем же (обычно числовым) именем. Эта функция позволяет повторно использовать метки для ваших циклов, используя jmp 1f
для перехода вперед к ближайшей метке 1
или jmp 1b
для перехода назад к ближайшей метке 1
.