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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 09, 2007 07:40 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Варнак писал(а):
Цитата:
Так все-таки, важнее быстро или на форте?

Максимально быстро (это критерий), но на форте (это ограничение) ... :)
Понятно, что при для оптимизации придется конкретизировать форт, пока использую SPF.


Навскидку приходит такое решение на Форте перестановки байтов.

: BSWAP16 256 /MOD SWAP 256 * + ; \ для 16-битного слова
: BSWAP32 65536 /MOD SWAP 65536 * + ; \ для 32-битного переставление слов

P.S. Что сможет сделать оптимизатор из этого - тоже интересно:)


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

Зарегистрирован: Пн окт 15, 2007 17:24
Сообщения: 164
Откуда: Бийск
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Kopa писал(а):
: BSWAP32 65536 /MOD SWAP 65536 * + ; \ для 32-битного переставление слов

Это, пожалуй, байты не переставляет, а переставляет 16-ти разрядные части 32-хразрядного слова.

Переставляет байты, например такое:
: BSWAP32 256 /MOD 256 /MOD 256 /MOD >R >R >R 256 * R> + 256 * R> + 256 * R> + ;

_________________
And so forth ...


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
: BSWAP32 DUP 16 LSHIFT SWAP 16 RSHIFT OR
DUP 0xFF00FF00 AND 8 RSHIFT
SWAP 0x00FF00FF AND 8 LSHIFT OR ;


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

Зарегистрирован: Пн окт 15, 2007 17:24
Сообщения: 164
Откуда: Бийск
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Mihail писал(а):
: BSWAP32 DUP 16 LSHIFT SWAP 16 RSHIFT OR
DUP 0xFF00FF00 AND 8 RSHIFT
SWAP 0x00FF00FF AND 8 LSHIFT OR ;


Да, этот подход (маски, сдвиги и логические операции) должен быть самым быстрым.
А shift'ы - это стандартные слова в ныненшних фортах? Они, как я понимаю, обычно низкоуровневые.

А как насчет перекодировки массива в памяти (задача 2б из первого поста): нельзя ли соответствующими манипуляции с байтами в массиве добиться лучшего результата, чем применение операций "считывание на стек + bswap32 + запись в память" к каждому элементу?

_________________
And so forth ...


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Код:
: xC! 3 XOR C! ;
: WxSWAP (adr1,adr2 -- ) 4 0 DO 2DUP SWAP C@ SWAP  xC! 1.1 D+ LOOP ;

: MASSSWAP (Adr1,Adr2,Len-- ) \ длина массива в 32-хбитных словах
   0 DO WxSWAP LOOP ;

возможно, чего напутал, т.к. не проверял.
Но идея должна быть понятна - перестановка байтов в массиве
равнозначна инверсии двух младших бит адреса массива.

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


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

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

Код:
\ nb -- nl  преобразует верхнее значение на стеке данных
: BL~  A0123 ;

\ adr n --  преобразует массив 32-разрядных значений в памяти
: [BL~]  A-- $ 2 #A<< D=@P L1: B=@AD B0123 @AD=B $ 4 A-# L1 JNS 2DROP ;

\ Проверка
STARTLOG

SEE BL~
0x12345678 BL~ CR CR HEX U. DECIMAL

SEE [BL~]
CREATE ARR 0x12345678 , 0x12345678 , 0x12345678 , 0x12345678 ,
CR
ARR 4 DUMP
ARR 4 [BL~]
ARR 4 DUMP

лог
Код:
CODE BL~
591C60 0FC8             BSWAP   EAX
591C62 C3               RET     NEAR
END-CODE

78563412

CODE [BL~]
591C80 48               DEC     EAX
591C81 C1E002           SHL     EAX , 2
591C84 8B5500           MOV     EDX , 0 [EBP]
591C87 8B1C10           MOV     EBX , [EAX] [EDX]
591C8A 0FCB             BSWAP   EBX
591C8C 891C10           MOV     [EAX] [EDX] , EBX
591C8F 81E804000000     SUB     EAX , # 4
591C95 79F0             JNS     591C87
591C97 8B4504           MOV     EAX , 4 [EBP]
591C9A 8D6D08           LEA     EBP , 8 [EBP]
591C9D C3               RET     NEAR
END-CODE

591CC0   78 56 34 12  78 56 34 12  78 56 34 12  78 56 34 12 xV4.xV4.xV4.xV4.
591CC0   12 34 56 78  12 34 56 78  12 34 56 78  12 34 56 78 .4Vx.4Vx.4Vx.4Vx
Ok

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


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

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
chess писал(а):
На встроенном в СПФ пост-ассме реализуется просто(работает в обе стороны и big->little и little->big)


Где его можно найти в дистрибутиве SPF? или в devel SPF?


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

Зарегистрирован: Пн окт 15, 2007 17:24
Сообщения: 164
Откуда: Бийск
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Kopa писал(а):
chess писал(а):
На встроенном в СПФ пост-ассме реализуется просто(работает в обе стороны и big->little и little->big)


Где его можно найти в дистрибутиве SPF? или в devel SPF?

Если уже "встроенный", то его искать не надо, а вот где он описан, и есть ли такое описание? По приведенному примеру о синтаксисе можно, конечно, составить представление, но неполное.

_________________
And so forth ...


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Файлы для загрузки ассемблера можно взять отсюда:
http://www.chess2007.nm.ru/chess-forth/spf4.zip
В исходных текстах ассемблера какое-то описание его синтаксиса есть. Будут вопросы - отвечу.
Подкаталог ~chess из скаченного spf4.zip скопировать в devel на вашем компе и запустить скрипт spf4as.spf(вложен в spf4.zip).
В этом скрипте еще прописаны загрузка стексов и SEE, если стексы не будете использовать их подгрузку можно в тексте скрипта убрать.

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


Последний раз редактировалось chess Чт ноя 22, 2007 18:17, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 22, 2007 11:45 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
chess писал(а):
...
В исходных текстах ассемблера какое-то описание его синтаксиса есть. Будут вопросы - отвечу.


Один вопрос возник.
Есть проект Algorithm Builder ( http://home.tula.net/algrom/russian.html )
для AVR- контроллеров - на основе псевдомнемоник, похожего подхода
рисуется блок-схема алгоритма.

Например: шаблон R0=# там запишется # -> R0
Может есть смысл, немного изменить некоторые мнемоники как в приведенном проекте?


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Kopa писал(а):
Например: шаблон R0=# там запишется # -> R0
Может есть смысл, немного изменить некоторые мнемоники как в приведенном проекте?


Все такие изменения дело вкуса каждого - если хочешь, меняй сам(исходники же есть). Мне после некоторой работы на этом ассме тоже кое-что хочется изменить. Например, вместо $ 25 A=# писать A=#25 или #25=A, убрать символ $, допустить прямую подстановку имен констант и переменных и еще много другого.
Но останавливает отсутствие времени и относительно малое преимущество новых нововведений по сравнению с уже полученным преимуществом. Вот когда масса мыслей типа "надо сделать лучше" превысит критическую - тогда сразу все и сделаю. А вообще когда пишешь на этом ассме, то осознаешь, что Форт это обертка над командами ассма, причем в случае СПФ, очень тонкая обертка.

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
В посте по скачиванию ассма был указан неверный URL, в том-же посте и исправил его на верный.

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


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

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
на асме использовать ROL, MOVSX, MOVZX, NEG, XCHG главное параметры подобрать


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

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


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

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


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

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