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

Hello, All!

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

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

Reply to
Leha Bishletov
Loading thread data ...

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

Reply to
Alexey Boyko

Привет Leha!

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

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

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

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

Reply to
Alex Mogilnikov

Привет, 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

Reply to
Leha Bishletov
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,

Reply to
Oleksandr Redchuk

Привет, Oleksandr! Вы писали to "Leha Bishletov" snipped-for-privacy@rol.ru on Tue, 11 Jan 2005 04:40:20

+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

Reply to
Leha Bishletov

Привет 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] Алексей М. ... Собака - вдруг человека...

Reply to
Alex Mogilnikov
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,

Reply to
Oleksandr Redchuk

Hello Oleksandr.

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

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

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

Alexey

Reply to
Alexey Boyko

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.