Редактирование: Слово @

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''@''' (разыменовать, взять, прочесть, читается «извлечь») — стандартное слово [[Каллисто]]. Замещает [[Единое адресное пространство|адрес]] в [[Стек данных|стеке]] его содержимым.
'''@''' (разыменовать, взять, читается «извлечь») — стандартное слово [[Каллисто]]. Замещает [[Единое адресное пространство|адрес]] в [[Стек данных|стеке]] его содержимым, cчитывая [[десятичное число]] или 16-битное целое со знаком.
  @              ( a -- x )                      Извлечь. Считать значение ячейки по адресу a.
  @              ( a -- x )                      Извлечь. Считать значение ячейки по адресу a.
[[Файл:CallistoBuildsDoes.png|thumb|right|264px|Пример работы слова @]]
[[Файл:CallistoBuildsDoes.png|thumb|right|264px|Пример работы слова @]]
Заносит в [[Стек данных|стек]] число x, хранящееся в [[Ячейка (Каллисто)|ячейке]] по [[Единое адресное пространство|адреcу]] a.
Заносит в [[Стек данных|стек]] число x, хранящееся в [[Ячейка (Каллисто)|ячейке]] по [[Единое адресное пространство|адреcу]] a.
Если a указывает на байтовую память (диапазоны 0…9999 и 11000…18167), из [[Ячейка (Каллисто)|двухбайтовой ячейки]] по [[Единое адресное пространство|адресам]] a и a+1 (старший и младший байт соответственно) считывается 16-битное [[Шестнадцатеричный формат|двоичное]] целое со знаком x (x меняется от -32768 до 32767).


== Ввод слова @ ==
== Ввод слова @ ==
Строка 36: Строка 38:


== Реализация ==
== Реализация ==
Слово @ универсальное. Оно позволяет считывать как [[десятичное число]], так 16-битное целое со знаком и даже обращаться к [[Регистры функций МК|регистрам функций]]. Хотя для последнего крайне рекомендуется использовать [[слово ИП]].
Если a указывает на байтовую память (диапазоны 0…9999 и 11000…18167), из [[Ячейка (Каллисто)|двухбайтовой ячейки]] по [[Единое адресное пространство|адресам]] a и a+1 (старший и младший байт соответственно) считывается 16-битное [[Шестнадцатеричный формат|двоичное]] целое со знаком x (x меняется от -32768 до 32767).
Если вам надо считать 16-битное целое без знака, используйте более быстрое слово [[U@]].
<pre>
2147 ;#Fetch
2148 ; @                ( a −− x )                          Извлечь. Считать значение ячейки по адресу a.
2149 ; Заместить адрес в стеке его содержимым, двухбайтовая ячейка содержит число со знаком.
2150 ; Также может считать десятичный регистр, если адрес указывает на него.
2151 ; Слово @ не предназначено для считывания регистров функций!
2152 LAT:            .DB    1
2153                .TEXT  "@"                    ; ( адрес −− целое)
2154                .DW    LTOGL
2155 AT:            .DW    JAT
2156 JAT:            PKRM03
2157                MA  1
2158                EE 4 −  FX>=0 AT1
2159                MA M5 1000 −  FX>=0 AT2        ; 1000 быстрее, чем 1 ВП 3
2160                KRMA 128 −  PX>=0 UAT0
2161                RME ∗ KRM5
2162                GOTO AT01
2163 AT2:            KRMA PKM03  KGOTO9
2164 AT1:            RMA KPRGM 128 −  PX>=0 UAT1
2165                RME ∗ RMA 1 + KPRGM
2166 AT01:          +
2167                32768 − PKM03  KGOTO9
2181 UAT0:          KRMA RME ∗ KRM5 + PKM03 KGOTO9  ; Сюда есть переход из @
2182 UAT1:          RMA KPRGM RME ∗                ; Сюда есть переход из @
2183                RMA 1 + KPRGM +
2184                PKM03 KGOTO9
</pre>
Реализация из SP-Forth 4.20:
<pre>
\ ================================================================
\ Операции с памятью
CODE @ ( a-addr -- x ) \ 94
\ x - значение по адресу a-addr.
    MOV EAX, [EAX]
    RET
END-CODE
</pre>
=== Советская реализация ===
Слово @ в ФОРТ-ЕС и FORTH ИТЭФ также было [[примитив]]ом. Вот описание и определение @ из ФОРТ-ЕС:
Слово @ в ФОРТ-ЕС и FORTH ИТЭФ также было [[примитив]]ом. Вот описание и определение @ из ФОРТ-ЕС:
<PRE>
<PRE>
Строка 113: Строка 69:
[[Категория:Одноместные операции Каллисто]]
[[Категория:Одноместные операции Каллисто]]
[[Категория:Работа с памятью Каллисто]]
[[Категория:Работа с памятью Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)