Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 07:41

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Описание битовых полей и работа с ними
СообщениеДобавлено: Чт дек 06, 2012 19:01 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
source file: bfields.fts
\ 23.11.2012 mOleg
\ Copyright [C] 2012 mOleg mOlegg@ya.ru
\ описание битовых полей

math/ asmadd.fts
math/ double.fts

\ по смещению disp битового поля длиной # бит определить маску для битового
\ поля, таким образом, что AND с данной маской оставит только нужные биты
: mask ( disp # --> mask ) BIT 1 - SWAP LSHIFT ;

\ создать описатель битового поля длиной # бит со смещением boff бит влево
: FLD[] ( boff # / name --> boff ) >L
CREATE DUP 32 /MOD , L@ mask , L> +
( base --> mask addr )
DOES> D@ ROT + ;

\ создать описатель битового поля длиной 1 бит со смещением boff бит влево
: BIT[] ( boff / name --> boff ) 1 FLD[] ;

?DEFINED test{ \EOF -- тестовая секция ---------------------------------------

test{
\ описание структуры битового поля
0 \ начальное битовое смещение
BIT[] first \ поле размером в один бит (битовый флаг)
3 FLD[] second \ поле размером в три бита
BIT[] thrid
BIT[] fourth
2 FLD[] fifth
2 FLD[] sixth
8 FLD[] seventh
2 FLD[] eighth
BIT[] nineth
DROP

10 first 10 <> THROW 0x00000001 <> THROW
10 second 10 <> THROW 0x0000000E <> THROW
10 thrid 10 <> THROW 0x00000010 <> THROW
10 fourth 10 <> THROW 0x00000020 <> THROW
10 fifth 10 <> THROW 0x000000C0 <> THROW
10 sixth 10 <> THROW 0x00000300 <> THROW
10 seventh 10 <> THROW 0x0003FC00 <> THROW
10 eighth 10 <> THROW 0x000C0000 <> THROW
10 nineth 10 <> THROW 0x00100000 <> THROW

}test

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Описание битовых полей и работа с ними
СообщениеДобавлено: Чт дек 06, 2012 20:39 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Заметил магическое число 32 :twisted:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Описание битовых полей и работа с ними
СообщениеДобавлено: Чт дек 06, 2012 21:18 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
dynamic-wind писал(а):
Заметил магическое число 32

ну, можно и так:
32 CONSTANT WIDTH
...

или, скажем:
0 >L -1 BEGIN 1 LSHIFT *WHILE 1 L+ REPEAT DROP L> CONSTANT WIDTH

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

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