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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - PICK наоборот
Автор Сообщение
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
В Spectrum была пара команд PEEK/POKE. PEEK созвучен PICK и по смыслу близок. Почему бы не обозвать такое слово POKE?

UPD. Пардон, увидел, что KPG такой вариант уже предлагал... :D
Сообщение Добавлено: Ср июл 08, 2020 00:41
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Функционально - да, красиво получается.

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

Но вот теперь сижу, чешу репу, зачем-же мне этот N*4 понадобился-то?
Сообщение Добавлено: Чт июн 14, 2018 23:47
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Может лучше NDROP всё же?
Две инструкции как никак
Сообщение Добавлено: Чт июн 14, 2018 22:30
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Цитата:
Работает как-то не по стековой диаграмме

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

Внутри кода за NIPN, всегда следует DROP. Намудрил с диаграммой.
Сообщение Добавлено: Чт июн 14, 2018 19:39
  Заголовок сообщения:  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]
Сообщение Добавлено: Чт июн 14, 2018 15:35
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Цитата:
А зачем в вашем варианте
SWAP
Это не имеет смысла ж


Да, действительно. Возможно там ещё что-то было, а может с оптимизатором воевал. Не помню детали.
Сообщение Добавлено: Чт июн 14, 2018 15:25
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Кода под рукой нету как-то так

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

А зачем в вашем варианте
SWAP
Это не имеет смысла ж
Сообщение Добавлено: Чт июн 14, 2018 11:57
  Заголовок сообщения:  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 @) и собственно адрес возврата. Почему не адрес стэка данных - не помню, надо было именно так.
Сообщение Добавлено: Чт июн 14, 2018 11:34
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
В смысле толстый?
У меня на асме 3 инструкции заняло всего

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

: TEST SP@ >R ['] SP-BACK >R .... ;
Сообщение Добавлено: Чт июн 14, 2018 10:16
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Для удаления больше чем 1..2 элементов со стека. Для реализации BNF с чисткой стэка при откате, блэкджеком и женщинами с низким уровнем социальной ответственности.

Обычный DROPN уж больно толстый был. Написал свой аналог.
Сообщение Добавлено: Чт июн 14, 2018 09:56
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
А где NIPN понадобился-то?
Лично у меня далее 2-х NIP-ов никогда не заходило
Сообщение Добавлено: Чт июн 14, 2018 08:58
  Заголовок сообщения:  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
Сообщение Добавлено: Чт июн 14, 2018 00:03
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Подумалось, что раз есть PICK, то должен быть и PLACE.
Сообщение Добавлено: Ср июн 13, 2018 21:38
  Заголовок сообщения:  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
Сообщение Добавлено: Ср июн 13, 2018 16:12
  Заголовок сообщения:  Re: PICK наоборот  Ответить с цитатой
Кажется, вопрос стоял только об названии...
Сообщение Добавлено: Пт июн 08, 2018 00:22

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


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