Forth http://fforum.winglion.ru/ |
|
PICK наоборот http://fforum.winglion.ru/viewtopic.php?f=2&t=3039 |
Страница 2 из 2 |
Автор: | reijii [ Ср июн 13, 2018 16:12 ] |
Заголовок сообщения: | Re: PICK наоборот |
Я называл её 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 |
Автор: | Hishnik [ Ср июн 13, 2018 21:38 ] |
Заголовок сообщения: | Re: PICK наоборот |
Подумалось, что раз есть PICK, то должен быть и PLACE. |
Автор: | reijii [ Чт июн 14, 2018 00:03 ] |
Заголовок сообщения: | Re: PICK наоборот |
Ну да, должОн. Мне тогда ещё 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 |
Автор: | Victor__v [ Чт июн 14, 2018 08:58 ] |
Заголовок сообщения: | Re: PICK наоборот |
А где NIPN понадобился-то? Лично у меня далее 2-х NIP-ов никогда не заходило |
Автор: | reijii [ Чт июн 14, 2018 09:56 ] |
Заголовок сообщения: | Re: PICK наоборот |
Для удаления больше чем 1..2 элементов со стека. Для реализации BNF с чисткой стэка при откате Обычный DROPN уж больно толстый был. Написал свой аналог. |
Автор: | Victor__v [ Чт июн 14, 2018 10:16 ] |
Заголовок сообщения: | Re: PICK наоборот |
В смысле толстый? У меня на асме 3 инструкции заняло всего P.S. если откат понимается ближе к бектрекингу, то лучше уж вначале кода всунуть в стек возвратов что-то вроде : SP-BACK R> SP! ; : TEST SP@ >R ['] SP-BACK >R .... ; |
Автор: | reijii [ Чт июн 14, 2018 11:34 ] |
Заголовок сообщения: | Re: PICK наоборот |
Цитата: В смысле толстый? Код: : 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 @) и собственно адрес возврата. Почему не адрес стэка данных - не помню, надо было именно так. |
Автор: | Victor__v [ Чт июн 14, 2018 11:57 ] |
Заголовок сообщения: | Re: PICK наоборот |
Кода под рукой нету как-то так Нмного подумал и поправил LEA EBP, 4 [EAX*4] [EBP] MOV EAX, -4 [EBP] А зачем в вашем варианте SWAP Это не имеет смысла ж |
Автор: | reijii [ Чт июн 14, 2018 15:25 ] |
Заголовок сообщения: | Re: PICK наоборот |
Цитата: А зачем в вашем варианте SWAP Это не имеет смысла ж Да, действительно. Возможно там ещё что-то было, а может с оптимизатором воевал. Не помню детали. |
Автор: | Victor__v [ Чт июн 14, 2018 15:35 ] |
Заголовок сообщения: | Re: PICK наоборот |
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] |
Автор: | reijii [ Чт июн 14, 2018 19:39 ] |
Заголовок сообщения: | Re: PICK наоборот |
Цитата: Работает как-то не по стековой диаграмме Посмотрел - да стэковая диаграмма должна быть такой: ( .. X1 .. XN N -- .. N*4 ) Внутри кода за NIPN, всегда следует DROP. Намудрил с диаграммой. |
Автор: | Victor__v [ Чт июн 14, 2018 22:30 ] |
Заголовок сообщения: | Re: PICK наоборот |
Может лучше NDROP всё же? Две инструкции как никак |
Автор: | reijii [ Чт июн 14, 2018 23:47 ] |
Заголовок сообщения: | Re: PICK наоборот |
Функционально - да, красиво получается. Название - лучше DROPN всё-же. Первая N похожа на отрицание - типа мой мозг читает как NOT_DROP или NON_DROP или NEGATIVE_DROP. Но вот теперь сижу, чешу репу, зачем-же мне этот N*4 понадобился-то? |
Автор: | Total Vacuum [ Ср июл 08, 2020 00:41 ] |
Заголовок сообщения: | Re: PICK наоборот |
В Spectrum была пара команд PEEK/POKE. PEEK созвучен PICK и по смыслу близок. Почему бы не обозвать такое слово POKE? UPD. Пардон, увидел, что KPG такой вариант уже предлагал... |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |