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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Ср июн 13, 2018 16:12 
Не в сети

Зарегистрирован: Сб июл 23, 2016 23:15
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Я называл её TOSS
Код:
: TOSS, ( XM .. XN .. X0 X N -- XM .. X .. X0 ) \ PUT X TO N-TH PLACE IN STACK
  0x8B C, 0x4D C, 0x00 C,          \ MOV ECX, [EBP]
  0xFF C, 0xC0 C,                  \ INC ECX
  0x89 C, 0x4C C, 0x85 C, 0x00 C,  \ MOV [EAX*4+EBP], ECX
  0x8B C, 0x45 C, 0x04 C,          \ MOV EAX, [EBP+4]
  0x8D C, 0x6D C, 0x08 C,          \ LEA EBP, [EBP+8]
; IMMEDIATE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Ср июн 13, 2018 21:38 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6329
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
Подумалось, что раз есть PICK, то должен быть и PLACE.


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

Зарегистрирован: Сб июл 23, 2016 23:15
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Ну да, должОн.

Мне тогда ещё NIPN понадобился. Всего две инструкции, а действие оказывает сразу на N элементов:

Код:
: NIPN, ( .. X1 .. XN-1 XN N-1 -- .. XN )
  0x8D C, 0x04 C, 0x85 C, 0 , \ LEA  EAX, [EAX*4]
  0x8D C, 0x2C C, 0x28 C,     \ LEA  EBP, [EAX][EBP]
; IMMEDIATE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 08:58 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 551
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
А где NIPN понадобился-то?
Лично у меня далее 2-х NIP-ов никогда не заходило

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Сб июл 23, 2016 23:15
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Для удаления больше чем 1..2 элементов со стека. Для реализации BNF с чисткой стэка при откате, блэкджеком и женщинами с низким уровнем социальной ответственности.

Обычный DROPN уж больно толстый был. Написал свой аналог.


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 551
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
В смысле толстый?
У меня на асме 3 инструкции заняло всего

P.S.
если откат понимается ближе к бектрекингу, то лучше уж вначале кода всунуть в стек возвратов что-то вроде
: SP-BACK
R> SP!
;

: TEST SP@ >R ['] SP-BACK >R .... ;

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 11:34 
Не в сети

Зарегистрирован: Сб июл 23, 2016 23:15
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
В смысле толстый?

Код:
: DROPN ( x1 .. x[i] n -- x1 .. x[i-n] )
  1+ CELLS SP@ SWAP + SP! ;

SEE DROPN

57317F 8D048504000000   LEA     EAX , 4 [EAX*4]
573186 8945FC           MOV     FC [EBP] , EAX
573189 8D6DFC           LEA     EBP , FC [EBP]
57318C 8BC5             MOV     EAX , EBP
57318E 8B5500           MOV     EDX , 0 [EBP]
573191 8BCA             MOV     ECX , EDX
573193 8D0408           LEA     EAX , [EAX] [ECX]
573196 8D6D04           LEA     EBP , 4 [EBP]
573199 E83EFDFDFF       CALL    552EDC  ( SP! )
57319E C3               RET     NEAR
END-CODE   Ok

Цитата:
У меня на асме 3 инструкции заняло всего

Можно посмотреть?

Цитата:
если откат понимается ближе к бектрекингу

Да.

Цитата:
то лучше уж вначале кода всунуть в стек возвратов что-то вроде

Всовывается глубина стэка данных, адрес входного потока (>IN @) и собственно адрес возврата. Почему не адрес стэка данных - не помню, надо было именно так.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 11:57 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 551
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Кода под рукой нету как-то так

Нмного подумал и поправил
LEA EBP, 4 [EAX*4] [EBP]
MOV EAX, -4 [EBP]

А зачем в вашем варианте
SWAP
Это не имеет смысла ж

_________________
Цель: сделать 64-битную Нову под Винду


Последний раз редактировалось Victor__v Чт июн 14, 2018 15:37, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 15:25 
Не в сети

Зарегистрирован: Сб июл 23, 2016 23:15
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
А зачем в вашем варианте
SWAP
Это не имеет смысла ж


Да, действительно. Возможно там ещё что-то было, а может с оптимизатором воевал. Не помню детали.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 15:35 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 551
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
reijii писал(а):
Ну да, должОн.

Мне тогда ещё NIPN понадобился. Всего две инструкции, а действие оказывает сразу на N элементов:

Код:
: NIPN, ( .. X1 .. XN-1 XN N-1 -- .. XN )
  0x8D C, 0x04 C, 0x85 C, 0 , \ LEA  EAX, [EAX*4]
  0x8D C, 0x2C C, 0x28 C,     \ LEA  EBP, [EAX][EBP]
; IMMEDIATE


Только что вбил код
Работает как-то не по стековой диаграмме
на входе
1 2 3 4 5 6 3
на выходе
1 2 3 12

Хотя должно быть (если правильно понял роль слова)
1 2 6

Тогда уж

MOV EDX, EBP
LEA EBP, 4 [EBP] [EAX*4]
MOV EAX, [EDX]

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 19:39 
Не в сети

Зарегистрирован: Сб июл 23, 2016 23:15
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Работает как-то не по стековой диаграмме

Посмотрел - да стэковая диаграмма должна быть такой: ( .. X1 .. XN N -- .. N*4 )

Внутри кода за NIPN, всегда следует DROP. Намудрил с диаграммой.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 22:30 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 551
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Может лучше NDROP всё же?
Две инструкции как никак

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: PICK наоборот
СообщениеДобавлено: Чт июн 14, 2018 23:47 
Не в сети

Зарегистрирован: Сб июл 23, 2016 23:15
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Функционально - да, красиво получается.

Название - лучше DROPN всё-же. Первая N похожа на отрицание - типа мой мозг читает как NOT_DROP или NON_DROP или NEGATIVE_DROP.

Но вот теперь сижу, чешу репу, зачем-же мне этот N*4 понадобился-то?


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

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


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

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


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

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