−−@
−−@ (читается «минус-минус-извлечь») — родное слово Каллисто. Косвенное чтение с преддекрементом.
−−@ ( a −− x ) Косвенное чтение по указателю в a с предварительным автоуменьшением (аналог КИП0..КИП3).
Обозначим буквой p переменную, адрес которой лежит на стеке и равен a. Это может быть настоящая переменная, созданная словом VARIABLE или FVARIABLE. Такие переменные называются указателями, т.к. их содержимое указывает на адрес памяти, к которому будет производиться обращение.
Слово −−@ сперва уменьшает p на единицу, отбросив дробную часть. Потом считывает адресную единицу (десятичное число или байт), расположенный по (новому) адресу, находящемуся в обновившейся переменной p.
Ввод слова −−@
В режиме NUM последовательно нажмите три клавиши − − ИП
История
Слово −−@ является каллистянским аналогом команд ПМК КИП0, КИП1, КИП2 и КИП3 — которые производили запись по косвенной адресации с прединкрементом регистров 0, 1, 2 и 3.
В отличии от команд КИП0…КИП3 слово −−@ позволяет организовать косвенную адресацию с преддекрементом по любому десятичному регистру (см. слово FVARIABLE) или двум последовательным байтовым регистрам (см. слово VARIABLE).
Реализация
2196 CAT0: MA KRMA PKM03 KGOTO9 … 2198 CAT2: KPRGM PKM03 KGOTO9 … 2213 PPAT0: RMA 1 + MB <−> 2214 KRMA RME ∗ KRMB + ; @ 2215 + ENT ; 1+ или 1− 2216 ENT RME / KINT KMA ; Старший байт 2217 RME ∗ − KMB ; Младший байт 2218 Cx GOTO PPAT00 2219 MMAT1: 1 +/− ; автодекремент десятичного регистра 2220 .DB 5cH ; FX<0 aka пропустить 1 байт 2221 PPAT1: 1 ; автоинкремент десятичного регистра 2222 PPAT1A: KRMA KINT + KMA 2223 1 2224 PPAT00: EE 4 − PX<0 CAT0 2225 FANS + PGOTO CAT2 2226 2227 ;#MinusMinusFetch 2228 ; −−@ ( a −− x ) Косвенное чтение по указателю в a с предварительным автоуменьшением (аналог КИП0..КИП3). 2229 ; 1. Вычесть единицу из содержимого ячейки с адресом a 2230 ; 2. Положить на стек x, расположенное по адресу, содержащемуся в этой ячейке (в байтовой области это адрес байта, а не ячейки) 2231 ; Подразумевается, что ячейка не пересекает границ областей памяти. 2232 ; Указателем может быть десятичный регистр, но не регистр функций. 2233 LMMAT: .DB 3 2234 .TEXT "−−@" ; ( адрес −− x ) 2235 .DW LPPAT 2236 MMAT: .DW JMMAT 2237 JMMAT: PKRM03 1 EE 4 − KX>=09 MA ; Защита от "указателей" в памяти программ 2238 1000 − FX>=0 MMAT1 ; 1000 быстрее, чем 1 ВП 3 2239 1 +/− ; 1− 2240 PGOTO PPAT0
Ссылки
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |