Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:40

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Система команд MCS-51
СообщениеДобавлено: 23 янв 2014, 10:25 
Заглядывает иногда

Зарегистрирован: 10 фев 2011, 19:07
Сообщения: 68
В AVR были такие замечательные команды как SBIC/SBIS/SBRC/SBRS которые позволяли проверить бит и проскочить следующую команду без создания метки (не придумывая новое её имя). Особенно это удобно при создании макросов.
На MCS-51 есть JC/JNC/JB/JNB/JBC в аргументах которых есть rel. Обычно пишут на его месте метку и переходят на неё. В описании указано что это смещение относительно следующей команды-попробовал написать числа(1...n), но компилятор ругается. Есть ли какая-нибудь возможность подсунуть(или заставить препроцессор ассемблера вычислить) в эти команды число, а не именную метку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд MCS-51
СообщениеДобавлено: 23 янв 2014, 11:21 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
Возможно, Вы не те числа подставляли (там же не любые можно) или синтаксис нарушили. Скомпилируйте с именной меткой, потом в ассемблерном листинге посмотрите, какое число и в каком формате там окажется.

Если же причина иная - приведите проблемный кусок кода и точный текст "возражений" компилятора к нему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд MCS-51
СообщениеДобавлено: 23 янв 2014, 12:07 
Заглядывает иногда

Зарегистрирован: 10 фев 2011, 19:07
Сообщения: 68
(МК C8051F12x. NOP-1 байт, JNC-2 байта)
Вот пример дизассемблерного текста для следующего кода:
Код:
JNC skip;
nop;
skip:
nop;

Код:
C:0x002B    5002     JNC      C:002F

Пробовал просто числа пихать как например 1, 2, 3(в описании было написано , что "rel- 8-битное смещение относительно первого байта следующей команды"), но не работало и пробовал PC+2, на что компилятор ругался. Потом опомнился и разобрался.

Итого решение JNC $+n, где n - смещение относительно расположения JNC, т.е. аналог приведенного кода без именной метки будет выглядеть так:
Код:
JNC $+3;
nop;
nop;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд MCS-51
СообщениеДобавлено: 23 янв 2014, 19:45 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 650
Откуда: Херсон
Stress писал(а):
...(не придумывая новое её имя). Особенно это удобно при создании макросов.

Для этого есть директива LOCAL.

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд MCS-51
СообщениеДобавлено: 23 янв 2014, 21:46 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
LOCAL вроде в асме для 51 серии не поддерживается. Это в тасме было.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд MCS-51
СообщениеДобавлено: 24 янв 2014, 01:46 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 650
Откуда: Херсон
Код:
Wait MACRO  a1
LOCAL LL1
  mov   r0  ,a1
LL1: 
  djnz  r0  ,LL1
ENDM

Wait 1
Wait 2

END
Show

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд MCS-51
СообщениеДобавлено: 24 янв 2014, 07:27 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4381
Откуда: г. Липецк
Для макроса можно и без LOCAL, просто перед меткой поставить $. Метка должна быть одна в строке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд MCS-51
СообщениеДобавлено: 24 янв 2014, 10:00 
Заглядывает иногда

Зарегистрирован: 10 фев 2011, 19:07
Сообщения: 68
Спасибо, я уже сам нашел и написал здесь решение. Спасибо AlexPM за вектор (Вроде так и делал, но не совсем), S_Alex за расширение кругозора (не знал об этой директиве)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB