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

 
 
> Задержка в несколько системных тиков на ассемблере
Haamu
сообщение Sep 26 2014, 12:04
Сообщение #1


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Есть простой код на ассемблере:
Код
#define delay(tick) __asm("mov r0, %0 \n" "cycle: subs r0, #1 \n" " bhi cycle"::"r"(tick / 2))

Главная его проблема в том, что переход происходит на метку (cycle:), из за чего получается использовать его только один раз. При повторном использовании компилятор ругается, что такая метка уже существует.
Подскажите, как можно уйти от метки, не увеличивая сильно число команд?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Haamu
сообщение Sep 26 2014, 12:21
Сообщение #2


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Отлично, то что надо! Спасибо!
Вот, с небольшими поправками для точности:
Код
#define delay(tick) __asm("mov r0, %0 \n" "1: subs r0, #1 \n" " bhi 1b"::"r"((tick - 2) / 2))


А теперь, если не сложно, поясните пожалуйста, что значит 1b и чем такой вариант отличается от использования метки cycle?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 00:28
Рейтинг@Mail.ru


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