реклама на сайте
подробности

 
 
> "Локальные" метки в подпрограмме, Борьба за читабельность кода
Grigorij
сообщение Mar 31 2008, 11:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 10-03-07
Пользователь №: 26 038



Здравствуйте.

В процессе изучения ассемблера и написания программы для PIC16 возник вопрос - возможно ли создать локальную метку внутри подпрограммы?

Если рассматривать макросы, то такая конструкция:

Код
NAME_OF_MACRO MACRO1

    LOCAL _finally

         ;какие-либо действия
          goto _finally
         ;какие-либо действия

    _finally:
      
         ;какие-либо действия

ENDM

NAME_OF_MACRO MACRO2

    LOCAL _finally

         ;какие-либо действия
          goto _finally
         ;какие-либо действия

    _finally:
      
         ;какие-либо действия

ENDM


вполне работоспособна и хорошо читаема. Однако если имеется 2 подпрограммы, то такой код:

Код
NAME_OF_PROC1:

         ;какие-либо действия
          goto _finally
         ;какие-либо действия

    _finally:
      
         ;какие-либо действия

RETURN

NAME_OF_PROC2:

         ;какие-либо действия
          goto _finally
         ;какие-либо действия

    _finally:
      
         ;какие-либо действия

RETURN


является ошибочным.

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

В общем, прошу поделиться опытом решение описаной проблем (хотя конечно проблемой это назвать очень сложно smile.gif).

P.S. Используемая среда MPLAB IDE v.7.30
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
blackbit
сообщение Apr 10 2008, 11:22
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 5-03-07
Пользователь №: 25 892



Если речь о подпрограммах, то в случае одинакового кода после _finally несколько подпрограмм можно объединить в одну, имеющую несколько точек входа и одну точку выхода:
Код
NAME_OF_PROC1:

        ;какие-либо действия
          goto _finally

NAME_OF_PROC2:

        ;какие-либо действия
          goto _finally

NAME_OF_PROC3:

        ;какие-либо действия
          goto _finally


NAME_OF_PROC4:

        ;какие-либо действия

    _finally:
      
        ;какие-либо действия

RETURN


Получается мощно и экономно.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01459 секунд с 7
ELECTRONIX ©2004-2016