Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''S>D''' — стандартное слово [[Каллисто]]. | | '''S>D''' — стандартное слово [[Каллисто]]. |
| S>D ( n −− u1 u2 ) Преобразовывает 32−битное число n в пару 16−битных чисел u2 u1.
| |
| Слово S>D немного сложнее ↑ 0< т.к. мы преобразовываем 12−разрядное [[десятичное число]] n, а не 16−битное двоичное, как в Форте.
| |
| | |
| == Ввод слова S>D ==
| |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 1|{{Серая клавиша|1}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша K|{{Синяя клавиша|K}}]]
| |
| | |
| == S>D в стандарте ANS Forth ==
| |
| 6.1.2170 S>D "s-to-d" CORE
| |
| ( n -- d )
| |
| Преобразовывает число n в число d две-ячейки с тем же самым
| |
| числовым значением.
| |
| | |
| == S->D в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
| |
| S->D n --- d
| |
| Sign extend a single number to form a double number.
| |
| | |
| == Реализация ==
| |
| <pre>
| |
| 1443 ;#StoD
| |
| 1444 ; S>D ( n −− u1 u2 ) Преобразовать 32−битное число n в пару 16−битных чисел u2 u1.
| |
| 1445 ; Немного сложнее DUP 0< т.к. мы преобразовываем 12−разрядные десятичные числа, а не 16−битные двоичные.
| |
| 1446 LSTOD: .DB 3
| |
| 1447 .TEXT "S>D" ; ( n −− dd )
| |
| 1448 .DW LSWAB
| |
| 1449 STOD: .DW JSTOD
| |
| 1450 JSTOD: RM3 M8 KRM8 PGSB Norm32
| |
| 1451 ENT ENT 65536 / FANS <−> KINT KM3 ∗ − KM8 KGOTO9
| |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| CODE S>D ( n -- d ) \ 94
| |
| \ Преобразовать число n в двойное число d с тем же числовым значением.
| |
| CDQ
| |
| LEA EBP, -4 [EBP]
| |
| MOV [EBP], EAX
| |
| MOV EAX, EDX
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| У Баранова-Ноздрунова приводится следующее определение слова S>D (стр. 29):
| |
| : S>D ( A ---> AA )
| |
| ↑ 0< IF -1 ELSE 0 THEN ;
| |
| | |
| Thinking Forth (стр. 242, Minimizing Control Structures) предлагает более быстрое решение:
| |
| : s>d ( n -- d ) \ расширение со знаком s в d
| |
| ↑ O< ;
| |
| | |
| В ФОРТ-ЕС слово S>D было [[примитив]]ом. Вот его описание и определение:
| |
| <PRE>
| |
| S>D * N->D РАСШИРИТЬ N ДО ЧИСЛА ДВОЙНОЙ ДЛИНЫ D 14
| |
| | |
| Экран номер 14
| |
| ( 31.03.86 S>D DABS DNEGATE D+ D- DU< )
| |
| | |
| CODE S>D ( N->D ) RW1 PULL, PUSH2RW1 B, END-CODE
| |
| </PRE>
| |
| | |
| В FORTH ИТЭФ слово S>D называлось S->D и также было [[примитив]]ом, вот его определение (исправлена опечатка PUSH вместо PUS):
| |
| <PRE>
| |
| HEAD 204Q,'S->',304Q,STOD ; S->D
| |
| POP AX
| |
| PUSH AX
| |
| MOV CX, DX ; Сохранение содержимого DX
| |
| CWD
| |
| PUSH DX
| |
| MOV DX, CX ; Восстановление DX
| |
| NEXT
| |
| </PRE>
| |
| | |
| == Ссылки ==
| |
| * {{Исходник|StoD|S>D}}
| |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2170 S>D (s-to-d)] в стандарте ANS Forth ''(англ.)''
| |
| * Слово [http://forth-standard.org/standard/core/StoD S>D (s-to-d)] в черновике Forth 200x ''(англ.)''
| |
| | |
|
| |
|
| {{нет иллюстраций}} | | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |