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

 
 
 
Reply to this topicStart new topic
> Флаги в регистрах (установка-сброс)
C.S.
сообщение Aug 14 2009, 19:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Подскажите идиоту пожалуйста, под ночь туплю. Как бы красивее ставить-скидывать всякие флаги в регистрах? Я пишу в лоб:
Код
IN        ACC, MCUCR
;Скинем два младших бита
ANDI    ACC, 0b11111100
;Ставим нужные флаги
ORI        ACC, 0b00000010    ;по спаду!
OUT        MCUCR, ACC

Здесь ACC - определение для регистра (типа аккумулятор). Я знаю, можно заранее записать в регистр общий байт - сразу все флаги. А как быть, если их надо по одному во время работы программы скидывать-ставить?
Научите, как делать грамотно и аккуратно (чтобы хороший стиль написания был)
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Aug 14 2009, 19:34
Сообщение #2


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(C.S. @ Aug 14 2009, 22:25) *
А как быть, если их надо по одному во время работы программы скидывать-ставить?

наложить маску...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
C.S.
сообщение Aug 14 2009, 19:39
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



То-есть, красивого решения нет - и остаётся обычное: прочли, поменяли что надо, записали?
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 14 2009, 20:18
Сообщение #4


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

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



«Некрасивое» решение заверните в макрос, и будет красиво.
Код
    stbr Flags,DoRcv
    clbr Flags,RcvErr
Go to the top of the page
 
+Quote Post
adc
сообщение Aug 14 2009, 20:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(C.S. @ Aug 14 2009, 23:25) *
пишу в лоб:
Код
IN        ACC, MCUCR
;Скинем два младших бита
ANDI    ACC, 0b11111100
;Ставим нужные флаги
ORI        ACC, 0b00000010;по спаду!
OUT        MCUCR, ACC

Можно так:
Код
IN ACC, MCUCR
cbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC

или так:
Код
IN ACC, MCUCR
sbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC
Go to the top of the page
 
+Quote Post
C.S.
сообщение Aug 14 2009, 20:24
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Цитата(adc @ Aug 15 2009, 00:18) *
Можно так:
Код
IN ACC, MCUCR
cbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC

или так:
Код
IN ACC, MCUCR
sbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC

О! Большой респект) проглядел команды! Так нагляднее (если имена битов использовать)! Спасибо вам!
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 16 2009, 22:53
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(C.S. @ Aug 14 2009, 22:25) *
если их надо по одному во время работы программы скидывать-ставить?

Есть еще чудесные команды
BST - загрузка любого бита регистра фо флаг T
BLD - запись флага T в бит регистра.

BRTS переход если T установлен
BRTC переход если T сброшен.
ну и
SET установка T
CLT сброс флага T непосредственно.

пример
IN R16, PINB
BST R16, PB0
BRTS <Label_PB0_установлен>

Понимаю что это не совсем то о чем Вы спрашивали, но тем не менее эти команды часто дают очень большой выигрыш в битовых операциях. Особенно при организации программных флагов.
Go to the top of the page
 
+Quote Post
C.S.
сообщение Aug 17 2009, 20:26
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Спасибо! В копилку пойдёт!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:58
Рейтинг@Mail.ru


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