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

 
 
> Задержка в несколько системных тиков на ассемблере
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
Ответов
scifi
сообщение Sep 26 2014, 16:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Haamu @ Sep 26 2014, 16:04) *
Подскажите, как можно уйти от метки, не увеличивая сильно число команд?

Наверное, можно вычислить абсолютное смещение для относительного перехода и указать его в команде.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 26 2014, 17:25
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(scifi @ Sep 26 2014, 20:31) *
Наверное, можно вычислить абсолютное смещение для относительного перехода и указать его в команде.

Ох уж это наследие трансляции программ в клетчатой тетради... Да вычисляется смещение само!
Цитата
не увеличивая сильно число команд
Метка в машинную команду не транслируется.

Сообщение отредактировал Genadi Zawidowski - Sep 27 2014, 08:15
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th July 2025 - 19:05
Рейтинг@Mail.ru


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