Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт сен 20, 2018 18:20

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Quark: команды сканирования битов
СообщениеДобавлено: Пн фев 15, 2010 03:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
В системе команд x86 есть полезные команды BSF и BSR. Это команды определения первого установленного бита, начиная с младшего (BSF) и старшего (BSR) разрядов. Команды имеют источник и приемник, и в приемник попадает индекс бита источника, считая самый младший бит равным 0. При этом флаг нуля устанавливается в соответствии с успехом поиска хотя бы одного ненулевого бита. Однако для Форта два числа на стеке выглядят в данной ситуации избыточными. Вроде бы напрашивается решение о прибавлении к индексу единички, чтобы результат был в диапазоне 1-32 для найденных битов, и равен 0, если таковых нет. Польза от команд заключается в их аппаратной реализации в x86, что исключает необходимость искать более или менее эффективное решение на высоком уровне.
Пока предполагается синтаксис вида BSF, BSR, потому что подходящих мнемоник для этого случая не припомню. Разве что SCANLEFT, SCANRIGHT... но все равно безусловно подходящего варианта как-то не видится.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 15, 2010 09:54 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Хищник писал(а):
Пока предполагается синтаксис вида BSF, BSR, потому что подходящих мнемоник для этого случая не припомню. Разве что SCANLEFT, SCANRIGHT... но все равно безусловно подходящего варианта как-то не видится.

Я назвал бы LO-BIT и HI-BIT

Код:
: LO-BIT ( n -- i) A=L\A L1 J0= A++ L1: ;  SEE LO-BIT

: HI-BIT ( n -- i) A=H\A L1 J0= A++ L1: ;  SEE HI-BIT

\ TEST

CR
0 LO-BIT .
1 LO-BIT .
0 HI-BIT .
0x80000000 HI-BIT .

LOG
Код:
CODE LO-BIT
5AEB5F 0FBCC0           BSF     EAX , EAX
5AEB62 7401             JE      5AEB65
5AEB64 40               INC     EAX
5AEB65 C3               RET     NEAR
END-CODE
( 7 bytes, 4 instructions )


CODE HI-BIT
5AEB7B 0FBDC0           BSR     EAX , EAX
5AEB7E 7401             JE      5AEB81
5AEB80 40               INC     EAX
5AEB81 C3               RET     NEAR
END-CODE
( 7 bytes, 4 instructions )

0 1 0 32
Ok

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 15, 2010 11:16 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
chess писал(а):
Я назвал бы LO-BIT и HI-BIT

В принципе можно. У меня, однако, вызывают некоторую настороженность мнемоники с дефисами и неполным написанием слов. Потому что LO-BIT также можно написать как LOW-BIT, а также LOWBIT LOW_BIT LO_BIT и т.п.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 15, 2010 18:55 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Историческая ваксовая команда FFS: возвращяет номер младшего 1-го бита плюс 1 (то есть 1..33) либо 0
С тех пор у сишников есть ffs() и fls() (для поиска в обратном направлении).
Большой ПЛЮС этих названий: не надо придумывать новые аббревиатуры.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 15, 2010 19:15 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4945
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
а еще где-то было LBIT и RBIT , если не ошибаюсь

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 15, 2010 19:52 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Можно LOB HIB - вроде, нигде не попадалось и коротко... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 15, 2010 22:27 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
dynamic-wind писал(а):
Историческая ваксовая команда FFS: возвращяет номер младшего 1-го бита плюс 1 (то есть 1..33) либо 0
С тех пор у сишников есть ffs() и fls() (для поиска в обратном направлении).
Большой ПЛЮС этих названий: не надо придумывать новые аббревиатуры.

Хороший вариант.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 15, 2010 23:18 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
В принципе можно. У меня, однако, вызывают некоторую настороженность мнемоники с дефисами и неполным написанием слов.
именно поэтому всякому языку желательно опиратся на какие-то грамматически-лексические условности


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 13:26 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
dynamic-wind писал(а):
Большой ПЛЮС этих названий: не надо придумывать новые аббревиатуры.

А на счет таких, тоже полезных, конструкций:
Код:
SET-BIT ( n N -- n')   установить бит N
CLR-BIT ( n N -- n')   cброcить бит N
GET-BIT ( n N -- 0|1)  дать значение бита N
есть уже готовые названия?

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 15:03 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
set-bit = bis, or ('bit set' pdp-11)
clr-bit = bic ('bit clear' на arm, pdp-11)
get-bit = ldb

У pdp-10 были команды ldb (load byte) и dpb (deposit byte). они вообще могли извлекать/замещать битовое поле заданной длины, начиная с заданного бита. Потом в маклиспе и коммон-лиспе появились функции с такими названиями. Можно и в Форт такое перетащить ;)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 15:33 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
В форт лучше тащить из ассемблеров


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 20:42 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
вообще-то есть ещё мнемоники msb и lsb (most significant bit / least significant bit)
так что можно назввать слова как-нибудь вроде msbi и lsbi
(most significant bit index / least significant bit index)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 21:22 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
garbler писал(а):
так что можно назввать слова как-нибудь вроде msbi и lsbi
(most significant bit index / least significant bit index)

А чем еще может характеризоваться наиболее/наимение значимый бит, кроме
номера своего места? Пусть будет MSB и LSB, по-моему это лучше чем FFS/FLS.
Вот еще полезная операция:
Код:
CHANGE-BITS ( n N1 N2 -- n')  обмен битов

тоже длинное название.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 21:25 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Н-да, опыт показывает. что
1. длительная работа над названием необходима - во избежание легкомысленного
2. работа не должна быть в духе "а вот можно ещё" - признак плохой, бесконечно перебирать можно


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 00:42 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
dynamic-wind писал(а):
set-bit = bis, or ('bit set' pdp-11)
clr-bit = bic ('bit clear' на arm, pdp-11)
get-bit = ldb

Вообще можно, но оно делается с помощью AND и OR с соответствующей битовой маской, так что команда в Форте превращается в приятное дополнение. А вот поиск старшего/младшего значащего бита уже чуть посложнее, требует дополнительного внимания, тестирования слова в проекте, а также занимает лишнее время, поскольку пишется на чистом Форте. Отсылка к машинным командам тут разом убивает ворох проблем.


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

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


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

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


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

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