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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

везде можно заменить на
Код:
IF SWAP THEN DROP

8) все правильно!


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

Зарегистрирован: Сб май 13, 2006 23:37
Сообщения: 380
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Эх, молодежь ...

: msb begin
dup dup 1- and
dup while
nip
repeat
drop
;


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
WingLion писал(а):
есть у меня подозрение, что странный код:
Код:
IF NIP DUP THEN DROP

везде можно заменить на
Код:
IF SWAP THEN DROP


Это я с расчетом на СПФ.
Код:
>: xx nip dup ; see xx

58AF80 894500      MOV     0 [EBP] , EAX
58AF83 C3      RET     NEAR
END-CODE   Ok
>: zz swap ; see zz

58AF90 8B5500      MOV     EDX , 0 [EBP]
58AF93 894500      MOV     0 [EBP] , EAX
58AF96 8BC2      MOV     EAX , EDX
58AF98 C3      RET     NEAR
END-CODE   Ok


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
forther писал(а):
: msb begin
dup dup 1- and
dup while
nip
repeat
drop
;

Почему-то у меня подозрение, что при нуле на входе этот код зациклится...

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Точно зациклится. Кстати, на основе дихотомии решение самое эффективное (из фортовских).
А еще можно посмотреть систему команд 80386+. Мнится мне, что там есть что-то готовое для получения индекса самого старшего и самого младшего из единичных и нулевых битов.


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

Зарегистрирован: Сб май 13, 2006 23:37
Сообщения: 380
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
WingLion писал(а):
Почему-то у меня подозрение, что при нуле на входе этот код зациклится...


не зациклится


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Mihail писал(а):
58AF90 8B5500 MOV EDX , 0 [EBP]
58AF93 894500 MOV 0 [EBP] , EAX
58AF96 8BC2 MOV EAX , EDX

можно ли заменить на

Код:
874500 xchg      eax,[ebp][00000] ; код получен в HIEW 6.03, 32битовый сегмент


если да - будет фортерам счастье со SWAP !!
странно только, почему это операцию (частую!!) раньше не соптимизировали...

_________________
With best wishes, in4.


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
in4 писал(а):
Код:
874500 xchg      eax,[ebp][00000] ; код получен в HIEW 6.03, 32битовый сегмент


если да - будет фортерам счастье со SWAP !!


Код:
xchg      eax,[ebp]

Много медленнее
Код:
     MOV   EDX, [EBP]
     MOV   [EBP], EAX
     MOV   EAX, EDX


Может на новых процах это уже не так?


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
WingLion писал(а):
Код:
: Чего-То 32 0 DO DUP 2/ OR LOOP 1+ 2/ ;

проверять надоть...


Решил я таки проверить то, что предложил с самого начала:

Код:
: xx 32 0 DO DUP 2/ OR LOOP 1+ 2/ ;
Ok
10 xx .
10 Ok
DECIMAL 10 xx .
8 Ok
122 xx .
64 Ok
255 xx .
128 Ok
60000 xx .
0 Ok
32767 xx .
16384 Ok
32768 xx .
0 Ok
0 xx .
0 Ok


Работает, только для чисел не более чем 2<sup>15</sup>-1
на 16-разрядном Форте
Надо только заметить, что у меня Форт при включении сразу в HEX режиме работает...

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


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

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

получится:
Код:
: xx DUP 2/ OR DUP 2/ 2/ OR
  DUP 2/ 2/ 2/ 2/ OR
  DUP 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ OR 
  DUP 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ OR
  1+ 2/ ;

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


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Для обработки отрицательных чисел следует
2/ заменить на U2/ .
: U2/ 1 RSHIFT ;
Вообще:
Код:
: xx
  DUP U2/ OR
  DUP U2/ U2/ OR
  DUP 4 RSHIFT OR
  DUP 8 RSHIFT OR   \ для 16 разрядных чисел
  DUP 16 RSHIFT OR \ для 32 разрядных чисел
  DUP U2/ XOR
;


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

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

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


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

Зарегистрирован: Ср ноя 15, 2006 08:08
Сообщения: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здрасьте всем. Дабы не флудить на форуме запостю в этот топик... В программинге полный профан, ничего "сильнее" VB (и то местами не осилил) А тут сессия подходит. Препод решил приобщить к "правильному программированию" и рассказал про Forth. Короче трабл в том что надо сделать задачку - "Алгоритм вычисления корня из целого числа" На Си вроде кое-как настрочили, а вот как его запрограмить в Forth. Заплутали в этом roll, pick, да и вообще синтаксис не понятный, блин. Может есть крутые программеры, что помогут и не дадут пропасть человеку (читай целой группе без 5 минут молодых специалистов! Жива еще студенческая солидарность?) Не могу догнать как, из примерно такого, можно что-то вынести, как высчитать корень?
1 ( n i)
0 ( n i k)
begin
2 pick > 0
while
.s
repeat ;


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
dream писал(а):
На Си вроде кое-как настрочили, а вот как его запрограмить в Forth.


Я алгоритма не знаю. Покажи на Си будет на Форте.


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

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Алгоритм Ньютона: X[0]=X/2; X[I+1]=X[I]/2+X/X[I]/2
Код на основе Баранова&Ноздрунова. У них было для 16-разрядной версии Форта; сейчас у нас 32 бита, поэтому можно проще:
Код:
: SQRT ( n -- s )  dup 2 < IF 0 MAX EXIT THEN
    DUP 2/  ( -- n s )
    BEGIN  2DUP / OVER  ( -- n s n/s s )
           + 2/ ( -- n s s' )
       SWAP OVER ( -- n s' s s' )
     - ABS 2 < UNTIL NIP ;

В скобках - комментарии. Набирать не обязательно ;)


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

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


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

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


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

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