GNU AS и локальные метки

Do you have a question? Post it now! No Registration Necessary

Threaded View
Hello, All!

 Подскажите, как в GNU AS, в теле макроса создать локальную метку? Про
метки 1 2 3 ... я знаю, но хотелось бы метку с нормальным именем и
уникальную. Использую AS для программирования под ARM (если это что-то
меняет).

With best regards, Leha Bishletov.  E-mail: snipped-for-privacy@rol.ru



Re: GNU AS и локальные метки
Hello Leha.

10 Jan 05 09:30, you wrote to all:


 LB>  Подскажите, как в GNU AS, в теле макроса создать локальную метку? Про
 LB> метки 1 2 3 ... я знаю, но хотелось бы метку с нормальным именем и
 LB> уникальную.

Попробуй что-то вроде some_label\@:

'\@' - вроде как должно замениться счетчиком макросов.

==============================
`\@'
     `as' maintains a counter of how many macros it has executed in
     this pseudo-variable; you can copy that number to your output with
     `\@', but _only within a macro definition_.
==============================

А почему 1 2 3 не подходит?

 LB> Использую AS для программирования под ARM (если это что-то
 LB> меняет).

Hу ты я вижу круто развернулся, что аж макросы понадобились. Я под ARM
на асме только стартап написал. Остальное на Си.

Alexey


Re: GNU AS и локальные метки
Привет, Alexey!
Вы писали to Leha Bishletov on Mon, 10 Jan 2005 13:28:34 +0300:

 LB>>  Подскажите, как в GNU AS, в теле макроса создать локальную метку?
 LB>> Про метки 1 2 3 ... я знаю, но хотелось бы метку с нормальным
 LB>> именем и уникальную.
 AB> Попробуй что-то вроде some_label\@:
 AB> '\@' - вроде как должно замениться счетчиком макросов.

 Не работает ...

 AB> А почему 1 2 3 не подходит?

 Макрос получается длинный, переходы длинные (по тексту), боюсь вставлю
где-нибудь лишний "1" и не замечу.

 LB>> Использую AS для программирования под ARM (если это что-то
 LB>> меняет).
 AB> Hу ты я вижу круто развернулся, что аж макросы понадобились. Я под
 AB> ARM на асме только стартап написал. Остальное на Си.

 А я стартап не трогал, пока. Но мне надо достаточно быстро
(10мкс/канал) обрабатывать результаты измерения АЦП по 4-ем каналам.
Алгоритм обработки одинаковый, но номера каналов, управляемых выходов,
флагов и т.п. разные. Вот и получается, что проще написать макрос и
использовать его с разными параметрами. Если удастся уложиться по
времени, то и до стартапа дело дойдет :)

With best regards, Leha Bishletov.  E-mail: snipped-for-privacy@rol.ru



Re: GNU AS и локальные метки
10-Jan-05 14:26 Leha Bishletov wrote to Alexey Boyko:


 LB>>>  Подскажите, как в GNU AS, в теле макроса создать локальную метку?
 LB>>> Про метки 1 2 3 ... я знаю, но хотелось бы метку с нормальным
 LB>>> именем и уникальную.
 AB>> Попробуй что-то вроде some_label\@:
 AB>> '\@' - вроде как должно замениться счетчиком макросов.

LB>  Не работает ...

.macro foo cnt, lev
        ldi \cnt, \lev
b\@ :
        dec \cnt
        brne b\@
.endm

        foo R16, 10
        ; ---------------
        foo R17, 15

        .end

as из avr-gcc

C:\WinAVR-20040720\bin>avr-as.exe --version
GNU assembler 2.15 + coff-avr-patch (20030831)
Copyright 2002 Free Software Foundation, Inc.

   7
   8                            foo R16, 10
   8 0000 0AE0          > ldi R16,10
   8                    > b0:
   8                    >
   8 0002 0A95          > dec R16
   8 0004 F1F7          > brne b0
   9                            ; ---------------
  10                            foo R17, 15
  10 0006 1FE0          > ldi R17,15
  10                    > b1:
  10                    >
  10 0008 1A95          > dec R17
  10 000a F1F7          > brne b1
  11


LB>  А я стартап не трогал, пока. Но мне надо достаточно быстро
LB> (10мкс/канал) обрабатывать результаты измерения АЦП по 4-ем каналам.
LB> Алгоритм обработки одинаковый, но номера каналов, управляемых выходов,
LB> флагов и т.п. разные. Вот и получается, что проще написать макрос и
LB> использовать его с разными параметрами.

.macro foo channel, cnt, lev
        ldi \cnt, \lev
delay_\channel :
        dec \cnt
        brne delay_\channel
.endm

        foo 0, R16, 10
        ; ---------------
        foo 1, R17, 15

        .end

Те же, там же:

   8                            foo 0, R16, 10
   8 0000 0AE0          > ldi R16,10
   8                    > delay_0:
   8                    >
   8 0002 0A95          > dec R16
   8 0004 F1F7          > brne delay_0
   9                            ; ---------------
  10                            foo 1, R17, 15
  10 0006 1FE0          > ldi R17,15
  10                    > delay_1:
  10                    >
  10 0008 1A95          > dec R17
  10 000a F1F7          > brne delay_1

Т.е. номер канала "уникализирует" метки, начало имени которых несёт
смысловую нагрузку по алгоритму.

wbr,
--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua     */


Re: GNU AS и локальные метки
Привет, Oleksandr!
+0000 (UTC):

 LB>>>>  Подскажите, как в GNU AS, в теле макроса создать локальную
 LB>>>> метку? Про метки 1 2 3 ... я знаю, но хотелось бы метку с
 LB>>>> нормальным именем и уникальную.
 OR> .macro foo cnt, lev
 OR>         ldi \cnt, \lev
 OR> b\@ :
 OR>         dec \cnt
 OR>         brne b\@
 OR> .endm

 Этот фокус у меня все же не работает.

 OR> .macro foo channel, cnt, lev
 OR>         ldi \cnt, \lev
 OR> delay_\channel :
 OR>         dec \cnt
 OR>         brne delay_\channel
 OR> .endm

 А этот заработал :) Спасибо!

 Мой as:
GNU assembler version 2.14 (arm-elf) using BFD version 2.14 20030612

With best regards, Leha Bishletov.  E-mail: snipped-for-privacy@rol.ru



Re: GNU AS и локальные метки
Привет Leha!

10 Jan 05 09:30, Leha Bishletov писал All:

 LB>  Подскажите, как в GNU AS, в теле макроса создать локальную метку?
 LB>  Про метки 1 2 3 ... я знаю, но хотелось бы метку с нормальным именем
 LB> и уникальную.

    Метки 0 ... 9 - уникальные, as преобразует их в мести с уникальным номером.
Если имя кажется некрасивым - боюсь, придется потерпеть.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Слепой Пью, Глухой Ем...

Re: GNU AS и локальные метки
Привет Leha!

11 Jan 05 09:41, Leha Bishletov писал Oleksandr Redchuk:

 OR>> .macro foo cnt, lev
 OR>>         ldi \cnt, \lev
 OR>> b\@ :
 OR>>         dec \cnt
 OR>>         brne b\@
 OR>> .endm

 LB>  Этот фокус у меня все же не работает.

    И не должен. '@' - это символ начала комментария, поэтому ассемблер не
воспринимает символы начиная с '@' и до конца строки. Оставшееся "b\"
закономерно дает сообщение об ошибке.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Собака - вдруг человека...

Re: GNU AS и локальные метки
11-Jan-05 19:17 Alex Mogilnikov wrote to Leha Bishletov:

AM> 11 Jan 05 09:41, Leha Bishletov писал Oleksandr Redchuk:

 OR>>> .macro foo cnt, lev
 OR>>>         ldi \cnt, \lev
 OR>>> b\@ :
 OR>>>         dec \cnt
 OR>>>         brne b\@
 OR>>> .endm

 LB>>  Этот фокус у меня все же не работает.

AM>     И не должен. '@' - это символ начала комментария, поэтому ассемблер
AM> не
AM> воспринимает символы начиная с '@' и до конца строки. Оставшееся "b\"
AM> закономерно дает сообщение об ошибке.
Тьху ты, и ведь знаю же, что в армовской версии `@' как комментарий,
а `;' как разделитель команд, но забыл.
А в AVR-ской символ начала комментария `;'.
Значит в ARM-овской для счётчика макросов что-то другое должно быть.

wbr,
--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua     */


Re: GNU AS и локальные метки
Hello Oleksandr.

12 Jan 05 01:42, you wrote to Alex Mogilnikov:

 OR> Значит в ARM-овской для счётчика макросов что-то другое должно быть.

Колупнул исходники. Похоже, что нельзя.

Alexey


Site Timeline