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

 
 
> Работа с битами в массиве.
add
сообщение Apr 18 2006, 10:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Прошу помощи-совета. unsure.gif

//Есть массив:
.dseg
massiv: .byte 64
//Есть адрес бита в массиве (от начала массива)
//к примеру:
.equ adr_bit=314
//вопрос:как установить или сбросить этот бит?
Можно поделить "adr_bit" на 8, получить адрес байта,
остаток-бит в байте. (тогда возникает вопрос как поделить на 8, это наверное отдельная тема...)
Может можно как-то попроще с битами работать?


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
_Bill
сообщение Apr 18 2006, 10:56
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Можно поделить "adr_bit" на 8, получить адрес байта,
остаток-бит в байте. (тогда возникает вопрос как поделить на 8, это наверное отдельная тема...)
Может можно как-то попроще с битами работать?

Деление на 8 эквивалентно сдвигу вправо на 3.
Go to the top of the page
 
+Quote Post
add
сообщение Apr 18 2006, 11:16
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Деление на 8 эквивалентно сдвигу вправо на 3.

Пасиба !
Да все так :-) . т.о. посление 3 бита в адресе собственно и есть бит в байте..как-то сразу недотумкал...осталось перевести из значение остатка в маску для установки/сброса бита и все ок.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Old1
сообщение Apr 19 2006, 06:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(add @ Apr 18 2006, 14:16) *
Да все так :-) . т.о. посление 3 бита в адресе собственно и есть бит в байте..как-то сразу недотумкал...осталось перевести из значение остатка в маску для установки/сброса бита и все ок.

Один из вариантов: зашить в СРАМ или ФЛЭШ таблицу:
0->1
1->2
2->4
3->8
4->16
5->32
6->64
7->128
и по ней остаток в маску и переводить.
Go to the top of the page
 
+Quote Post
add
сообщение Apr 19 2006, 08:07
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Ага так и сделаю ("зашить в СРАМ или ФЛЭШ таблицу"). Всем спасиба за участие smile.gif

Сообщение отредактировал add - Apr 19 2006, 08:07


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 20 2006, 14:56
Сообщение #6


кекс
******

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



Цитата
осталось перевести из значение остатка в маску для установки/сброса бита и все ок.


Есть также чудесные команды bst/bld для работы с битами. Загрузка и выгрузка бита в/из флага T.
единственный минус - номер бита задается константой...
Go to the top of the page
 
+Quote Post
add
сообщение Apr 21 2006, 06:39
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Есть также чудесные команды bst/bld для работы с битами

Да, есть. Пока правда не совсем понимаю их "чудесность" smile.gif в данном применении.
Вначале "зашить в СРАМ или ФЛЭШ таблицу.." потом определить бит и соотеветственно не менее "чудесными" командами sbr и cbr установить в регистре необходимый бит. потом записать этот байт о в massiv.

(вообще чесно говоря давно непользовался битом Т и несовсем понимаю для чего он нужен?! ведь можно взять регистр (>=R16) и работать с его битами(ипользуя к примеру для флагов)?! )


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 21 2006, 06:53
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



По опыту, его удобно пользовать для организации битовых переменных в нижних регистрах.

Загрузка единицы в 5 бит регистра R2:
set
bld r2,5

Загрузка нуля:
clt
bld r2,5

Копирование бита в Т:
bst r2,5

Ветвление:
sbrs r2,5
rjmp label

Плюс: не портится верхний регистр для загрузки константы с последующим and/or/eor.
Минус: bld/bst занимают 2 такта против 1-тактовой ldi.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
add
сообщение Apr 21 2006, 07:43
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
По опыту, его удобно пользовать для организации битовых переменных в нижних регистрах

ага, согласен.

Цитата
не портится верхний регистр для загрузки константы с последующим and/or/eor

да, если есть катастрофическая нехватка регистров smile.gif..

Сообщение отредактировал add - Apr 21 2006, 07:45


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post

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

 


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


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