C@

Материал из ПМК вики
Перейти к: навигация, поиск

C@ (разыменовать байт, читается «си-извлечь») — стандартное слово Каллисто. Считать содержимое байта, адрес которого находится в стеке.

C@             ( a -- x )                      Извлечь байт. Считать значение по адресу a.

Замещает адрес a в стеке его содержимым x.

Если a указывает на байтовую память (диапазоны 0…9999 и 11000…18167), считывается двоичный беззнаковый байт x по адресу a, x меняется от 0 до 255.

Примитив C@ может считать и десятичное число, если по адресу a находится десятичный регистр (диапазон 10000…10999).

Ввод слова C@[править]

В режиме ЛАТ последовательно нажмите три клавиши  С/П     P   ИП 

Эти нажатия оставляют клавиатуру в режиме NUM.

C@ в стандарте ANS Forth[править]

 6.1.0870   C@                                "c-fetch"                     CORE
            ( c-addr -- char )
            Выбирает символ, сохраненный в c-addr. Когда размер ячейки больше 
            чем размер символа, все неиспользованные старшие биты - нули.

        См.: 3.3.3.1 Выравнивание адреса.

История[править]

C@ в предыдущем стандарте Forth-83 (англ.)[править]

     C@           addr -- 8b                    79           "c-fetch"
          8b is the contents of the byte at addr.

C@ в стандарте Forth-79 (англ.)[править]

C@             addr -- byte                  156          "c-fetch"
    Leave  on  the stack the contents of the byte  at  addr  (with
    higher bits zero, in a 16-bit field).

C@ в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

C@            addr  ---  b
       Leave the 8 bit contents of memory address. On word addressing
       computers, further specification is needed regarding byte
       addressing.

Реализация[править]

2186 ;#CFetch
2187 ; C@               ( a −− x )                           Извлечь байт. Считать значение по адресу a.
2188 ; Извлечь байт информации из ячейки, адрес которой находится в стеке.
2189 ; Если считать байт из памяти программ или байтовой памяти, старшие биты будут равны нулю.
2190 ; Так можно считывать значения из регистров функций и десятичных регистров.
2191 LCAT:           .DB     2
2192                 .TEXT   "C@"                    ; ( адрес −− байт )
2193                 .DW     LUAT
2194 CAT:            .DW     JCAT
2195 JCAT:           PKRM03 1 EE 4 −  FX>=0 CAT1
2196 CAT0:           MA KRMA PKM03  KGOTO9
2197 CAT1:           PKRM03
2198 CAT2:           KPRGM PKM03  KGOTO9

Реализация из SP-Forth 4.20:

CODE C@ ( c-addr -- char ) \ 94
\ Получить символ по адресу c-addr. Незначащие старшие биты ячейки нулевые.
     MOVZX EAX, BYTE [EAX]
     RET
END-CODE

Советская реализация[править]

Слово C@ в ФОРТ-ЕС было примитивом. Вот его описание и определение:

C@        A->С ДАТЬ БАЙТ ПО АДРЕСУ А                            11

                     Экран номер 11
( 31.03.86      !  0!  @  С!  С@  , С, EXECUTE )

CODE C@  ( A->C)  RW2 PULL,  RW2 RМASК NR,   RW1 RW1 SR,
 RW1 0 (, RW2 RFORTH IC, PUTRW1 B,   END-CODE

В FORTH ИТЭФ слово C@ также было примитивом, вот его определение:

            HEAD     202Q,'C',300Q,CAT                    ; C@
            POP  BX
            MOV  AL, BYTE PTR [BX]
            SUB  AH, AH
            PUSH AX
            NEXT

Ссылки[править]


  Nopictures-icon.png У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Stub-icon-48px.png Это заготовка статьи. Вы можете помочь проекту, дополнив её.