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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 29, 2006 11:39 
Не в сети

Зарегистрирован: Ср ноя 15, 2006 08:08
Сообщения: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
profiT писал(а):
А что за учебное заведение?

Да бы не позорить солидное учебное заведение (не все же такие как я и мои товарищи), тактично промолчу. (-:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт май 24, 2007 03:57 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Тоже тут, наверно, топику место.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 06, 2007 17:56 
Можно и так наверное. :D для машин с 32-разрядной ячейкой.
Код:
: ?msb-position ( x -- n )
   32 BEGIN
      SWAP DUP WHILE
         2* DUP 0> IF SWAP 1- ELSE DROP 1- EXIT THEN
      REPEAT
   NIP ;

Это можно оптимизировать наверное еще. Как по скорости не знаю, но результат верный.
Так и просится уменьшить число перестановок, но пока не знаю, подскажите...


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

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Вот пример функции реализованной на ASM'e в SwiftForth:
Код:
ICODE ?MSB-POSITION
   32 # ECX MOV
1 L:
   EBX EBX ADD
   2 L# JC
   1 # ECX SUB
   1 L# JNZ
2 L:
   ECX EBX MOV
   RET
END-CODE

Можно конечно пользоваться и стандартными словами Форта, правда размер кода раза в 2 больше:
Код:
: ?MSB-POSITION
   32 0 DO  DUP 0< IF I NIP 32 SWAP-  UNLOOP EXIT THEN 2*  LOOP ;

[/code]


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Решение на своем встроенном в СПФ постфиксном ассме

Код:
: №ст.бита  A=H\A ;
: №мл.бита  A=L\A ;

\ EOF
STARTLOG
SEE №ст.бита
SEE №мл.бита

0x12345678 №ст.бита
0x12345678 №ст.бита №мл.бита

Лог
Код:
CODE №ст.бита
591B90 0FBDC0           BSR     EAX , EAX
591B93 C3               RET     NEAR
END-CODE

CODE №мл.бита
591BB0 0FBCC0           BSF     EAX , EAX
591BB3 C3               RET     NEAR
END-CODE
Ok ( 28 2 )

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


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

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


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

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


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

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