Редактирование: DIGIT

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''DIGIT''' (цифра) — архаичное слово [[Каллисто]].
'''DIGIT''' (цифра) — стандартное слово [[Каллисто]].
  DIGIT          ( c u1 −− u2 1 | 0 )                Цифра. Преобразовать литеру c в число u2, используя основание u1.
  DIGIT          ( c u1 −− u2 1 | 0 )                Цифра. Преобразовать литеру c в число u2, используя основание u1.
ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE
ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE
Строка 6: Строка 6:
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша БП|{{Чёрная клавиша|БП}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 2|{{Серая клавиша|2}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша БП|{{Чёрная клавиша|БП}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 2|{{Серая клавиша|2}}]]


== История ==
== DIGIT в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
Хотя слово DIGIT не вошло ни в один из стандартов языка Форт, оно является одним из наиболее старых слов Форта. Слово DIGIT появилось в Форте в 1965 году, когда Чак Мур подрабатывал наёмным программистом в городе Нью-Йорк. Тогда появились миникомпьютеры, а с ними и терминалы. Интерпретатор был идеален для ввода с телетайпа и вскоре стал включать код для работы с выводом.
 
Из-за того, что слово DIGIT очень старое, оно возвращает в качестве истины 1 — хотя стандарт [[Каллисто]] это [[TRUE|-1]]. Разное количество аргументов на стеке — опасная практика, от которой тоже уже давно отказались.
 
=== DIGIT в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
  DIGIT          c n1 --- n2 tf (ok) c n1 --- ff (bad)
  DIGIT          c n1 --- n2 tf (ok) c n1 --- ff (bad)
         Converts the ascii character c (using base n1) to its binary
         Converts the ascii character c (using base n1) to its binary
         equivalent n2, accompanied by a true flag. If the conversion is
         equivalent n2, accompanied by a true flag. If the conversion is
         invalid, leaves only a false flag.
         invalid, leaves only a false flag.
== История ==
Хотя слово DIGIT не включено ни в один из стандартов языка Форт, оно является одним из наиболее старых слов Форта. Слово DIGIT появилось в Форте в 1965 году, когда Чак Мур подрабатывал наёмным программистом в городе Нью-Йорк. Тогда появились миникомпьютеры, а с ними и терминалы. Интерпретатор был идеален для ввода с телетайпа и вскоре стал включать код для работы с выводом.


== Реализация ==
== Реализация ==
В [[Каллисто|Каллисто 1.0]] слово DIGIT использует устаревшее значение 1, как истины:
Описание и определение слова DIGIT в ядре ФОРТ-ЕС:
<pre>
795 ;#DIGIT
796 ; DIGIT            ( c u1 −− u2 1 | 0 )                Цифра. Преобразовать литеру c в число u2, используя основание u1.
797 ; ASCII−DIGIT BASE => DIGIT−VALUE TRUE / FALSE
798 ; Признаёт только заглавные буквы
799 ; Здесь в качестве истины возвращается 1, хотя Каллисто перешло на стандарт −1/0
800 LDIGIT:        .DB    5
801                .TEXT  "DIGIT"                ; ( литера основание −− значение 1 | 0 )
802                .DW    LPFIND
803 DIGIT:          .DW    JDIGIT
854 JDIGIT:                                        ; Обработчик DIGIT
855                RM3 MA                          ; [RA] == BASE
856                1 + M3
857                PKRM03 48 −  FX>=0 STF          ; Правильная цифра = ASCII − 48
858                MB 10 −  FX>=0 MO9              ; Если >9
859                3 + MB
860                10 −  FX>=0 STF
861 MO9:            RMB KRMA −  FX<0 STF            ; Если не меньше BASE, то ошибка
862                RMB PKM03                      ; Записать цифру в стек, "успешный" выход
863 JONE:                                          ; Обработчик 1
864                1 KM3  KGOTO9
877 STF:            Cx PKM03  KGOTO9                ; [SP] := 0; NEXT
</pre>
Реализации из SP-Forth 4.20:
<pre>
CODE DIGIT ( char n1 -- n2 true | false )
\ n2 - значение литеры char как
\ цифры в системе счисления по основанию n1
      MOV ECX, EAX
      MOV EAX, [EBP]
      A;  2C C, 30 C,  \  SUB AL, # 30
      JC SHORT @@1
      A;  3C C, A C,  \  CMP AL, # A
      JNC SHORT @@2
@@3:  CMP AL, CL
      JNC SHORT @@1
      MOV [EBP], EAX
      A; B8 C, TRUE W, TRUE W,  \  MOV EAX, # -1
      RET
 
@@2:  A;  3C C, 11 C,  \  CMP AL, # 11
      JC SHORT @@1
      A;  2C C, 7 C,  \  SUB AL, # 7
      JMP SHORT @@3
 
@@1:  LEA EBP, 4 [EBP]
      XOR EAX, EAX
      RET
END-CODE
</pre>
<pre>
\ : DIGIT ( C, N1 -> N2, TF / FF )
\ N2 - значение литеры C как
\ цифры в системе счисления по основанию N1
(  SWAP
  DUP 58 <
      OVER 47 > AND
      IF \ within 0..9
        48 -
      ELSE
        DUP 64 >
        IF
          DUP 96 > IF 87 ELSE 55 THEN -
        ELSE 2DROP 0 EXIT THEN
      THEN
  TUCK > DUP 0= IF NIP THEN
;)
</pre>
 
=== Советская реализация ===
Описание и определение слова DIGIT в ядре ФОРТ-ЕС. ЕС ЭВМ использовала кодировку [https://ru.wikipedia.org/wiki/%D0%94%D0%9A%D0%9E%D0%98-8 ДКОИ-8], в которой не все латинские буквы идут последовательно:
<PRE>
<PRE>
DIGIT    * C,N1->N2,TP/FF    N2 - ЗНАЧЕНИЕ ЛИТЕРЫ С КАК  39
DIGIT    * C,N1->N2,TP/FF    N2 - ЗНАЧЕНИЕ ЛИТЕРЫ С КАК  39
Строка 124: Строка 49:
== Ссылки ==
== Ссылки ==
* {{Исходник|DIGIT|DIGIT}}
* {{Исходник|DIGIT|DIGIT}}
* См. слова [[BASE]], [[NUMBER]], [[UCONVERT]] и [[U♯|U#]]




Строка 131: Строка 55:
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Примитивы]]
[[Категория:Архаичные слова]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/DIGIT