S⟩D: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 17: | Строка 17: | ||
== Реализация == | == Реализация == | ||
<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 (стр. 29): | ||
: S>D ( A ---> AA ) | : S>D ( A ---> AA ) | ||
Строка 57: | Строка 81: | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Примитивы]] | [[Категория:Примитивы]] | ||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 16:58, 10 ноября 2017
S>D — стандартное слово Каллисто.
S>D ( n −− u1 u2 ) Преобразовывает 32−битное число n в пару 16−битных чисел u2 u1.
Слово S>D немного сложнее ↑ 0< т.к. мы преобразовываем 12−разрядное десятичное число n, а не 16−битное двоичное, как в Форте.
Ввод слова S>D[править]
В режиме ЛАТ последовательно нажмите клавиши 1 P F ИП Р-ГРД-Г 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.
Реализация[править]
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
Реализация из SP-Forth 4.20:
CODE S>D ( n -- d ) \ 94 \ Преобразовать число n в двойное число d с тем же числовым значением. CDQ LEA EBP, -4 [EBP] MOV [EBP], EAX MOV EAX, EDX RET END-CODE
Советская реализация[править]
У Баранова-Ноздрунова приводится следующее определение слова 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 было примитивом. Вот его описание и определение:
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
В FORTH ИТЭФ слово S>D называлось S->D и также было примитивом, вот его определение (исправлена опечатка PUSH вместо PUS):
HEAD 204Q,'S->',304Q,STOD ; S->D POP AX PUSH AX MOV CX, DX ; Сохранение содержимого DX CWD PUSH DX MOV DX, CX ; Восстановление DX NEXT
Ссылки[править]
- Исходный текст слова S>D в Каллисто Классик 1.0
- Слово S>D (s-to-d) в стандарте ANS Forth (англ.)
- Слово S>D (s-to-d) в черновике Forth 200x (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |