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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Строка 45: Строка 45:
</pre>
</pre>
=== Советская реализация ===
=== Советская реализация ===
Описание и определение слова DIGIT в ядре ФОРТ-ЕС:
Описание и определение слова 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

Версия от 15:13, 10 ноября 2017

DIGIT (цифра) — архаичное слово Каллисто.

DIGIT          ( c u1 −− u2 1 | 0 )                 Цифра. Преобразовать литеру c в число u2, используя основание u1.

ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE

Ввод слова DIGIT

В режиме ЛАТ последовательно нажмите клавиши  K   7   БП   7   2 

История

Хотя слово DIGIT не вошло ни в один из стандартов языка Форт, оно является одним из наиболее старых слов Форта. Слово DIGIT появилось в Форте в 1965 году, когда Чак Мур подрабатывал наёмным программистом в городе Нью-Йорк. Тогда появились миникомпьютеры, а с ними и терминалы. Интерпретатор был идеален для ввода с телетайпа и вскоре стал включать код для работы с выводом.

Из-за того, что слово DIGIT очень старое, оно возвращает в качестве истины 1 — хотя стандарт Каллисто это -1. Разное количество аргументов на стеке — опасная практика, от которой тоже уже давно отказались.

DIGIT в fig-FORTH Release 1 glossary, май 1979 (англ.)

DIGIT           c n1 --- n2 tf (ok) c n1 --- ff (bad)
       Converts the ascii character c (using base n1) to its binary
       equivalent n2, accompanied by a true flag. If the conversion is
       invalid, leaves only a false flag.

Реализация

В Каллисто 1.0 слово DIGIT использует устаревшее значение 1, как истины:

 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

Советская реализация

Описание и определение слова DIGIT в ядре ФОРТ-ЕС. ЕС ЭВМ использовала кодировку ДКОИ-8, в которой не все латинские буквы идут последовательно:

DIGIT     * C,N1->N2,TP/FF    N2 - ЗНАЧЕНИЕ ЛИТЕРЫ С КАК   39
               ЦИФРЫ В СИСТЕМЕ СЧИСЛЕНИЯ ПО ОСНОВАНИЮ N1

                     Экран номер 39
( 31.03.86      DIGIT CONVERT  NUMBER )

: DIGIT ( C,N1->N2,TF/FF) 0 ROT ROT 0
 DO I ALPHA OVER ─ IF 2DROP I -1 0 LEAVE THEN LOOP DROP ;

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

             HEAD    205Q,'DIGI',324Q,DIGIT               ; DIGIT
   ; ASCII-DIGIT BASE=>DIGIT-VALUE TRUE (FALSE)
             POP   AX      ; AX=BASE
             POP   CX
             SUB   CX, 60Q ; VALID DIGIT = ASCII-60
             JL    FALSE
             CMP   CX, 9   ; Если >9
             JLE   M09
             SUB   CX, 7
             CMP   CX, 10
             JL    FALSE
   M09:      CMP   CX, AX  ; Если не меньше BASE, то ошибка
             JGE   FALSE
             PUSH  CX      ; Запись цифры в стек
             JMP   TRUE    ; "Успешный" выход

Ссылки


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


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