Закончились имена меток в сборке - PullRequest
10 голосов
/ 09 марта 2010

Heyo,

В моем классе в колледже мы пишем программы на ассемблере. До сих пор я никогда не ценил легкость Си.

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

Итак, в этом цикле while (пример) я использовал 1 метку для подпрограммы и еще 2 для самой петли. У меня закончились хорошие названия ярлыков для всех циклов и ветвей, которые я делаю в сборке. Что вы, ребята, делаете, чтобы оно было разнообразным и описательным?

Ответы [ 2 ]

13 голосов
/ 09 марта 2010

Большинство сборщиков допускают локальные метки:

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
2 голосов
/ 09 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...