S⟩D: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''S>D''' — стандартное слово [[Каллисто]]. | '''S>D''' — стандартное слово [[Каллисто]]. | ||
S>D ( n −− u1 u2 ) Преобразовывает 32−битное число n в пару 16−битных чисел u2 u1. | |||
Слово S>D немного сложнее ↑ 0< т.к. мы преобразовываем 12−разрядное [[десятичное число]] n, а не 16−битное двоичное, как в Форте. | |||
== Ввод слова S>D == | == Ввод слова S>D == | ||
Строка 14: | Строка 16: | ||
Sign extend a single number to form a double number. | Sign extend a single number to form a double number. | ||
== Реализация S | == Реализация == | ||
У Баранова-Ноздрунова приводится следующее | <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 ) | : S>D ( A ---> AA ) | ||
↑ 0< IF -1 ELSE 0 THEN ; | ↑ 0< IF -1 ELSE 0 THEN ; | ||
Строка 23: | Строка 49: | ||
↑ O< ; | ↑ O< ; | ||
В ФОРТ-ЕС слово S>D было [[примитив]]ом. Вот его определение: | В ФОРТ-ЕС слово S>D было [[примитив]]ом. Вот его описание и определение: | ||
<PRE> | <PRE> | ||
S>D * N->D РАСШИРИТЬ N ДО ЧИСЛА ДВОЙНОЙ ДЛИНЫ D 14 | S>D * N->D РАСШИРИТЬ N ДО ЧИСЛА ДВОЙНОЙ ДЛИНЫ D 14 | ||
Строка 31: | Строка 57: | ||
CODE S>D ( N->D ) RW1 PULL, PUSH2RW1 B, END-CODE | 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> | </PRE> | ||
== Ссылки == | == Ссылки == | ||
* {{Исходник|StoD|S>D}} | |||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2170 S>D (s-to-d)] в стандарте ANS Forth ''(англ.)'' | * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2170 S>D (s-to-d)] в стандарте ANS Forth ''(англ.)'' | ||
* Слово [http:// | * Слово [http://forth-standard.org/standard/core/StoD S>D (s-to-d)] в черновике Forth 200x ''(англ.)'' | ||
Строка 42: | Строка 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 (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |