Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб апр 20, 2024 06:50

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

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


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

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

Можно и отрезаться, но лучше это сделать потом, а сначала заняться делом. :D

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


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

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

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


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

Код:

lib/ext/disasm.f

123 456 : tst LITERAL LITERAL ;

SEE tst


Вопрос:
Какой существует способ определения местоположения чисел 123 и 456 в кодофайле
в приведенном фрагменте?


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

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

А зачем определять место этих чисел в коде?
Ну если надо, то можно написать слово, которое проверяет последовательность байтов начиная с адреса CFA для слова tst сначала на равенство 2-х байтов 456, затем после сравнения с 456 на равенство байта с 123.
Код:
lib/ext/disasm.f

123 456 : tst LITERAL LITERAL ;

0 VALUE FLAG
: search456,123
['] tst DUP 100 + SWAP
DO
     FLAG 0=
     IF
         I W@ 456 =
         IF
           CR  I . CR   1 TO FLAG
         THEN
     ELSE
          I C@ 123 =
          IF
               I . CR LEAVE
          THEN
     THEN
LOOP ;
HEX

STARTLOG
SEE tst
CR
search456,123
ENDLOG

CODE tst
570680 8945FC           MOV     FC [EBP] , EAX
570683 C745F8C8010000   MOV     F8 [EBP] , # 1C8
57068A B87B000000       MOV     EAX , # 7B
57068F 8D6DF8           LEA     EBP , F8 [EBP]
570692 C3               RET     NEAR
END-CODE

570686
57068B

Вместо 123 и 456 могут быть вектора, в которые перед поиском подставить значения. Кстати вместо tst также может быть вектор. Только мне непонятно - а зачем это надо?

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


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

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

А зачем определять место этих чисел в коде?


Эти числа были приведены только для примера:)

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


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

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

То есть слово tst это скелет, в который потом вложим конкретные значения. Вот для этого в Форте есть вектора.
Доопределение - параметризацию слов с помощью векторов можно делать. Можно и с помощью CREATE DOES>
это сделать. А отслеживать адреса в коде, как я предложил, в этом случае не годится. В коде может быть
много одинаковых чисел, совпадающих с нужными.

А в дальнейшем - это когда?

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
chess писал(а):
Доопределение - параметризацию слов с помощью векторов можно делать. Можно и с помощью CREATE DOES>
это сделать.

О самом-то главном я не сказал. Универсальное средство для доопределения таких слов - это многопроходная компиляция. Просто когда известны точные значения параметров и полностью определен скелет кода - делается еще один(завершающий) проход компилятора по тексту и все.

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


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

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


Хочу подключить к spf библиотечку расширения для неструктурных переходов.
Все почти работает, но загвоздка оказалась при использовании
двух LITERAL подряд:)


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

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

Неструктурные переходы - это GOTO, что-ли?
При подключении моего ассемблера это делается просто:
L: word
......
......
L1 JMP
......
......
L1:
......
......
L1 JMP
......
......
L;
JMP здесь это GOTO. Переходы оптимизируются по длине.
Пример:
Код:
0 VALUE S1
0 VALUE S2
L: TST
15 TO S1 20 TO S2
L1:
S1 S2 2DUP
MAX -ROT MIN DUP 1+ TO S2 - TO S1
S1
0= IF EXIT ELSE S1 . SPACE L1 JMP THEN
L;


STARTLOG

SEE TST
TST

ENDLOG
CODE TST
576230 C705F56157000F000000     MOV     5761F5  ( S1+5  ) , # F
57623A C7051562570014000000     MOV     576215  ( S2+5  ) , # 14
576244 8945FC           MOV     FC [EBP] , EAX
576247 8B15F5615700     MOV     EDX , 5761F5  ( S1+5  )
57624D 8955F8           MOV     F8 [EBP] , EDX
576250 A115625700       MOV     EAX , 576215  ( S2+5  )
576255 8945F4           MOV     F4 [EBP] , EAX
576258 8955F0           MOV     F0 [EBP] , EDX
57625B 8D6DF0           LEA     EBP , F0 [EBP]
57625E E8E9C0FDFF       CALL    55234C  ( MAX )
576263 8B5504           MOV     EDX , 4 [EBP]
576266 894504           MOV     4 [EBP] , EAX
576269 8B4500           MOV     EAX , 0 [EBP]
57626C 895500           MOV     0 [EBP] , EDX
57626F E8F4C0FDFF       CALL    552368  ( MIN )
576274 8D4801           LEA     ECX , 1 [EAX]
576277 890D15625700     MOV     576215  ( S2+5  ) , ECX
57627D F7D8             NEG     EAX
57627F 034500           ADD     EAX , 0 [EBP]
576282 A3F5615700       MOV     5761F5  ( S1+5  ) ,  EAX
576287 0BC0             OR      EAX , EAX
576289 8B4504           MOV     EAX , 4 [EBP]
57628C 8D6D08           LEA     EBP , 8 [EBP]
57628F 0F8506000000     JNE     57629B  ( TST+6B  )
576295 C3               RET     NEAR
576296 E917000000       JMP     5762B2  ( TST+82  )
57629B 8945FC           MOV     FC [EBP] , EAX
57629E A1F5615700       MOV     EAX , 5761F5  ( S1+5  )
5762A3 8D6DFC           LEA     EBP , FC [EBP]
5762A6 E8E9FFFDFF       CALL    556294  ( . )
5762AB E87CFBFDFF       CALL    555E2C  ( SPACE )
5762B0 EB92             JMP     576244                                             \ ЭТО GOTO
5762B2 C3               RET     NEAR
END-CODE  5  11  5  2  4  1  3  1  2

Конструкция L: WORD ...... L; - задает многопроходной тип компиляции для слова WORD.

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


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

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


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

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


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

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