−−!
−−! (читается «минус-минус-присвоить») — родное слово Каллисто. Косвенная запись с преддекрементом.
−−! ( y a −− ) Косвенная запись y по указателю в a с предварительным автоуменьшением (аналог КП0..КП3).
Обозначим буквой p переменную, адрес которой лежит на стеке и равен a. Это может быть настоящая переменная, созданная словом VARIABLE или FVARIABLE. Такие переменные называются указателями, т.к. их содержимое указывает на адрес памяти, к которому будет производиться обращение.
Слово −−! сперва уменьшает p на единицу, отбросив дробную часть. Потом записывает число y по (новому) адресу, находящемуся в обновившейся переменной p. Запись происходит в адресную единицу — то есть в один десятичный или байтовый регистр.
Ввод слова −−![править]
В режиме NUM последовательно нажмите две клавиши − − П
История[править]
Слово −−! является каллистянским аналогом команд ПМК КП0, КП1, КП2 и КП3 — которые производили запись по косвенной адресации с преддекрементом регистров 0, 1, 2 и 3.
В отличии от команд КП0…КП3 слово −−! позволяет организовать косвенную адресацию с преддекрементом по любому десятичному регистру (см. слово FVARIABLE) или двум последовательным байтовым регистрам (см. слово VARIABLE).
Реализация[править]
2100 PPSTOR0: RMA 1 + MB <−> 2101 KRMA RME ∗ KRMB + ; @ 2102 + ; 1+ или 1− 2103 ENT ; Сохранить адрес, по нему ещё x записывать 2104 ENT RME / KINT KMA ; Старший байт 2105 RME ∗ − KMB ; Младший байт 2106 Cx GOTO PPSTOR2 2107 MMSTOR1: 1 +/− ; автодекремент десятичного регистра 2108 .DB 5cH ; FX<0 aka пропустить 1 байт 2109 PPSTOR1: 1 ; автоинкремент десятичного регистра 2110 PPSTOR1A: KRMA KINT + KMA 2111 1 2112 PPSTOR2: EE 4 − KX>=09 MA ; Защита от обращения в память программ 2113 1000 − FX>=0 PPSTOR4 ; Если десятичный регистр, записываем туда любой x 2114 KRM8 FX<0 PPSTOR5 2115 RME + KMA KGOTO9 ; Отрицательные числа в байтовые регистры приводятся к 128..255 2116 PPSTOR4: KRM8 2117 PPSTOR5: KMA KGOTO9 ; ! 2118 2119 ;#MinusMinusStore 2120 ; −−! ( y a −− ) Косвенная запись y по указателю в a с предварительным автоуменьшением (аналог КП0..КП3). 2121 ; 1. Вычесть единицу из содержимого ячейки с адресом a 2122 ; 2. Записать x по адресу, содержащемуся в этой ячейке (в байтовой области это адрес байта, а не ячейки) 2123 ; Подразумевается, что ячейка не пересекает границ областей памяти. 2124 ; Указатель может располагаться в десятичных регистрах, но не регистрах функций. 2125 LMMSTOR: .DB 3 2126 .TEXT "−−!" ; ( число адрес −− ) 2127 .DW LPPSTOR 2128 MMSTOR: .DW JMMSTOR 2129 JMMSTOR: RM3 MA 1 + M8 1 + M3 2130 KRMA 1 EE 4 − KX>=09 MA ; Защита от "указателей" в памяти программ 2131 1000 − FX>=0 MMSTOR1 ; 1000 быстрее, чем 1 ВП 3 2132 1 +/− ; 1− 2133 GOTO PPSTOR0
Ссылки[править]
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |