++!
++! (читается «плюс-плюс-присвоить») — родное слово Каллисто. Косвенная запись с прединкрементом.
++! ( y a −− ) Косвенная запись y по указателю в a с предварительным автоувеличением (аналог КП4..КП6).
Обозначим буквой p переменную, адрес которой лежит на стеке и равен a. Это может быть настоящая переменная, созданная словом VARIABLE или FVARIABLE. Такие переменные называются указателями, т.к. их содержимое указывает на адрес памяти, к которому будет производиться обращение.
Слово ++! сперва увеличивает p на единицу, отбросив дробную часть. Потом записывает число y по (новому) адресу, находящемуся в обновившейся переменной p. Запись происходит в адресную единицу — то есть в один десятичный или байтовый регистр.
Ввод слова ++!
В режиме NUM последовательно нажмите три клавиши + + П
История
Слово ++! является каллистянским аналогом команд ПМК КП4, КП5 и КП6 — которые производили запись по косвенной адресации с прединкрементом регистров 4, 5 и 6.
В отличии от команд КП4…КП6 слово ++! позволяет организовать косвенную адресацию с прединкрементом по любому десятичному регистру (см. слово FVARIABLE) или двум последовательным байтовым регистрам (см. слово VARIABLE).
Реализация
2086 ;#PlusPlusStore 2087 ; ++! ( y a −− ) Косвенная запись y по указателю в a с предварительным автоувеличением (аналог КП4..КП6). 2088 ; 1. Добавить единицу к содержимому ячейки с адресом a 2089 ; 2. Записать x по адресу, содержащемуся в этой ячейке (в байтовой области это адрес байта, а не ячейки) 2090 ; Подразумевается, что ячейка не пересекает границ областей памяти. 2091 ; Указатель может располагаться в десятичных регистрах, но не регистрах функций. 2092 LPPSTOR: .DB 3 2093 .TEXT "++!" ; ( число адрес −− ) 2094 .DW LPSTOR 2095 PPSTOR: .DW JPPSTOR 2096 JPPSTOR: RM3 MA 1 + M8 1 + M3 2097 KRMA 1 EE 4 − KX>=09 MA ; Защита от "указателей" в памяти программ 2098 1000 − FX>=0 PPSTOR1 ; 1000 быстрее, чем 1 ВП 3 2099 1 ; 1+ 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 … 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 ; !
Ссылки
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |