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

Jan 10, 2005 8 Replies

Hello, All!



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



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



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

Привет Leha!

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

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

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

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

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

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! Вы писали 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

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

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,

Hello Oleksandr.

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

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

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

Alexey

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required