C@: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) (Новая страница: «'''C@''' — стандартное слово Каллисто. {{нет иллюстраций}} {{заготовка}} Категория:Слова К…») |
AtH (обсуждение | вклад) |
||
(не показаны 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
Ссылки[править]
- Исходный текст слова C@ в Каллисто Классик 1.0
- См. слова @, U@, C! и символ @
- Слово C@ (c-fetch) в стандарте ANS Forth (англ.)
- Слово C@ (c-fetch) в черновике Forth 200x (англ.)
- Variables, Constants, and Arrays в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |