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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 18, 2008 23:44 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
вопрос писал(а):
C нормальным порядком? А пример можно - как это?

В спф конструкция <# #S #> начинает форматное преобразование числа с конца да еще и числа двойной длины, что мягко говоря не слишком-то удобно, вот я и хочу сделать чтобы число форматировалось сначала.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Чет не получается как советовал Олег.
Код:
REQUIRE SEE lib\ext\disasm.f
VECT last_cmd

: finish ( addr --> ) last_cmd TO last_cmd ;

: (NOP) 0x90 C, ; IMMEDIATE \ это просто ноп
: (PUSH) 0x68 OR C, ; \ это обработчик PUSH

: NOP ['] (NOP) finish ;
: PUSH ['] (PUSH) finish ;

: tst
NOP
PUSH 123
;

SEE tst

CALL    572473  ( NOP )
CALL    572497  ( PUSH )
MOV     FC [EBP] , EAX
MOV     EAX , # 7B
LEA     EBP , FC [EBP]
RET     NEAR

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 19, 2008 07:15 
после PUSH 123 слово finish не вызывалось


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 19, 2008 09:42 
Не в сети

Зарегистрирован: Пн окт 15, 2007 17:24
Сообщения: 164
Откуда: Бийск
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
VoidVolker писал(а):
вопрос писал(а):
C нормальным порядком? А пример можно - как это?

В спф конструкция <# #S #> начинает форматное преобразование числа с конца да еще и числа двойной длины, что мягко говоря не слишком-то удобно, вот я и хочу сделать чтобы число форматировалось сначала.

дык, начинают то с конца как раз потому, что так УДОБНЕЕ преобразовывать "число<->строка" для позиционных систем счисления с постоянным основанием. Это конечно можно скрыть, но внутри то все равно то же самое останется - последовательное деление с полученим младшего разряда в остатке. А младший разряд находится в конце строки.

_________________
And so forth ...


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Варнак писал(а):
дык, начинают то с конца как раз потому, что так УДОБНЕЕ преобразовывать "число<->строка" для позиционных систем счисления с постоянным основанием.

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

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


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

Зарегистрирован: Пн окт 15, 2007 17:24
Сообщения: 164
Откуда: Бийск
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
chess писал(а):
Варнак писал(а):
дык, начинают то с конца как раз потому, что так УДОБНЕЕ преобразовывать "число<->строка" для позиционных систем счисления с постоянным основанием.

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

ну да, в частных случаях многое можно делать эффективнее, чем в универсальном алгоритме, который, в общем то, не требует даже предположений о двоичном кодировании чисел (которое подразумевается в словах о степенях двойки)

_________________
And so forth ...


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

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

Причин этому много, вот одна из причин:
Все слова которые строят код инструкции в режиме компиляции д.б. словами немедленного исполнения.
В режиме компиляции интерпретатор преобразует число в код, который в режиме исполнения положит это число на стек.
А нужно положить это число на стек в режиме компиляции, чего интерпретатор не умеет.

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


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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Варнак писал(а):
дык, начинают то с конца как раз потому, что так УДОБНЕЕ преобразовывать "число<->строка" для позиционных систем счисления с постоянным основанием. Это конечно можно скрыть, но внутри то все равно то же самое останется - последовательное деление с полученим младшего разряда в остатке. А младший разряд находится в конце строки.

Я говорил про формирование строки в <# # #>, а не про сам алгоритм конвертации.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

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

дык, значит не понял ты чуток.

Обычно ассемблерные определения в форте обрамляются словами: CODE END-CODE или им подобными. Вот END-CODE и выполняет last_cmd - это во-первых.
Во-вторых, ассемблерные команды должны исполняться, а не компилироваться, как это у тебя сделано:
Pretorian писал(а):
: tst
 NOP
 PUSH 123
;

то есть как минимум надо было перед NOP поставить [ и после PUSH ]

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


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

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

Забыл сразу предупредить, что цель была не на исполнение, а на компиляцию. С компиляцией кода, я более менее разобрался. Сейчас идет дигустация ФОРК, есть интересные идеи у Олега (кстати которые замедляют дигустацию по первости).

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


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

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

короче, то, что ты привел в качестве неработающего примера по сути является макросом!!
то есть только после его исполнения будет собран код.

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


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

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


Один из вариантов примерно таков:)

Код:
REQUIRE SEE lib\ext\disasm.f

VECT last_cmd

: finish ( addr --> ) TO last_cmd ;
: \END last_cmd ['] NOOP TO last_cmd ; IMMEDIATE

: (NOP)  0x90 C,   ; \ это просто ноп
: (PUSH) 0x68 C, , ; \ это обработчик PUSH

: NOP  last_cmd ['] (NOP)  finish ; IMMEDIATE
: PUSH last_cmd ['] (PUSH) finish ; IMMEDIATE

: tst
NOP
PUSH [ 123 ]
\END
;

SEE tst

Код:
5740E0 90          XCHG    EAX, EAX
5740E1 687B000000  PUSH    , # 7B
5740E6 C3          RET     NEAR
END-CODE   Ok


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Оно понятно, что вариант, но \END уже портит взляд, в форк твой пример выглядел бы так:
Код:
: tst
asm{
NOP
PUSH [ 123 ]
}

оно вроде наглядней. } это и был твой \END, а asm{ активизировал словарь в котором асмовые инструкции (ну что бы словарь FORTH не перегружать)..

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


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

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

гм, выглядеть синтаксически оно может как угодно, точнее как больше нравится тому, кто пишет код.
Пример того, как из постфиксного ассемблера можно сделать инфексный тут важнее, чем синтаксис слов CODE END-CODE ;)

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


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
mOleg писал(а):
Пример того, как из постфиксного ассемблера можно сделать инфексный тут важнее, чем синтаксис слов CODE END-CODE ;)

Так в этом я разобрался давно.

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


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

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


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

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


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

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