Текущая версия |
Ваш текст |
Строка 18: |
Строка 18: |
|
| |
|
| == Реализация == | | == Реализация == |
| В [[Каллисто|Каллисто 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: |
Строка 51: |
| == Ссылки == | | == Ссылки == |
| * {{Исходник|DIGIT|DIGIT}} | | * {{Исходник|DIGIT|DIGIT}} |
| * См. слова [[BASE]], [[NUMBER]], [[UCONVERT]] и [[U♯|U#]] | | * См. слова [[BASE]], [[NUMBER]], [[CONVERT]] и [[U♯|U#]] |
|
| |
|
|
| |
|
Строка 131: |
Строка 58: |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]] | | [[Категория:Примитивы]] |
| [[Категория:Архаичные слова]]
| |