S⟩D: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 20 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''S>D''' — стандартное слово [[Каллисто]].
'''S>D''' — стандартное слово [[Каллисто]].
S>D            ( n −− u1 u2 )                      Преобразовывает 32−битное число n в пару 16−битных чисел u2 u1.
Слово S&gt;D немного сложнее ↑ 0< т.к. мы преобразовываем 12−разрядное [[десятичное число]] n, а не 16−битное двоичное, как в Форте.


== Ввод слова S&gt;D ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 1|{{Серая клавиша|1}}]] &nbsp; [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] &nbsp; [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша K|{{Синяя клавиша|K}}]]


== S&gt;D в стандарте ANS Forth ==
== S&gt;D в стандарте ANS Forth ==
Строка 7: Строка 11:
             Преобразовывает число n в число d две-ячейки с тем же самым  
             Преобразовывает число n в число d две-ячейки с тем же самым  
             числовым значением.
             числовым значением.


== S-&gt;D в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
== S-&gt;D в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
Строка 13: Строка 16:
         Sign extend a single number to form a double number.
         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-&gt;D ==
=== Советская реализация ===
У Баранова-Ноздрунова приводится следующее описание слова S-&gt;D (стр. 29):
У Баранова-Ноздрунова приводится следующее определение слова S&gt;D (стр. 29):
   : S>D  ( A ---> AA )
   : S>D  ( A ---> AA )
             ↑ 0< IF -1 ELSE 0 THEN ;
             ↑ 0< IF -1 ELSE 0 THEN ;


Thinking Forth (стр. 242, Minimizing Control Structures) предлагает более быстрое решение:
: s>d  ( n -- d )  \ расширение со знаком s в d
      ↑  O< ;
В ФОРТ-ЕС слово S&gt;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&gt;D называлось S-&gt;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>


== Ссылки ==
== Ссылки ==
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2170 Слово S&gt;D (s-to-d) в стандарте ANS Forth] ''(англ.)''
* {{Исходник|StoD|S&gt;D}}
* [http://www.forth200x.org/documents/html/core.html#core:StoD Слово S&gt;D (s-to-d) в черновике Forth 200x] ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2170 S&gt;D (s-to-d)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/StoD S&gt;D (s-to-d)] в черновике Forth 200x ''(англ.)''




Строка 28: Строка 80:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Стандартные слова]]
[[Категория: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

Ссылки[править]


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


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