C@: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
(Новая страница: «'''C@''' — стандартное слово Каллисто. {{нет иллюстраций}} {{заготовка}} Категория:Слова К…»)
 
 
(не показаны 33 промежуточные версии этого же участника)
Строка 1: Строка 1:
'''C@''' — стандартное слово [[Каллисто]].
'''C@''' (разыменовать байт, читается «си-извлечь») — стандартное слово [[Каллисто]]. Считать содержимое байта, [[Единое адресное пространство|адрес]] которого находится в [[Стек данных|стеке]].
C@            ( a -- x )                      Извлечь байт. Считать значение по адресу a.
Замещает [[Единое адресное пространство|адрес]] a в [[Стек данных|стеке]] его содержимым x.
 
Если a указывает на байтовую память (диапазоны 0…9999 и 11000…18167), считывается [[Шестнадцатеричный формат|двоичный]] беззнаковый байт x по [[Единое адресное пространство|адресу]] a, x меняется от 0 до 255.
 
[[Примитив]] C@ может считать и [[десятичное число]], если по адресу a находится [[Регистр десятичных данных|десятичный регистр]] (диапазон 10000…10999).
 
== Ввод слова C@ ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]]   [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
 
Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме NUM]].
 
== C@ в стандарте ANS Forth ==
<PRE>
6.1.0870  C@                                "c-fetch"                    CORE
            ( c-addr -- char )
            Выбирает символ, сохраненный в c-addr. Когда размер ячейки больше
            чем размер символа, все неиспользованные старшие биты - нули.
 
        См.: 3.3.3.1 Выравнивание адреса.
</PRE>
 
== История ==
=== 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.
 
== Реализация ==
<pre>
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
</pre>
Реализация из SP-Forth 4.20:
<pre>
CODE C@ ( c-addr -- char ) \ 94
\ Получить символ по адресу c-addr. Незначащие старшие биты ячейки нулевые.
    MOVZX EAX, BYTE [EAX]
    RET
END-CODE
</pre>
 
=== Советская реализация ===
Слово C@ в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
<PRE>
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
</PRE>
В FORTH ИТЭФ слово C@ также было [[примитив]]ом, вот его определение:
<PRE>
            HEAD    202Q,'C',300Q,CAT                    ; C@
            POP  BX
            MOV  AL, BYTE PTR [BX]
            SUB  AH, AH
            PUSH AX
            NEXT
</PRE>
 
== Ссылки ==
* {{Исходник|CFetch|C@}}
* См. слова [[Слово @|@]], [[U@]], [[C!]] и [[Символ с кодом 64|символ @]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0870 C@ (c-fetch)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/CFetch C@ (c-fetch)] в черновике Forth 200x ''(англ.)''
* [http://www.forth.com/starting-forth/sf8/sf8.html Variables, Constants, and Arrays] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
 


{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Одноместные операции Каллисто]]
[[Категория:Работа с памятью Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]

Текущая версия от 16:45, 10 ноября 2017

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

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


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


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