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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 145 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 19, 2007 13:39 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Предлагаю доделать WITHIN, что бы оно работало как (n low high) так и (n high low) пусть само слово разбирается че там больше, а че меньше, а для нас это будет просто диапазон.

_________________
Меня нет, не будет и не было.


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Pretorian писал(а):
Предлагаю доделать WITHIN, что бы оно работало как (n low high) так и (n high low) пусть само слово разбирается че там больше, а че меньше, а для нас это будет просто диапазон.

При ближайшем рассмотрении предложение неконструктивное.
Ну вот втупую делаю на своем ассме то, что ты хочешь:
Код:
L: within
    A=@P?
L1  J>  B=@P @P=A A=B
L1: $ 4 D=@P A-@P D-@P D-A Ac-A
    $ 8 P+
L;

Можно оптимальнее, но все равно хуже будет обычного WITHIN.
Сравниваем с cуществующим WITHIN
Код:
CODE within
592500 3B4500   CMP     EAX , 0 [EBP]
592503 7708     JA      59250D
592505 8B5D00   MOV     EBX , 0 [EBP]
592508 894500   MOV     0 [EBP] , EAX
59250B 8BC3     MOV     EAX , EBX
59250D 8B5504   MOV     EDX , 4 [EBP]
592510 2B4500   SUB     EAX , 0 [EBP]
592513 2B5500   SUB     EDX , 0 [EBP]
592516 2BD0     SUB     EDX , EAX
592518 1BC0     SBB     EAX , EAX
59251A 8D6D08   LEA     EBP , 8 [EBP]
59251D C3       RET     NEAR
END-CODE

CODE WITHIN
552B3C 8B5504   MOV     EDX , 4 [EBP]
552B3F 2B4500   SUB     EAX , 0 [EBP]
552B42 2B5500   SUB     EDX , 0 [EBP]
552B45 2BD0     SUB     EDX , EAX
552B47 1BC0     SBB     EAX , EAX
552B49 8D6D08   LEA     EBP , 8 [EBP]
552B4C C3       RET     NEAR
END-CODE

И что теперь когда надо и не надо везде использовать новый within?
Проще определить слово на форте или если надо на ассме эквивалентное этому
: >SWAP 2DUP > IF SWAP THEN ;
и использовать >SWAP WITHIN когда непонятно как граничные значения на стеке лежат, а когда понятно, то
просто SWAP WITHIN.

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


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
chess писал(а):
И что теперь когда надо и не надо везде использовать новый within?

Это было только предложение.


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

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


И что больше, -4 или 5 (FFFC или 0005)?
будем придумывать еще новый WITHIN, который для целых со знаком и целых без знака?
Или пусть слово само телепатирует, что от него хотел программист?

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


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

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

на самом деле D0= ругаться вообще не умеет. Его состояние стека не волнует.
а причина в том, что значение под вершиной стека, которое может быть произвольным, сверяется с нулем, и на его место возвращается результат сравнения, поэтому баланс стека остается не нарушен, ошибки не возникает.

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


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

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

: test 1 ;

test
А почему в стеке пусто??? Данный код нужно сохранить в файле, т.к. если набирать его вручную то в стеке будет 1.


повторить ситуацию у меня не удалось 8(
пробовал по-разному, всегда возвращает 1
и test в словаре находится.

да, желательно указывать, на каком ядре возникает ошибка full или smal, так как возможны варианты.

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


Последний раз редактировалось mOleg Чт дек 20, 2007 14:42, всего редактировалось 1 раз.

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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Pretorian писал(а):
А почему в стеке пусто??? Данный код нужно сохранить в файле, т.к. если набирать его вручную то в стеке будет 1.

В словаре два NoName появляется.

Запускаю spf4.05-701.exe файл

подозреваю, что дело в том, что в smal ядре в консоли не отображается глубина стека данных, в отличие от full.
попробуй после подключения файла по имени поставить .
или DEPTH .

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Pretorian писал(а):
: test 1 ;
test
А почему в стеке пусто??? Данный код нужно сохранить в файле, т.к. если набирать его вручную то в стеке будет 1.
В словаре два NoName появляется.
Запускаю spf4.05-701.exe файл
В СПФ работает, а в форке нет. Файл один и тот и запускаю одинаково.
Есть подозрение что форк не берет файл из командной строки.


В чем дело разобрался.
Для начала, речь идет о том, что при запуске форка с параметром в командной строке в виде файла,
содержимое стека данных, после обработки файла из командной строки не обнаруживается.
Это действительно так и сделано специально.
Данные из spf4.ini или из подключаемых таким образом файлов на вершине стека данных не должны оставаться.

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
переделал qif.f ( слова [IF] [ELSE] [THEN] )
корректно отрабатывает переключение режимов CASE-INS
вроде ошибок не содержит.
<pre>
\ 22-12-2007 ~mOleg
\ Copyright [C] 2007 mOleg mininoleg@yahoo.com
\ управление трансляцией входного потока. [IF] [IFNOT] [ELSE] [THEN]

?DEFINED C-Stack lib\add\csp.f

\ дополнительные слова для работы с CStack
\ чтение, замена, изменение содержимого первого параметра под вершиной
: CS[1]@ ( --> n ) 1 CSPick ;
: CS[1]! ( n --> ) CS> CSDrop SWAP >CS >CS ;
: CS[1]+! ( n --> ) CS> SWAP CS> + >CS >CS ;

VOCABULARY immediatest \ для ускорения поиска

\ пропускать все слова до первого опозанного в словаре qiff
: -undefined ( --> )
BEGIN NEXT-WORD DUP WHILE \ пока не конец потока
[ ALSO immediatest CONTEXT @ PREVIOUS ] LITERAL
SEARCH-WORDLIST WHILENOT \ пока не найдено
REPEAT EXECUTE EXIT
THEN -1 THROW ;

ALSO immediatest DEFINITIONS

VECT [IF] IMMEDIATE ( flag / ... --> )
VECT [IFNOT] IMMEDIATE ( flag / ... --> )
VECT [THEN] IMMEDIATE ( --> )
VECT [ELSE] IMMEDIATE ( --> | / ... )

ALSO FORTH THIS

\ завершение секции управления трансляцией текста
: [THEN] ( --> )
['] [IF] CS@ =
IF CS[1]@ -1 < IFNOT CSDrop CSDrop EXIT THEN
1 CS[1]+! -undefined
ELSE -1 THROW
THEN ; IMMEDIATE

\ альтернативная секция управления трансляцией текста.
\ если текст до [ELSE] транслировался - за [ELSE] текст пропускается
\ если текст до [ELSE] пропускался - за [ELSE] начинает транслироваться.
: [ELSE] ( --> )
['] [IF] CS@ =
IF CS[1]@ 1 + IFNOT FALSE CS[1]! EXIT THEN
CS[1]@ IFNOT TRUE CS[1]! THEN
-undefined
ELSE -1 THROW
THEN ; IMMEDIATE

\ начинает описание секции управления трансляцией текста,
\ если flag равн нулю, текст за [IFNOT] транслируется
\ иначе текст пропускается до первой лексемы, встреченной в
\ словаре immediatest
: [IFNOT] ( flag --> )
['] [IF] CS@ =
IF CS[1]@ IF -1 CS[1]+! -undefined EXIT THEN THEN
0 <> DUP >CS ['] [IF] >CS
IF -undefined THEN ; IMMEDIATE

\ начинает описание секции управления трансляцией текста,
\ если flag отличен от нуля, текст за [IF] транслируется
\ иначе текст пропускается до первой лексемы, встреченной в
\ словаре immediatest
: [IF] ( flag --> ) 0 = [COMPILE] [IFNOT] ; IMMEDIATE

ALSO FORTH ' [IF] PREVIOUS IS [IF]
ALSO FORTH ' [IFNOT] PREVIOUS IS [IFNOT]
ALSO FORTH ' [THEN] PREVIOUS IS [THEN]
ALSO FORTH ' [ELSE] PREVIOUS IS [ELSE]

PREVIOUS

\ EOF тест работоспособности

0 [IFNOT] s" ifnot test pased" [THEN] TYPE CR
1 [IF] s" if test pased" [THEN] TYPE CR
0 [IFNOT] s" ifnot-else test passed" [ELSE] s" ifnot-else test falied" [THEN] TYPE CR
0 [IF] s" if-else test failed" [ELSE] s" if-else test pased" [THEN] TYPE CR
-1 [IF] -1 [IF] s" if-if-then test passed" [THEN] [THEN] TYPE CR
0 [IF] [IFNOT] s" enclosure test failed" TYPE CR -1 THROW [THEN]
[ELSE] s" enclosure test passed"
[THEN] TYPE CR
1 [IF] s" test " TYPE
[ELSE] 1 [IF] s" 1 failed" TYPE -1 THROW [ELSE] s" 2 failed" TYPE -1 THROW [THEN]
s" 3 failed" TYPE -1 THROW
[THEN] s" passed" TYPE CR
</pre>


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Код:
\ получить произведение двух значений со знаком

\ результат - число одинарной точности

CODE * ( n1|u1 n2|u2 --> n3|u3 )

       IMUL DWORD subtop

       dheave CELL

     exit

  END-CODE


должно быть
Код:
CODE * ( n1 n2 --> n3 )


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Код:
CREATE-HEAP
DESTROY-HEAP

Совершенно бесполезны для девелоперов в форке.
Код:
HEAP-COPY

А если строка в куче уже не нужна, как ее сковырнуть от туда? по HeapFree???
(Добавленно)
Ага, нашел (FREE), за коментами не увидел сразу.


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Pretorian писал(а):
должно быть
Код:
CODE * ( n1 n2 --> n3 )

логично, но в СПФ так же 8)
уберу, кстати, мне кажется, что будет даже лучше так:

CODE * ( a b --> a*b )

Pretorian писал(а):
Код:

CREATE-HEAP
DESTROY-HEAP
Совершенно бесполезны для девелоперов в форке.

?почему?
кроме того, эти слова используются в ядре.

Pretorian писал(а):
А если строка в куче уже не нужна, как ее сковырнуть от туда? по HeapFree???
(Добавленно)
Ага, нашел (FREE), за коментами не увидел сразу.

8) да.

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


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
mOleg писал(а):
?почему?
кроме того, эти слова используются в ядре.

Ну как почему. Попробуем удалить кучу приложения и мы увидим что форк закрылся. При запуске форка куча уже есть и создать ее не получится. Так что удалить кучу и создать ее заного я не могу (про ядро разговора нет, тут без этого ни как). Или все таки эти слова работают с кучей для потока в котором мы в данный момент находимся, а не для процесса? Но тогда я не найду как THREAD-HEAP изменяется при смене потоков?


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Код:
\ Зарезервировать место для word в области данных и поместить туда char.

: W, ( word --> ) HERE 2 ALLOT W! ;


Примечание не соответствует действительности.


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

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

поток закроется, так как куча у каждого потока своя (в СПФ так же)
Pretorian писал(а):
При запуске форка куча уже есть и создать ее не получится.

можно создавать несколько куч в уже запущенном потоке.
Pretorian писал(а):
Или все таки эти слова работают с кучей для потока в котором мы в данный момент находимся, а не для процесса?

да, куча локальна для потока, а не для процесса
Pretorian писал(а):
Но тогда я не найду как THREAD-HEAP изменяется при смене потоков?

указатель на кучу потока находится в регистре edi

Pretorian писал(а):
Код:
\ Зарезервировать место для word в области данных и поместить туда char.
: W, ( word --> ) HERE 2 ALLOT W! ;

Примечание не соответствует действительности.
Вернуться к началу

да, действительно 8)

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


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

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


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

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


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

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