++@
++@ (читается «плюс-плюс-извлечь») — родное слово Каллисто. Косвенное чтение с прединкрементом.
++@ ( a −− x ) Косвенное чтение по указателю в a с предварительным автоувеличением (аналог КИП4..КИП6).
Обозначим буквой p переменную, адрес которой лежит на стеке и равен a. Это может быть настоящая переменная, созданная словом VARIABLE или FVARIABLE. Такие переменные называются указателями, т.к. их содержимое указывает на адрес памяти, к которому будет производиться обращение.
Слово ++@ сперва увеличивает p на единицу, отбросив дробную часть. Потом считывает адресную единицу (десятичное число или байт), расположенный по (новому) адресу, находящемуся в обновившейся переменной p.
Ввод слова ++@[править]
В режиме NUM последовательно нажмите три клавиши + + ИП
История[править]
Слово ++@ является каллистянским аналогом команд ПМК КИП4, КИП5 и КИП6 — которые производили запись по косвенной адресации с прединкрементом регистров 4, 5 и 6.
В отличии от команд КИП4…КИП6 слово ++@ позволяет организовать косвенную адресацию с прединкрементом по любому десятичному регистру (см. слово FVARIABLE) или двум последовательным байтовым регистрам (см. слово VARIABLE).
Реализация[править]
2196 CAT0: MA KRMA PKM03 KGOTO9 … 2198 CAT2: KPRGM PKM03 KGOTO9 2199 2200 ;#PlusPlusFetch 2201 ; ++@ ( a −− x ) Косвенное чтение по указателю в a с предварительным автоувеличением (аналог КИП4..КИП6). 2202 ; 1. Добавить единицу к содержимому ячейки с адресом a 2203 ; 2. Положить на стек x, расположенный по адресу, содержащемуся в этой ячейке (в байтовой области это адрес байта, а не ячейки) 2204 ; Подразумевается, что ячейка не пересекает границ областей памяти. 2205 ; Указателем может быть десятичный регистр, но не регистр функций. 2206 LPPAT: .DB 3 2207 .TEXT "++@" ; ( адрес −− x ) 2208 .DW LCAT 2209 PPAT: .DW JPPAT 2210 JPPAT: PKRM03 1 EE 4 − KX>=09 MA ; Защита от "указателей" в памяти программ 2211 1000 − PX>=0 PPAT1 2212 1 ; 1+ 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 … 2221 PPAT1: 1 ; автоинкремент десятичного регистра 2222 PPAT1A: KRMA KINT + KMA 2223 1 2224 PPAT00: EE 4 − PX<0 CAT0 2225 FANS + PGOTO CAT2
Ссылки[править]
- Исходный текст слова ++@ в Каллисто Классик 1.0
- См. слова ++!, −−!, −−@, +! и !
- Инкремент в Википедии
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |