Warning: touch() [function.touch]: Unable to create file /home/starterkit/starterkit.ru/html/error.log because Permission denied in /home/starterkit/starterkit.ru/html/errorhandler.php on line 51
[Решено]Метки внутри asm() в Си. - ARM - Форум - starterkit.ru
Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » ARM
[Решено]Метки внутри asm() в Си.
Maxizar
Добавлено 16.02.2012 11:12 Редактировалось 16.02.2012 12:03
0
Сообщение: 1
Maxizar
0

Пункты: 424
Регистрация: 04.07.2011
Собственно Сабж.
До этого программа писалась на Си, потом часть оптимизировалась на ASM под ARM. Асм-вые функции писались в отдельном листинге и тупо линковались.

Сейчас хочеться сделать по человечески в секции asm(), но вскрылась проблема с метками, код перенесенный из листинга в asm() не воспринимает метки.
просто в лоб (копипаст из листинга асм-а):

Не работает:
Код
asm volatile (
".Y: \n"
" ldr r0, [r3], #4 \n"
" mov r7, r0 \n"
"subs r1, r1, #1 \n"
" bne Y \n" //переход на метку
);



Говорит, метка уже определена, подумал, может и правда дал замудренное имя, таже песня :(

Прочитал, мол метки, должны быть вне asm(), тоже не работает. говорит метка (идентификатор) не определен.

Не работает:
Код

Y: //тобишь метка Си
asm volatile (
" ldr r0, [r3], #4 \n"
" mov r7, r0 \n"
"subs r1, r1, #1 \n"
" bne Y \n" //переход на метку
);


Подскажите как правильно работать с метками в блоке asm() для ARM-а под GCC.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 16.02.2012 11:45 Сообщение: 2
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Цитата
asm volatile (
".Y: \n"
" ldr r0, [r3], #4 \n"
" mov r7, r0 \n"
"subs r1, r1, #1 \n"
" bne Y \n" //переход на метку
);


А что за точка перед Y ? в конце строки нужно ставить \n\t, в джампах нужно указывать f|b (forwards or backwards), в качестве локальных меток используйте циферки
asm volatile (
"1: ldr r0, [r3], #4 \n\t"
"mov r7, r0 \n\t"
"subs r1, r1, #1 \n\t"
" bne 1b \n\t" //переход на метку
);
Спуститься к концу Подняться к началу
Персональная информация
Maxizar
Добавлено 16.02.2012 12:06 Сообщение: 3
Maxizar
0

Пункты: 424
Регистрация: 04.07.2011
Да точка, это ошибка...
Но еще одна ошибка была чуть выше в коде, поспишил я, приношу свои извинения.

Спасибо.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » ARM