Разбор кода на СИ и Ассемблере

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Артур
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Разбор кода на СИ и Ассемблере

Сообщение Артур »

Привет!
Вот столкнулся с такими выражениями
на Ассемблере:

Код: Выделить всё

ldi r16,(1<<XMM1)|(0<<XMM0)
out XMCRB,r16
И вроде аналогичный
На Си:

Код: Выделить всё

XMCRB=(1<<XMM1)|(1<<XMM0);
*p=0xaa;
XMCRB=0x00;
*p=0x55;
Раньше такого мне не попадалось.
Помогите пожалуйста разобраться что здесь такое написано!
Особенно интересна грамматика что такое '|' и '*р'?
Спасибо!
Век живи! - Век учись!
ICQ-15B87330h
Реклама
L29Ah
Прорезались зубы
Сообщения: 225
Зарегистрирован: Пн июл 23, 2007 03:10:34
Откуда: СПб
Контактная информация:

Сообщение L29Ah »

А си учить не пробовали? *p это указатель, | это побитовое или.
Ꙑ!
Реклама
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Re: Разбор кода на СИ и Ассемблере

Сообщение tych »

Артур писал(а):Раньше такого мне не попадалось.
Можно прочитать на стр 5 под "www" и её вторую часть тоже.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Да, курсы это конечно всё хорошо... но если по быстрому
одинаковы только выот какие моменты
ldi r16,(1<<XMM1)|(0<<XMM0)
out XMCRB,r16
XMCRB=(1<<XMM1)|(1<<XMM0);
оба участка кода устанавливают в регистре XMCRB биты XMM1 и XMM0. Просто в АВР нельзя напрямую работать с регистрами I/O.
символ " | " означает логическое ИЛИ. Смысл выражения 1<<XMM1 таков: в регистре установить бит XMM1(в инклудах забито что во время компиляции вместо XMM1 надо подставить номер бита например 5). Значит в регистр надо записать все нули а пятый бит - 1. Получается что в регистр записывается 0b00100000 и потом прибавляется 0b00000001 (условимся что XMM1=5 а XMM0=0). При побитовом сложении получается 0b00100001. И это записываем в регистр. Если надо установить конкретные биты а остальные не изменять, тогда пишем XMCRB|=(1<<XMM1)|(1<<XMM0); Тогадайся почему?
There is only 10 kind of people: those who understands binary code and those who dont!!!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Артур
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Сообщение Артур »

Вопщем если в регистре XXX бит 5 называется Y а бит 0 называется Z и нам надо эти биты установить (1) то пишем:

Код: Выделить всё

ldi Rx,(1<<Y)|(1<<Z)
out XXX,Rx
после этого содержимое регистра XXX будет равно 00100001
Спасибо!
Век живи! - Век учись!
ICQ-15B87330h
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»