Исчерпывание маркировки называет в блоке

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 для самого цикла. У меня закончились хорошие названия маркировки всех циклов и ответвлений, которые я делаю в блоке, что делает Вас, парни делают для хранения его, варьировался и описательный?

10
задан Carl Norum 9 March 2010 в 01:51
поделиться

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
14
ответ дан 3 December 2019 в 21:59
поделиться

Во многих ассемблерах вы можете создать несколько меток с одним и тем же (обычно числовым) именем. Эта функция позволяет повторно использовать метки для ваших циклов, используя jmp 1f для перехода вперед к ближайшей метке 1 или jmp 1b для перехода назад к ближайшей метке 1 .

2
ответ дан 3 December 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: