Страница 1 из 1
Разбор кода на СИ и Ассемблере
Добавлено: Сб окт 06, 2007 11:03:56
Артур
Привет!
Вот столкнулся с такими выражениями
на Ассемблере:
И вроде аналогичный
На Си:
Код: Выделить всё
XMCRB=(1<<XMM1)|(1<<XMM0);
*p=0xaa;
XMCRB=0x00;
*p=0x55;
Раньше такого мне не попадалось.
Помогите пожалуйста разобраться что здесь такое написано!
Особенно интересна грамматика что такое '|' и '*р'?
Спасибо!
Добавлено: Сб окт 06, 2007 11:09:42
L29Ah
А си учить не пробовали? *p это указатель, | это побитовое или.
Re: Разбор кода на СИ и Ассемблере
Добавлено: Сб окт 06, 2007 11:13:37
tych
Артур писал(а):Раньше такого мне не попадалось.
Можно прочитать на стр 5 под "www" и её вторую часть тоже.
Добавлено: Сб окт 06, 2007 12:08:11
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); Тогадайся почему?
Добавлено: Вт окт 09, 2007 10:12:13
Артур
Вопщем если в регистре XXX бит 5 называется Y а бит 0 называется Z и нам надо эти биты установить (1) то пишем:
после этого содержимое регистра XXX будет равно 00100001
Спасибо!