Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:106

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:106 [2022-09-11 23:43]
GreyWolf
msx:basic_dialogue_programming_language:106 [2023-02-19 16:27] (текущий)
GreyWolf
Строка 2: Строка 2:
 ~~TOC wide~~ ~~TOC wide~~
  
 +{{anchor:​n106}}
 ====== ​ 1.6. Реализация вещественной арифметики на машинном языке ====== ====== ​ 1.6. Реализация вещественной арифметики на машинном языке ======
-FIXME 
  
 +<WRAP group>
 +<WRAP half column> \\ </​WRAP>​
 +<WRAP half column><​WRAP right>
 +Изучай все не из тщеславия,​ а ради
 +\\ практической пользы.
 +<WRAP rightalign>​
 +—//​Г.Лихтенберг. Афоризмы//​
 +</​WRAP></​WRAP>​
  
 +</​WRAP></​WRAP>​
  
 +В системной области имеются два вещественных "​регистра"​ — //​аккумулятора//,​ при помощи которых компьютер осуществляет все арифметические операции: ​ * 
 +  * DAC ("​Decimal ACcumulator"​-"​десятичный аккумулятор"​) — F7F6h, 16 байтов,​
 +  * ARG ("​ARGument"​-"​аргумент"​) ​                         — F847h, 16 байтов.
 +
 +//​Вещественное//​ число в аккумуляторах ​ размещается ​ следующим образом:​
 <​code>​ <​code>​
- +                   F7F6h     ​F7F7h ​                  F7FDh
-                                       ​Изучай все не из тщеславия,​ а ради +
-                                       ​практической пользы. +
-                                                   ​Г.Лихтенберг. Афоризмы +
- +
-   В системной области имеются два вещественных "​регистра"​ -  а к к у м у- +
-л я т о р а, при помощи которых компьютер осуществляет все арифметические +
-операции:​ +
-  DAC ("​Decimal ACcumulator"​-"​десятичный аккумулятор"​) - F7F6h, 16 байтов,​ +
-  ARG ("​ARGument"​-"​аргумент"​) ​                         - F847h, 16 байтов. +
-   В е щ е с т в е н н о е  число в аккумуляторах ​ размещается ​ следующим +
-образом: ​          F7F6h     ​F7F7h ​                  F7FDh+
              ​┌──────────────┬───┬───┬───┬───┬───┬───┬───┐              ​┌──────────────┬───┬───┬───┬───┬───┬───┬───┐
              ​│Знак и порядок│ ​ М  а  н  т  и  с  с  а   ​│ ​  DAC              ​│Знак и порядок│ ​ М  а  н  т  и  с  с  а   ​│ ​  DAC
Строка 27: Строка 30:
      ​│Знак и порядок│ ​ М  а  н  т  и  с  с  а   ​│ ​  ARG      ​│Знак и порядок│ ​ М  а  н  т  и  с  с  а   ​│ ​  ARG
      ​└──────────────┴───┴───┴───┴───┴───┴───┴───┘      ​└──────────────┴───┴───┴───┴───┴───┴───┴───┘
-   Ц е л о е  число в аккумуляторе располагается следующим образом:​+</​code>​ 
 + 
 +//Целое// число в аккумуляторе располагается следующим образом:​ 
 +<​code>​
                  ​F7F6h ​   F7F7h       ​F7F8h ​       F7F9h                  ​F7F6h ​   F7F7h       ​F7F8h ​       F7F9h
               ┌────────┬────────┬─────────────┬─────────────┐               ┌────────┬────────┬─────────────┬─────────────┐
Строка 36: Строка 42:
       │ Незначащие байты│ Младший байт│ Старший байт│ ​  ARG       │ Незначащие байты│ Младший байт│ Старший байт│ ​  ARG
       └────────┴────────┴─────────────┴─────────────┘       └────────┴────────┴─────────────┴─────────────┘
-   Подробнее о хранении чисел см. в разделе X.4.1+</​code>​ 
-   В ячейке VALTYP системной области (по адресу F663h) хранится тип числа,​ +Подробнее о хранении чисел см. в  ​[[010#​n1041|разделе X.4.1]].
-находящегося в аккумуляторе DAC, причем тип закодирован следующим образом:​ +
-   2 - целое число;​ +
-   4 - вещественное число одинарной точности;​ +
-   8 - вещественное число двойной точности. +
-   В следующих табличках приведен список входных точек очень полезных под- +
-программ ROM.+
  
-{{anchor:n161}}+В ячейке VALTYP системной области (по адресу F663h) хранится тип числа, находящегося в аккумуляторе DAC, причем тип закодирован следующим образом:​ 
 +  * 2 — целое число;​ 
 +  * 4 — вещественное число одинарной точности;​ 
 +  * 8 — вещественное число двойной точности. 
 +В следующих табличках приведен список входных точек очень полезных подпрограмм ROM. 
 + 
 + 
 +{{anchor:n1061}}
 ===== 1.6.1. Пересылки ===== ===== 1.6.1. Пересылки =====
 +
 +^  Имя \\ подпрограммы ​ ^  Адрес ​ ^  Выполняемые \\ действия ​ ^  //​Тип// ​ ^  Изменяемые \\ регистры ​ ^
 +|MAF|2C4Dh|ARG := DAC|Double|A,​B,​D,​E,​H,​L,​ARG |
 +|AM|2C50h|ARG := (HL)| Double | A,​B,​D,​E,​H,​L,​ARG|
 +|MOV8DH|2C53h|(DE):​= (HL)|Double|A,​B,​D,​E,​H,​L|
 +|MFA|2C59h|DAC := ARG|Double|A,​B,​D,​E,​H,​L,​DAC|
 +|MFM|2C5Ch|DAC := (HL)|Double|A,​B,​D,​E,​H,​L,​DAC|
 +|MMF|2C67h|(HL):​= DAC|Double|A,​B,​D,​E,​H,​L|
 +|MOV8HD|2C6Ah|(HL):​= (DE)|Double|A,​B,​D,​E,​H,​L|
 +|XTF|2C6Fh|(SP):​= DAC|Double|A,​B,​D,​E,​H,​L|
 +|PHA|2CC7h|ARG := (SP)|Double|A,​B,​D,​E,​H,​L,​ARG|
 +|PHF|2CCCh|DAC := (SP)|Double|A,​B,​D,​E,​H,​L,​DAC|
 +|PPA|2CDCh|(SP):​= ARG|Double|A,​B,​D,​E,​H,​L|
 +|PPF|2CE1h|(SP):​= DAC|Double|A,​B,​D,​E,​H,​L|
 +|PUSHF|2EB1h|DAC := (SP)|Single|D,​E,​DAC|
 +|MOVFM|2EBEh|DAC := (HL)|Single|B,​C,​D,​E,​H,​L,​DAC|
 +|MOVFR|2EC1h|DAC := (CBED)| Single |DAC,D,E|
 +|MOVRF|2ECCh|(CBED):​= DAC| Single |B,​C,​D,​E,​H,​L|
 +|MOVRMI|2ED6h|(CBED):​= (HL)|Single|B,​C,​D,​E,​H,​L|
 +|MOVRM|2EDFh|(BCDE):​= (HL)|Single|B,​C,​D,​E,​H,​L|
 +|MOVMF|2EE8h|(HL):​= DAC|Single|B,​C,​D,​E,​H,​L|
 +|MOVE|2EEBh|(HL):​= (DE)|Single|B,​C,​D,​E,​H,​L|
 +|VMOVAM|2EEFh|ARG := (HL)|VALTYP|B,​C,​D,​E,​H,​L,​ARG|
 +|MOVVFM|2EF2h|(DE):​= (HL)|VALTYP|B,​C,​D,​E,​H,​L|
 +|VMOVE|2EF3h|(HL):​= (DE)|VALTYP|B,​C,​D,​E,​H,​L|
 +|VMOVFA|2F05h|DAC := ARG|VALTYP| B,​C,​D,​E,​H,​L,​DAC|
 +|VMOVFM|2F08h|DAC := (HL)|VALTYP|B,​C,​D,​E,​H,​L,​DAC|
 +|VMOVAF|2F0Dh|ARG := DAC|VALTYP|B,​C,​D,​E,​H,​L,​ARG|
 +|VMOVMF|2F10h|(HL):​= DAC|VALTYP|B,​C,​D,​E,​H,​L|
 +
 +{{anchor:​e1060-01}} __//​Пример 1//__. Записать число в аккумулятор DAC,а затем прочитать его. \\ {{.examples:​1060-01.bas|}} \\ [[+tab|wmsxbpge>​1060-01.bas]]
 <​code>​ <​code>​
-      ┌────────┬───────┬────────────────┬────────┬──────────────────┐ +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 
-      │   ​Имя ​ │       ​│ ​               │        │                  │ +20 INPUT"​Ваше число";​N:​A$=HEX$(VARPTR(N)) 
-      │ подпро-│ Адрес │   ​Выполняемые ​ │ Т и п  │    Изменяемые ​   │ +30 POKE &​HF100,​VAL("&​h"​+RIGHT$(A$,​2)):​POKE&​HF101,​VAL("&​h"​+LEFT$(A$,​2)) 
-      │ граммы │       ​│ ​    ​действия ​  ​│ ​       │     ​регистры ​    │ +40 DATA 2A,​00,​F1 ​    :'​LD ​  ​HL,​(F100h) 
-      ├────────┼───────┼────────────────┼────────┼──────────────────┤ +50 DATA CD,​5C,​2C ​    :'​CALL 2C5Ch 
-      │ MAF    │ 2C4Dh │   ARG := DAC   │ Double │ A,​B,​D,​E,​H,​L,​ARG ​ │ +70 DATA 21,​F6,​F7 ​    :'​LD ​  ​HL,​F7F6h 
-      │ MAM    │ 2C50h │   ARG := (HL)  │ Double │ A,​B,​D,​E,​H,​L,​ARG ​ │ +80 DATA 11,​00,​F2 ​    :'​LD ​  ​DE,​F200h 
-      │ MOV8DH │ 2C53h │   ​(DE):​= (HL)  │ Double │   ​A,​B,​D,​E,​H,​L ​   │ +90 DATA 01,​10,​00 ​    :'​LD ​  ​BC,​10h 
-      │ MFA    │ 2C59h │   DAC := ARG   │ Double │ A,​B,​D,​E,​H,​L,​DAC ​ │ +100 DATA ED,B0       :'​LDIR 
-      │ MFM    │ 2C5Ch │   DAC := (HL)  │ Double │ A,​B,​D,​E,​H,​L,​DAC ​ │ +130 DATA C9          :'​RET 
-      │ MMF    │ 2C67h │   ​(HL):​= DAC   │ Double │   ​A,​B,​D,​E,​H,​L ​   │ +140 FOR T=0 TO 17:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT 
-      │ MOV8HD │ 2C6Ah │   ​(HL):​= (DE)  │ Double │   ​A,​B,​D,​E,​H,​L ​   │ +150 X=USR(X) 
-      │ XTF    │ 2C6Fh │   ​(SP):​= DAC   │ Double │   ​A,​B,​D,​E,​H,​L ​   │ +160 FOR T=0 TO 15:PRINT HEX$(PEEK(VARPTR(N)+T)),​HEX$(PEEK(&​HF200+T)) 
-      │ PHA    │ 2CC7h │   ARG := (SP)  │ Double │ A,​B,​D,​E,​H,​L,​ARG ​ │ +170 NEXT 
-      │ PHF    │ 2CCCh │   DAC := (SP)  │ Double │ A,​B,​D,​E,​H,​L,​DAC ​ │ +</​code> ​                                                  ​
-      │ PPA    │ 2CDCh │   ​(SP):​= ARG   │ Double │   ​A,​B,​D,​E,​H,​L ​   │ +
-      │ PPF    │ 2CE1h │   ​(SP):​= DAC   │ Double │   ​A,​B,​D,​E,​H,​L ​   │ +
-      │ PUSHF  │ 2EB1h │   DAC := (SP)  │ Single │     ​D,​E,​DAC ​     │ +
-      │ MOVFM  │ 2EBEh │   DAC := (HL)  │ Single │  B,​C,​D,​E,​H,​L,​DAC │ +
-      │ MOVFR  │ 2EC1h │  DAC := (CBED) │ Single │      DAC,​D,​E ​    │ +
-      │ MOVRF  │ 2ECCh │  (CBED):= DAC  │ Single │    B,​C,​D,​E,​H,​L ​  │ +
-      │ MOVRMI │ 2ED6h │  (CBED):= (HL) │ Single │    B,​C,​D,​E,​H,​L ​  │ +
-      │ MOVRM  │ 2EDFh │  (BCDE):= (HL) │ Single │    B,​C,​D,​E,​H,​L ​  │ +
-      │ MOVMF  │ 2EE8h │   ​(HL):​= DAC   │ Single │    B,​C,​D,​E,​H,​L ​  │ +
-      │ MOVE   │ 2EEBh │   ​(HL):​= (DE)  │ Single │    B,​C,​D,​E,​H,​L ​  │ +
-      │ VMOVAM │ 2EEFh │   ARG := (HL)  │ VALTYP │ B,​C,​D,​E,​H,​L,​ARG ​ │ +
-      │ MOVVFM │ 2EF2h │   ​(DE):​= (HL)  │ VALTYP │    B,​C,​D,​E,​H,​L ​  │ +
-      │ VMOVE  │ 2EF3h │   ​(HL):​= (DE)  │ VALTYP │    B,​C,​D,​E,​H,​L ​  │ +
-      │ VMOVFA │ 2F05h │   DAC := ARG   │ VALTYP │ B,​C,​D,​E,​H,​L,​DAC ​ │ +
-      │ VMOVFM │ 2F08h │   DAC := (HL)  │ VALTYP │ B,​C,​D,​E,​H,​L,​DAC ​ │ +
-      │ VMOVAF │ 2F0Dh │   ARG := DAC   │ VALTYP │ B,​C,​D,​E,​H,​L,​ARG ​ │ +
-      │ VMOVMF │ 2F10h │   ​(HL):​= DAC   │ VALTYP │    B,​C,​D,​E,​H,​L ​  │ +
-      └────────┴───────┴────────────────┴────────┴──────────────────┘ +
-   П р и м е р 1.  Записать число в аккумулятор DAC,а затем прочитать его. +
-   ​───────────── +
-   10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 +
-   ​20 INPUT"​Ваше число";​N:​A$=HEX$(VARPTR(N)) +
-   ​30 POKE &​HF100,​VAL("&​h"​+RIGHT$(A$,​2)):​POKE&​HF101,​VAL("&​h"​+LEFT$(A$,​2)) +
-   ​40 DATA 2A,​00,​F1 ​    :'​LD ​  ​HL,​(F100h) +
-   ​50 DATA CD,​5C,​2C ​    :'​CALL 2C5Ch +
-   ​70 DATA 21,​F6,​F7 ​    :'​LD ​  ​HL,​F7F6h +
-   ​80 DATA 11,​00,​F2 ​    :'​LD ​  ​DE,​F200h +
-   ​90 DATA 01,​10,​00 ​    :'​LD ​  ​BC,​10h +
-   ​100 DATA ED,B0       :'​LDIR +
-   ​130 DATA C9          :'​RET +
-   ​140 FOR T=0 TO 17:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT +
-   ​150 X=USR(X) +
-   ​160 FOR T=0 TO 15:PRINT HEX$(PEEK(VARPTR(N)+T)),​HEX$(PEEK(&​HF200+T)) +
-   ​170 NEXT +
-                                                    +
-   П р и м е р 2.  Записать число в аккумулятор ARG,а затем прочитать его. +
-   ​───────────── +
-   10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 +
-   20 INPUT"​Ваше число";​N:​A$=HEX$(VARPTR(N)) +
-   30 POKE &​HF100,​VAL("&​h"​+RIGHT$(A$,​2)):​POKE&​HF101,​VAL("&​h"​+LEFT$(A$,​2)) +
-   40 DATA 2A,​00,​F1 ​    :'​LD ​  ​HL,​(F100h) +
-   50 DATA CD,​50,​2C ​    :'​CALL 2C50h +
-   70 DATA 21,​47,​F8 ​    :'​LD ​  ​HL,​F847h +
-   80 DATA 11,​00,​F2 ​    :'​LD ​  ​DE,​F200h +
-   90 DATA 01,​10,​00 ​    :'​LD ​  ​BC,​10h +
-   100 DATA ED,B0       :'​LDIR +
-   130 DATA C9          :'​RET +
-   140 FOR T=0 TO 17:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT +
-   150 X=USR(X) +
-   160 FOR T=0 TO 15:PRINT HEX$(PEEK(VARPTR(N)+T)),​HEX$(PEEK(&​HF200+T)) +
-   170 NEXT+
  
 +{{anchor:​e1060-02}} __//​Пример 2//__. Записать число в аккумулятор ARG,а затем прочитать его.\\ {{.examples:​1060-02.bas|}} \\ [[+tab|wmsxbpge>​1060-02.bas]]
 +<​code>​
 +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
 +20 INPUT"​Ваше число";​N:​A$=HEX$(VARPTR(N))
 +30 POKE &​HF100,​VAL("&​h"​+RIGHT$(A$,​2)):​POKE&​HF101,​VAL("&​h"​+LEFT$(A$,​2))
 +40 DATA 2A,​00,​F1 ​    :'​LD ​  ​HL,​(F100h)
 +50 DATA CD,​50,​2C ​    :'​CALL 2C50h
 +70 DATA 21,​47,​F8 ​    :'​LD ​  ​HL,​F847h
 +80 DATA 11,​00,​F2 ​    :'​LD ​  ​DE,​F200h
 +90 DATA 01,​10,​00 ​    :'​LD ​  ​BC,​10h
 +100 DATA ED,B0       :'​LDIR
 +130 DATA C9          :'RET
 +140 FOR T=0 TO 17:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT
 +150 X=USR(X)
 +160 FOR T=0 TO 15:PRINT HEX$(PEEK(VARPTR(N)+T)),​HEX$(PEEK(&​HF200+T))
 +170 NEXT
 </​code>​ </​code>​
  
-{{anchor:n162}}+{{anchor:n1062}}
 ===== 1.6.2. Арифметические операции над целыми числами ===== ===== 1.6.2. Арифметические операции над целыми числами =====
-<​code>​ 
  
-                                      ​Наиболее полезны те советы,​ которым +<WRAP group> 
-                                      легко следовать. +<WRAP half column> \\ </​WRAP>​ 
-                                                               ​Л.Вовенарг +<WRAP half column><​WRAP right> 
-     ┌────────┬───────┬────────────────────┬───────────────────────┐ +Наиболее полезны те советы,​ которым 
-     ​│ ​  ​Имя ​ │       ​│ ​                   │                       │ +\\ легко следовать. 
-     │ подпро-│ Адрес │Выполняемые действия│ ​ Изменяемые регистры ​ │ +<WRAP rightalign>​ 
-     │ граммы │       ​│ ​                   │                       │ +—//Л.Вовенарг// 
-     ​├────────┼───────┼────────────────────┼───────────────────────┤ +</WRAP></WRAP>
-     │ UMULT  │ 314Ah │   DE := BC·DE ​     │       ​A,​B,​C,​D,​E ​      │ +
-     │ ISUB   │ 3167h │   HL := DE-HL      │     ​A,​B,​C,​D,​E,​H,​L ​    │ +
-     │ IADD   │ 3172h │   HL := DE+HL      │     ​A,​B,​C,​D,​E,​H,​L ​    │ +
-     │ IMULT  │ 3193h │   HL := DE·HL ​     │     ​A,​B,​C,​D,​E,​H,​L ​    │ +
-     │ IDIV   │ 31E6h │   HL := DE/HL      │     ​A,​B,​C,​D,​E,​H,​L ​    │ +
-     │ IMOD   │ 323Ah │   HL := DE mod HL  │     ​A,​B,​C,​D,​E,​H,​L ​    │ +
-     ​└────────┴───────┴────────────────────┴───────────────────────┘ +
-   П р и м е р  3.  Умножение целых чисел (операнды находятся в регистрах +
-   ​────────────── ​  HL и DE). +
-   10 CLEAR 200,&​HD000 +
-   20 DEFUSR=&​HD000 +
-   30 I=&​HD000 +
-   40 READ A$:IF A$="​z"​ THEN A=USR(0):​PRINT PEEK(&​H9000):​END +
-   60 POKE I,​VAL("&​h"​+A$):​I=I+1:​GOTO 40 +
-   ​90 ​ DATA 21,​0A,​00:' ​ LD   ​HL,​000Ah ​ ; Загрузка регистра HL константой +
-   100 DATA 11,​04,​00:' ​ LD   ​DE,​0004h ​ ; Загрузка регистра DE константой +
-   110 DATA CD,​93,​31:' ​ CALL 3193h     ; Вызов нужной подпрограммы  +
-   120 DATA 22,​00,​90:' ​ LD   ​(9000h),​HL +
-   130 DATA C9      :' ​ RET +
-   140 DATA "​z" ​    :'​ +
-</code>+
  
-{{anchor:​n163}} +</​WRAP></​WRAP>​
-===== 1.6.3. Арифметические операции над вещественными числами =====+
  
 +^  Имя \\ подпрограммы ​ ^  Адрес ​ ^  Выполняемые \\ действия ​ ^  //​Тип// ​ ^  Изменяемые \\ регистры ​ ^
 +|UMULT|314Ah|DE := BC·DE|A,​B,​C,​D,​E|
 +|ISUB|3167h|HL := DE-HL|A,​B,​C,​D,​E,​H,​L|
 +|IADD|3172h|HL := DE+HL|A,​B,​C,​D,​E,​H,​L|
 +|IMULT|3193h|HL := DE·HL|A,​B,​C,​D,​E,​H,​L|
 +|IDIV|31E6h|HL := DE/​HL|A,​B,​C,​D,​E,​H,​L|
 +|IMOD|323Ah|HL := DE mod HL|A,​B,​C,​D,​E,​H,​L|
 +
 +{{anchor:​e1060-03}} __//​Пример 3//__. Умножение целых чисел (операнды находятся в регистрах HL и DE).\\ {{.examples:​1060-03.bas|}} \\ [[+tab|wmsxbpge>​1060-03.bas]]
 <​code>​ <​code>​
-       ​┌────────┬───────┬────────────────────┬───────────────────────┐ +10 CLEAR 200,&HD000 
-       ​│ ​  ​Имя ​ │       ​│ ​                   │                       │ +20 DEFUSR=&​HD000 
-       │ подпро-│ Адрес │Выполняемые действия│ ​ Изменяемые регистры ​ │ +30 I=&​HD000 
-       │ граммы │       ​│ ​                   │                       │ +40 READ A$:IF A$="​z"​ THEN A=USR(0):PRINT PEEK(&H9000):END 
-       ​├────────┼───────┼────────────────────┼───────────────────────┤ +60 POKE I,​VAL("&​h"​+A$):I=I+1:GOTO 40 
-       │ DECSUB │ 268Ch │  DAC := DAC-ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +90  ​DATA 21,0A,​00:' ​ LD   HL,000Ah  ; ​Загрузка регистра ​HL константой 
-       │ DECADD │ 269Ah │  DAC := DAC+ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +100 DATA 11,04,​00:' ​ LD   DE,0004h  ; ​Загрузка ​регистра DE константой 
-       │ DECNRM │ 26FAh │ Нормализовать DAC  │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +110 DATA CD,93,31:'  ​CALL 3193h     ; Вызов нужной подпрограммы  ​ 
-       │ DECROU │ 273Ch │   ​Округлить DAC    │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +120 DATA 22,00,90:' ​ LD   ​(9000h),HL 
-       │ DECMUL │ 27E6h │  DAC := DAC·ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +130 DATA C9      :' ​ RET 
-       │ DECDIV │ 289Fh │  DAC := DAC/​ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +140 DATA "z" ​    ​:' 
-       │ COS    │ 2993h │  DAC := COS(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +</​code>​
-       │ SIN    │ 29ACh │  DAC := SIN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ TAN    │ 29FBh │  DAC := TAN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ ATN    │ 2A14h │  DAC := ATN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ LOG    │ 2A72h │  DAC := LOG(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ SQR    │ 2AFFh │  DAC := SQR(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ EXP    │ 2B4Ah │  DAC := EXP(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ RND    │ 2BDFh │  DAC := RND(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ SIGN   │ 2E71h │  A   := SIGN(DAC) ​ │          A            │ +
-       │ ABSFN  │ 2E82h │  DAC := ABS(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +
-       │ NEG    │ 2E8Dh │  DAC := - DAC      │       ​A,​H,​L,​DAC ​      │ +
-       │ SGN    │ 2E97h │  DAC := SGN(DAC) ​  ​│ ​      ​A,​H,​L,​DAC ​      │ +
-       ​└────────┴───────┴────────────────────┴───────────────────────┘ +
-   П р и м е р 4. Сумма двух вещественных чисел. +
-   ​───────────── +
-   10 CLEAR 200,&HF000:DEFUSR=&​HF000 +
-   20 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F000h +
-   30 DATA CD,​5C,​2C ​    :'​LD ​ DAC,​(HL) ​      ;​F003h +
-   ​40 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N2) ;F006h +
-   50 DATA CD,​50,​2C ​    :'​LD ​ ARG,​(HL) ​      ;​F009h +
-   60 DATA CD,​9A,​26 ​    :'​DAC:​=DAC+ARG ​      ;​F00Ch +
-   70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F00Fh +
-   80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​      ;​F012h +
-   90 DATA C9           :'​RET ​               ;F015h +
-   100 FOR T=0 TO &H15:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT +
-   110 INPUT"​Первое слагаемое";​N1:​INPUT"​Второе слагаемое";​N2 +
-   ​120 ​A$=HEX$(VARPTR(N1)):B$=HEX$(VARPTR(N2)) +
-   130 L1$=RIGHT$(A$,2):L2$=RIGHT$(B$,​2) +
-   140 H1$=LEFT$(A$,2):H2$=LEFT$(B$,2) +
-   150 POKE &​HF001,​VAL("&​h"​+L1$):POKE &​HF002,​VAL("&h"​+H1$) +
-   160 POKE &​HF007,​VAL("&​h"​+L2$):POKE &​HF008,​VAL("&​h"​+H2$) +
-   170 POKE &HF010,​VAL("&​h"​+L1$):POKE &​HF011,​VAL("&​h"​+H1$) +
-   180 H=USR(H) +
-   190 PRINT"​Сумма:";N1 +
-   П р и м е р 5. Возведение в степень. +
-   ​───────────── +
-   10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 +
-   ​20 ​DATA 21,00,00     ​:'​LD ​ ​HL,​address(N1) ;F000h +
-   ​30 DATA CD,​5C,​2C ​    :'​LD ​ DAC,(HL)       ;​F003h +
-   40 DATA 21,00,00     :'​LD ​ HL,​address(N2) ​;F006h +
-   50 DATA CD,​50,​2C ​    :'​LD ​ ARG,(HL)       ;​F009h +
-   60 DATA CD,D7,37     :'​DAC:​=DAC^ARG ​      ;​F00Ch +
-   70 DATA 21,00,00     :'​LD ​ ​HL,​address(N1) ;F00Fh +
-   ​80 DATA CD,67,2C     :'​LD ​ (HL),​DAC ​      ;F012h +
-   90 DATA C9           :'​RET ​               ;F015h +
-   100 FOR T=0 TO &​H15:​READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT +
-   110 INPUT"​N1";​N1:​INPUT"​N2";​N2 +
-   120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2)) +
-   130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2) +
-   140 H1$=LEFT$(A$,​2):​H2$=LEFT$(B$,​2) +
-   150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$) +
-   160 POKE &​HF007,​VAL("&​h"​+L2$):​POKE &​HF008,​VAL("&​h"​+H2$) +
-   170 POKE &​HF010,​VAL("&​h"​+L1$):​POKE &​HF011,​VAL("&​h"​+H1$) +
-   180 H=USR(H) +
-   190 PRINT"​N1^N2=";​N1 +
-   ​П ​р и м е р 6.  Вычисление значения функции синус  вещественного  ​аргу- +
-   ​────────────── ​ мента. +
-   10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 +
-   20 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F000h +
-   ​30 ​DATA CD,5C,2C     :'LD  DAC,​(HL) ​      ;​F003h +
-   60 DATA CD,​AC,​29 ​    ​:'​DAC:​=SIN(DAC) ​     ​;F006h +
-   70 DATA 21,00,00     :'​LD ​ ​HL,​address(N1;F009h +
-   80 DATA CD,67,2C     :'​LD ​ (HL),DAC       ;​F00Ch +
-   90 DATA C9           ​:'​RET ​               ;​F00Fh +
-   100 FOR T=0 TO 15:READ Z$:POKE &​HF000+T,​VAL("&h"+Z$):NEXT +
-   110 INPUT"​Число";​N1:​A$=HEX$(VARPTR(N1)) +
-   130 L1$=RIGHT$(A$,​2):​H1$=LEFT$(A$,​2) +
-   150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$) +
-   170 POKE &​HF00A,​VAL("&​h"​+L1$):​POKE &​HF00B,​VAL("&​h"​+H1$) +
-   180 H=USR(H):​PRINT"​Синус:";​N1+
  
-   ​П ​р и м е р 7.  Генерация псевдослучайного ​числа+{{anchor:​n1063}} 
-   ​──────────────+===== 1.6.3. Арифметические операции над вещественными ​числами =====
  
-   10 CLEAR 200,&​HF000:DEFUSR=&​HF000 +^  Имя \\ подпрограммы ​ ^  Адрес ​ ^  Выполняемые \\ действия ​ ^  Изменяемые \\ регистры ​ ^ 
-   20 DATA 21,00,00     :'​LD ​ HL,address(N1) ​ ;F000h +|DECSUB|268Ch|DAC ​:= DAC-ARG|A,B,C,​D,​E,​H,​L,​DAC| 
-   30 DATA CD,5C,2C     :'​LD  ​DAC,(HL)        ;F003h +|DECADD|269Ah|DAC ​:= DAC+ARG|A,B,​C,​D,​E,​H,​L,​DAC| 
-   60 DATA CD,DF,2B     :'DAC:=RND(DAC)       ;F006h +|DECNRM|26FAh|Нормализовать DAC|A,B,C,D,E,H,L,DAC
-   70 DATA 21,00,00     :'​LD ​ HL,address(N1) ​ ;F009h +|DECROU|273Ch|Округлить DAC|A,B,​C,​D,​E,​H,​L,​DAC| 
-   80 DATA CD,67,2C     :'​LD  ​(HL),DAC        ;​F00Ch +|DECMUL|27E6h|DAC := DAC·ARG|A,B,C,​D,​E,​H,​L,​DAC| 
-   90 DATA C9           :'​RET ​                ;​F00Fh +|DECDIV|289Fh|DAC ​:= DAC/​ARG|A,​B,​C,​D,​E,​H,​L,​DAC| 
-   100 FOR T=0 TO 15:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):NEXT +|COS|2993h|DAC := COS(DAC)|A,B,C,D,E,H,​L,​DAC,​ARG| 
-   110 INPUT"​Число";​N1 +|SIN|29ACh|DAC ​:= SIN(DAC)|A,​B,​C,​D,​E,​H,​L,DAC,ARG| 
-   ​120 ​A$=HEX$(VARPTR(N1)+|TAN|29FBh|DAC ​:= TAN(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-   130 L1$=RIGHT$(A$,2) +|ATN|2A14h|DAC :ATN(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-   140 H1$=LEFT$(A$,2) +|LOG|2A72h|DAC :LOG(DAC)|A,B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-   150 POKE &HF001,VAL("&​h"​+L1$):POKE &HF002,VAL("&​h"​+H1$) +|SQR|2AFFh|DAC :SQR(DAC)|A,B,C,​D,​E,​H,​L,​DAC,​ARG| 
-   170 POKE &HF00A,VAL("&​h"​+L1$):POKE &​HF00B,​VAL("&​h"​+H1$) +|EXP|2B4Ah|DAC := EXP(DAC)|A,B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-   ​180 ​H=USR(H):PRINT"​RND(n1)=";N1+|RND|2BDFh|DAC := RND(DAC)|A,B,​C,​D,​E,​H,​L,​DAC,​ARG| 
 +|SIGN|2E71h|A := SIGN(DAC)|A| 
 +|ABSFN|2E82h|DAC ​:= ABS(DAC)|A,B,C,D,E,H,​L,​DAC,​ARG| 
 +|NEG|2E8Dh|DAC :- DAC|A,H,L,DAC| 
 +|SGN|2E97h|DAC ​:= SGN(DAC)|A,H,L,DAC|
  
 +{{anchor:​e1060-04}} __//​Пример 4//__. Сумма двух вещественных чисел.\\ {{.examples:​1060-04.bas|}} \\ [[+tab|wmsxbpge>​1060-04.bas]]
 +<​code>​
 +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
 +20 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F000h
 +30 DATA CD,​5C,​2C ​    :'​LD ​ DAC,​(HL) ​      ;​F003h
 +40 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N2) ;F006h
 +50 DATA CD,​50,​2C ​    :'​LD ​ ARG,​(HL) ​      ;​F009h
 +60 DATA CD,​9A,​26 ​    :'​DAC:​=DAC+ARG ​      ;​F00Ch
 +70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F00Fh
 +80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​      ;​F012h
 +90 DATA C9           :'​RET ​               ;F015h
 +100 FOR T=0 TO &​H15:​READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT
 +110 INPUT"​Первое слагаемое";​N1:​INPUT"​Второе слагаемое";​N2
 +120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2))
 +130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2)
 +140 H1$=LEFT$(A$,​2):​H2$=LEFT$(B$,​2)
 +150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$)
 +160 POKE &​HF007,​VAL("&​h"​+L2$):​POKE &​HF008,​VAL("&​h"​+H2$)
 +170 POKE &​HF010,​VAL("&​h"​+L1$):​POKE &​HF011,​VAL("&​h"​+H1$)
 +180 H=USR(H)
 +190 PRINT"​Сумма:";​N1
 +</​code>​
  
 +{{anchor:​e1060-05}} __//​Пример 5//__. Возведение в степень.\\ {{.examples:​1060-05.bas|}} \\ [[+tab|wmsxbpge>​1060-05.bas]]
 +<​code>​
 +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
 +20 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F000h
 +30 DATA CD,​5C,​2C ​    :'​LD ​ DAC,​(HL) ​      ;​F003h
 +40 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N2) ;F006h
 +50 DATA CD,​50,​2C ​    :'​LD ​ ARG,​(HL) ​      ;​F009h
 +60 DATA CD,​D7,​37 ​    :'​DAC:​=DAC^ARG ​      ;​F00Ch
 +70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F00Fh
 +80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​      ;​F012h
 +90 DATA C9           :'​RET ​               ;F015h
 +100 FOR T=0 TO &​H15:​READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT
 +110 INPUT"​N1";​N1:​INPUT"​N2";​N2
 +120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2))
 +130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2)
 +140 H1$=LEFT$(A$,​2):​H2$=LEFT$(B$,​2)
 +150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$)
 +160 POKE &​HF007,​VAL("&​h"​+L2$):​POKE &​HF008,​VAL("&​h"​+H2$)
 +170 POKE &​HF010,​VAL("&​h"​+L1$):​POKE &​HF011,​VAL("&​h"​+H1$)
 +180 H=USR(H)
 +190 PRINT"​N1^N2=";​N1
 +</​code>​
  
-   П р и м е р  8 Вычислить значение функции ​двух переменных  +{{anchor:​e1060-05}} __//Пример ​5//__. Вычисление значения функции ​синус  вещественного ​ аргумента.\\ {{.examples:​1060-05.bas|}} \\ [[+tab|wmsxbpge>​1060-05.bas]] 
-   ────────────── ​             z cos(x)+ sin(y)+<​code>​ 
 +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 
 +20 DATA 21,​00,​00 ​    :'​LD ​ HL,address(N1;F000h 
 +30 DATA CD,​5C,​2C ​    :'​LD ​ DAC,​(HL) ​      ;​F003h 
 +60 DATA CD,​AC,​29 ​    :'​DAC:​=SIN(DAC) ​     ;F006h 
 +70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F009h 
 +80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​      ;​F00Ch 
 +90 DATA C9           :'​RET ​               ;F00Fh 
 +100 FOR T=0 TO 15:READ Z$:POKE &HF000+T,VAL("&​h"​+Z$):NEXT 
 +110 INPUT"​Число";​N1:​A$=HEX$(VARPTR(N1)) 
 +130 L1$=RIGHT$(A$,​2):​H1$=LEFT$(A$,​2) 
 +150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$) 
 +170 POKE &​HF00A,​VAL("&​h"​+L1$):​POKE &​HF00B,​VAL("&​h"​+H1$) 
 +180 H=USR(H):​PRINT"​Синус:";​N1 
 +</​code>​
  
-   10 CLEAR 200,&​HF000:DEFUSR=&​HF000:​T=0 +{{anchor:e1060-07}} __//Пример 7//__. Генерация псевдослучайного ​числа.\\ {{.examples:1060-07.bas|}} \\ [[+tab|wmsxbpge>​1060-07.bas]] 
-   20 INPUT"​X=";​X:​INPUT"​Y=";​Y:​A1$=HEX$(VARPTR(X)):​A2$=HEX$(VARPTR(Y)) +<code> 
-   30 L1=VAL("&​h"​+RIGHT$(A1$,​2)):​R1=VAL("&​h"​+LEFT$(A1$,​2)) 'Адрес числа X +10 CLEAR 200,&HF000:DEFUSR=&HF000 
-   40 L2=VAL("&​h"​+RIGHT$(A2$,​2)):​R2=VAL("&​h"​+LEFT$(A2$,​2)) 'Адрес числа ​+20 DATA 21,00,00     :'​LD ​ HL,address(N1)  ;F000h 
-   50 POKE &​HF301,​L1:POKE &​HF302,​R1:​POKE &​HF303,​L2:​POKE &​HF304,​R2 +30 DATA CD,​5C,​2C ​    ​:'​LD ​ DAC,​(HL) ​       ;F003h 
-   60 READ Z$:IF Z$<>"​RET"​ THEN POKE &HF000+T,​VAL("&​h"​+Z$):T=T+1:GOTO 60 +60 DATA CD,DF,2B     :'​DAC:​=RND(DAC)       ​;F006h 
-   70  ​DATA 2A,01,F3 :'​LD ​  ​HL,(F301h); HL содержит адрес переменной X +70 DATA 21,​00,​00 ​    :'LD  HL,​address(N1) ​ ;F009h 
-   ​75 ​ DATA E5       :'​PUSH HL        ​+80 DATA CD,​67,​2C ​    ​:'​LD ​ (HL),​DAC ​       ;F00Ch 
-   80  ​DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ DAC:=X +90 DATA C9           :'​RET ​                ;F00Fh 
-   90  ​DATA CD,93,29 :'​DAC:​=COS(DAC)  DAC:=COS(X) +100 FOR T=0 TO 15:READ Z$:POKE &​HF000+T,VAL("&​h"​+Z$):NEXT 
-   95  ​DATA E1       :'POP  ​HL ​       ; +110 INPUT"​Число";N1 
-   ​97 ​ DATA E5       :'​PUSH HL        ​+120 A$=HEX$(VARPTR(N1)
-   100 DATA CD,67,2C :'​LD ​  ​(HL),​DAC ​ Z:=COS(X)◀── "​Прячем"​ результат в +130 L1$=RIGHT$(A$,2
-                                      ​любую заранее зарезервированную +140 H1$=LEFT$(A$,2
-                                      ; группу ячеек памяти +150 POKE &HF001,VAL("&​h"​+L1$):POKE &HF002,VAL("&​h"​+H1$
-                                      ; В нашем случае ≡ X  +170 POKE &HF00A,VAL("&​h"​+L1$):POKE &HF00B,VAL("&h"+H1$
-   110 DATA 2A,​03,​F3 ​:'​LD ​  HL,(F303h); HL содержит адрес переменной Y +180 H=USR(H):PRINT"​RND(n1)=";​N1 
-   ​120 DATA CD,5C,2C :'​LD ​  DAC,(HL ; DAC:=Y +</​code>​
-   ​130 DATA CD,AC,29 :'DAC:=SIN(DAC)  ; DAC:=SIN(Y+
-   ​140 DATA CD,4D,2C :'​LD ​  ​ARG,​DAC ​  ; ARG:=SIN(Y+
-   145 DATA E1       :'​POP ​ HL        ; +
-   147 DATA E5       :'​PUSH HL        ; +
-   150 DATA CD,5C,2C :'​LD ​  DAC,(HL ; DAC:=Z +
-   160 DATA CD,9A,26 :'​ADD ​ DAC,​ARG ​  ; DAC:=Z+SIN(Y+
-   165 DATA E1       :'​POP ​ HL        ; +
-   170 DATA CD,67,2C :'​LD ​  (HL),DAC  ; X:=DAC +
-   180 DATA C9,"RET" ​:'​RET +
-   190 PRINT COS(X)+SIN(Y+
-   200 A=USR(A):​PRINT ​X '​Результат+
  
 +{{anchor:​e1060-08}} __//​Пример 8//__. Вычислить значение функции двух переменных z = cos(x)+ sin(y)\\ {{.examples:​1060-08.bas|}} \\ [[+tab|wmsxbpge>​1060-08.bas]]
 +<​code>​
 +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000:​T=0
 +20 INPUT"​X=";​X:​INPUT"​Y=";​Y:​A1$=HEX$(VARPTR(X)):​A2$=HEX$(VARPTR(Y))
 +30 L1=VAL("&​h"​+RIGHT$(A1$,​2)):​R1=VAL("&​h"​+LEFT$(A1$,​2)) '​Адрес числа X
 +40 L2=VAL("&​h"​+RIGHT$(A2$,​2)):​R2=VAL("&​h"​+LEFT$(A2$,​2)) '​Адрес числа Y
 +50 POKE &​HF301,​L1:​POKE &​HF302,​R1:​POKE &​HF303,​L2:​POKE &​HF304,​R2
 +60 READ Z$:IF Z$<>"​RET"​ THEN POKE &​HF000+T,​VAL("&​h"​+Z$):​T=T+1:​GOTO 60
 +70  DATA 2A,01,F3 :'​LD ​  ​HL,​(F301h);​ HL содержит адрес переменной X
 +75  DATA E5       :'​PUSH HL        ;
 +80  DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=X
 +90  DATA CD,93,29 :'​DAC:​=COS(DAC) ​ ; DAC:=COS(X)
 +95  DATA E1       :'​POP ​ HL        ;
 +97  DATA E5       :'​PUSH HL        ;
 +100 DATA CD,67,2C :'​LD ​  ​(HL),​DAC ​ ; Z:​=COS(X)◀── "​Прячем"​ результат в
 +                                   ; любую заранее зарезервированную
 +                                   ; группу ячеек памяти
 +                                   ; В нашем случае: ​ Z ≡ X 
 +110 DATA 2A,03,F3 :'​LD ​  ​HL,​(F303h);​ HL содержит адрес переменной Y
 +120 DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=Y
 +130 DATA CD,AC,29 :'​DAC:​=SIN(DAC) ​ ; DAC:=SIN(Y)
 +140 DATA CD,4D,2C :'​LD ​  ​ARG,​DAC ​  ; ARG:=SIN(Y)
 +145 DATA E1       :'​POP ​ HL        ;
 +147 DATA E5       :'​PUSH HL        ;
 +150 DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=Z
 +160 DATA CD,9A,26 :'​ADD ​ DAC,​ARG ​  ; DAC:​=Z+SIN(Y)
 +165 DATA E1       :'​POP ​ HL        ;
 +170 DATA CD,67,2C :'​LD ​  ​(HL),​DAC ​ ; X:=DAC
 +180 DATA C9,"​RET"​ :'RET
 +190 PRINT COS(X)+SIN(Y)
 +200 A=USR(A):​PRINT X '​Результат
 </​code>​ </​code>​
  
-{{anchor:n164}}+{{anchor:n1064}}
 ===== 1.6.4. Возведение в степень ===== ===== 1.6.4. Возведение в степень =====
  
-<​code>​ +^  ​Имя подпрограммы ​ ^  ​Адрес ​ ​^  ​Выполняемые действия ​ ​^ ​ //Тип//  ^ 
-     ​┌────────┬───────┬────────────────────┬───────────────────────┐ +|SNGEXP|37C8h|%% DAC := DAC^ARG ​%%|Одинарная точность| 
-     ​│ ​  Имя ​ ​│ ​      ​│ ​                   │                       │ +|DBLEXP|37D7h|%% DAC := DAC^ARG ​%%|Двойная точность| 
-     ​│ ​подпро-│ Адрес ​Выполняемые действия│         Т и п         │ +|INTEXP|383Fh|%% DAC := DE^HL %%|Целая|
-     │ граммы │       ​│ ​                   │                       │ +
-     ​├────────┼───────┼────────────────────┼───────────────────────┤ +
-     ​│ ​SNGEXP ​│ 37C8h │  ​DAC := DAC^ARG ​   ​│ ​  Одинарная точность ​ │ +
-     │ DBLEXP ​│ 37D7h │  ​DAC := DAC^ARG ​   ​│ ​   ​Двойная точность ​  │ +
-     │ INTEXP ​│ 383Fh │  ​DAC := DE^HL      ​│ ​        Целая ​        │ +
-     ​└────────┴───────┴────────────────────┴───────────────────────┘ +
-   П р и м е р  9.   ​Вычислить 3² . +
-   ​────────────── +
-   10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 +
-   30 DATA 11,​03,​00 ​        :'​LD ​  ​DE,​0003h +
-   40 DATA 21,​02,​00 ​        :'​LD ​  ​HL,​0002h +
-   50 DATA CD,​3F,​38 ​        :'​CALL 383Fh +
-   60 DATA 21,​F6,​F7 ​        :'​LD ​  ​HL,​F7F6h +
-   70 DATA 11,​00,​F2 ​        :'​LD ​  ​DE,​F200h +
-   80 DATA 01,​10,​00 ​        :'​LD ​  ​BC,​10h +
-   90 DATA ED,B0            :'​LDIR +
-   130 DATA C9              :'​RET +
-   140 FOR T=0 TO 19:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT +
-   150 X=USR(X) +
-   160 FOR T=0 TO 15:PRINT HEX$(PEEK(&​HF200+T));"​ ";:​NEXT+
  
 +{{anchor:​e1060-09}} __//​Пример 9//__. Вычислить 3².\\ {{.examples:​1060-09.bas|}} \\ [[+tab|wmsxbpge>​1060-09.bas]]
 +<​code>​
 +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
 +30 DATA 11,​03,​00 ​        :'​LD ​  ​DE,​0003h
 +40 DATA 21,​02,​00 ​        :'​LD ​  ​HL,​0002h
 +50 DATA CD,​3F,​38 ​        :'​CALL 383Fh
 +60 DATA 21,​F6,​F7 ​        :'​LD ​  ​HL,​F7F6h
 +70 DATA 11,​00,​F2 ​        :'​LD ​  ​DE,​F200h
 +80 DATA 01,​10,​00 ​        :'​LD ​  ​BC,​10h
 +90 DATA ED,B0            :'LDIR
 +130 DATA C9              :'RET
 +140 FOR T=0 TO 19:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT
 +150 X=USR(X)
 +160 FOR T=0 TO 15:PRINT HEX$(PEEK(&​HF200+T));"​ ";:​NEXT
 </​code>​ </​code>​
  
-{{anchor:n165}}+{{anchor:n1065}}
 ===== 1.6.5. Сравнение ===== ===== 1.6.5. Сравнение =====
    
-<​code>​ + ​Имя подпрограммы ​ ^  ​Адрес ​ ​^  ​Тип ​ ​^ ​ Левая ​часть ​условия ​ ^  Правая ​часть ​условия ​ ^  ​Изменяемые регистры  ​^ 
-  ┌────────┬───────┬─────────┬───────┬───────┬───────────────────────┐ +|FCOMP|2F21h|Single|CBED|DAC|HL| 
-  │   Имя ​ ​│ ​      ​│ ​        │ Левая │ Правая│ ​                      │ +|ICOMP|2F4Dh|Integer|DE|HL|HL| 
-  │ подпро-│ Адрес ​│   Тип ​  │ часть ​│ часть ​│  ​Изменяемые регистры  ​ +|XDCOMP|2F5Ch|Double|ARG|DAC|A,​B,​C,​D,​E,​H,​L|
-  │ граммы │       ​│ ​        ​│условия│условия│ ​                      │ +
-  ├────────┼───────┼─────────┼───────┼───────┼───────────────────────┤ +
-  │ FCOMP  ​│ ​2F21h │ Single ​ ​│  ​CBED │  ​DAC  ​│ ​          HL          │ +
-  ​│ ​ICOMP  ​│ ​2F4Dh │ Integer ​│   DE  ​│ ​  HL  ​│ ​          HL          │ +
-  ​│ ​XDCOMP ​│ 2F5Ch │ Double ​ ​│  ​ARG  ​│  ​DAC  ​│ ​     ​A,​B,​C,​D,​E,​H,​L ​   │ +
-  └────────┴───────┴─────────┴───────┴───────┴───────────────────────┘ +
-   ​Подпрограмма возвращает следующее содержимое регистра A +
-         -1, если ​ левая часть условия < правой части условия,​ +
-          0, если ​ левая часть условия = правой части условия,​ +
-          1, если ​ левая часть условия > правой части условия.+
  
-   П р и м е р 10.  Сравнение двух вещественных чисел. +Подпрограмма возвращает следующее содержимое регистра A 
-   ────────────── +  * -1, если ​ левая часть условия < правой части условия,​ 
-   ​10 CLEAR 200,&​HD000:​DEFUSR=&​HD000 +  * 0, если ​ левая часть условия = правой части условия,​ 
-   ​20 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N1)  +  * 1, если ​ левая часть условия > правой части условия. 
-   ​30 DATA CD,​5C,​2C ​         :'​LD ​ DAC,​(HL) ​     + 
-   ​40 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N2)  +{{anchor:​e1060-10}} __//​Пример 10//__. Сравнение двух вещественных чисел.\\ {{.examples:​1060-10.bas|}} \\ [[+tab|wmsxbpge>​1060-10.bas]] 
-   ​50 DATA CD,​50,​2C ​         :'​LD ​ ARG,(HL) +<​code>​ 
-   ​60 DATA CD,​5C,​2F ​         :'​Сравнить DAC и ARG +10 CLEAR 200,&​HD000:​DEFUSR=&​HD000 
-   ​70 DATA 32,​00,​F1 ​         :'​LD ​ (F100h),A  +20 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N1)  
-   ​90 DATA C9                :'​RET ​             +30 DATA CD,​5C,​2C ​         :'​LD ​ DAC,​(HL) ​     
-   ​100 FOR T=0 TO &​H12:​READ Z$:POKE &​HD000+T,​VAL("&​h"​+Z$):​NEXT +40 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N2)  
-   ​110 INPUT"​Left";​N1:​INPUT"​Right";​N2 +50 DATA CD,​50,​2C ​         :'​LD ​ ARG,(HL) 
-   ​120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2)) +60 DATA CD,​5C,​2F ​         :'​Сравнить DAC и ARG 
-   ​130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2) +70 DATA 32,​00,​F1 ​         :'​LD ​ (F100h),A  
-   ​140 H1$= LEFT$(A$,​2):​H2$= LEFT$(B$,​2) +90 DATA C9                :'​RET ​             
-   ​150 POKE &​HD001,​VAL("&​h"​+L1$):​POKE &​HD002,​VAL("&​h"​+H1$) +100 FOR T=0 TO &​H12:​READ Z$:POKE &​HD000+T,​VAL("&​h"​+Z$):​NEXT 
-   ​160 POKE &​HD007,​VAL("&​h"​+L2$):​POKE &​HD008,​VAL("&​h"​+H2$) +110 INPUT"​Left";​N1:​INPUT"​Right";​N2 
-   ​180 H=USR(H):​A=PEEK(&​HF100) +120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2)) 
-   ​190 IF A=255 THEN PRINT"​LEFT < RIGHT"​ +130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2) 
-   ​200 IF A=1 THEN PRINT"​LEFT > RIGHT"​ +140 H1$= LEFT$(A$,​2):​H2$= LEFT$(B$,​2) 
-   ​210 IF A=0 THEN PRINT"​LEFT = RIGHT"+150 POKE &​HD001,​VAL("&​h"​+L1$):​POKE &​HD002,​VAL("&​h"​+H1$) 
 +160 POKE &​HD007,​VAL("&​h"​+L2$):​POKE &​HD008,​VAL("&​h"​+H2$) 
 +180 H=USR(H):​A=PEEK(&​HF100) 
 +190 IF A=255 THEN PRINT"​LEFT < RIGHT"​ 
 +200 IF A=1 THEN PRINT"​LEFT > RIGHT"​ 
 +210 IF A=0 THEN PRINT"​LEFT = RIGHT"
 </​code>​ </​code>​
  
-{{anchor:n166}}+{{anchor:n1066}}
 ===== 1.6.6. Преобразование типов ===== ===== 1.6.6. Преобразование типов =====
  
-<​code>​ + ​Имя подпрограммы ​ ^  ​Адрес ​ ​^  ​Выполняемые действия ​ ^ 
-    ┌────────┬───────┬──────────────────────────────────────────────┐ +|FRCINT|2F8Ah|Содержимое DAC преобразуется к целому типу| 
-    │  ​Имя ​  │       ​│ ​                                             │ +|FRCSNG|2FB2h|Содержимое DAC преобразуется к типу одинарной точности| 
-    │ подпро-│ Адрес ​│            ​Выполняемые действия ​             │ +|FRCDBL|303Ah|Содержимое DAC преобразуется к типу двойной точности| 
-    │ граммы │       ​│ ​                                             │ +|FIXER|30BEh|DAC:​=SGN(DAC)·INT(ABS(DAC))|
-    ├────────┼───────┼──────────────────────────────────────────────┤ +
-    ​│ ​FRCINT ​│ 2F8Ah │ Содержимое DAC преобразуется к целому типу ​  │ +
-    ​│ ​FRCSNG ​│ 2FB2h │ Содержимое DAC преобразуется к типу одинарной│ +
-    │        │       ​│ ​                 ​точности ​                   │ +
-    ​│ ​FRCDBL ​│ 303Ah │ Содержимое DAC преобразуется к типу двойной ​ │ +
-    │        │       ​│ ​                 ​точности ​                   │ +
-    ​│ ​FIXER  ​│ ​30BEh │          ​DAC:​=SGN(DAC)·INT(ABS(DAC)) ​        │ +
-    └────────┴───────┴──────────────────────────────────────────────┘ +
-   ​После выполнения подпрограммы в ячейке с именем ​ VALTYP будет находить- +
-ся код типа числа, находящегося в DAC. +
-</​code>​+
  
-{{anchor:n167}}+После выполнения подпрограммы в ячейке с именем ​ VALTYP будет находиться код типа числа, находящегося в DAC. 
 + 
 +{{anchor:n1067}}
 ===== 1.6.7. Преобразование чисел для вывода на печать ===== ===== 1.6.7. Преобразование чисел для вывода на печать =====
  
 +Для преобразования из //​строки//​ в //​число//​ используется подпрограмма с именем
 +
 +FIN (3299h)
 +  * __//​Аргументы//​__:​
 +    * HL — адрес строки символов,​
 +    * A — первый символ строки.
 +  * __//​Результаты//​__:​
 +    * DAC — вещественное число,
 +      * C —
 +        * 0 — была десятичная точка,
 +        * FFh — десятичной точки не было,
 +      * B — количество цифр после десятичной точки,
 +      * D — количество цифр в числе.
 +
 +
 +Для //​вывода//​ имеются две подпрограммы:​
 +  * FOUT (3425h) — неформатный вывод,
 +  * PUFOUT (3426h) — форматный вывод.
 +
 +Эти подпрограммы преобразуют число, находящееся в DAC, в строку ​ символов.
 +
 +__Аргументы__: ​
 +  * A - формат;​ содержимое его битов может быть следующим:​
 +    * bit7: если 1, то вывод осуществляется по формату;​
 +    * bit6: если 1, то через каждые 3 цифры вставляются запятые;​
 +    * bit5: если 1, то первые нули заменить на символ "​*";​
 +    * bit4: если 1, то перед числом вставить символ "​$";​
 +    * bit3: если 1, то число выводится всегда со знаком;​
 +    * bit2: если 1, то вставить знак после числа;
 +    * bit1:     не используется;​
 +    * bit0:
 +      * если 0, то число выводится с фиксированной точкой;​
 +      * если 1, то число выводится с плавающей точкой;​
 +  * B — количество цифр перед точкой;​
 +  * C — количество цифр после точки + 1.
 +__Результаты__: ​ HL — начальный адрес строки символов.
 +
 +{{anchor:​e1060-11}} __//​Пример 11//__. Вычисление косинуса вещественного числа.\\ {{.examples:​1060-11.bas|}} \\ [[+tab|wmsxbpge>​1060-11.bas]]
 <​code>​ <​code>​
-   ​Для преобразования ​ из  с т р о к и  в  ч и с л о  используется подпро- +10 CLEAR 200,&​HD000:​DEFUSR=&​HD000:​A=&​HD000 
-грамма с именем +20 A=A+1:READ R$:IF R$="​z"​ THEN 40 
-  ┌────────────────────────────────────────────────────────────────────┐ +30 POKE A,​VAL("&​h"​+R$):​GOTO 20 
-  │   FIN (3299h) ​                                                     │ +40 M=USR(0) 
-  │   А р г у м е н т ы:    HL  - адрес строки символов, ​              │ +50  DATA CD,B4,00 :'CALL 00B4h     ;​Ввод строки с клавиатуры 
-  │   ​───────────────── ​    ​A ​  - первый символ строки. ​               │ +60  DATA 23       :'​INC ​ HL 
-  │   Р е з у л ь т а т ы:  DAC - вещественное число, ​                 │ +70  DATA 7E       :'​LD ​  ​A,​(HL) 
-  │   ​─────────────────── ​  ​C ​  - { 0 - была десятичная точка, ​        │ +80  DATA CD,99,32 :'CALL 3299h     ;​Преобразование из строки в число 
-  │                               { FFh - десятичной точки не было, ​   │ +90  DATA 3E,08    :'​LD ​  ​A,​08h 
-  │                     ​B ​  - количество цифр после десятичной точки, ​ │ +100 DATA 32,63,F6 :'​LD ​  ​(F663h),​A ;​VALTYP:​=8 
-  │                     ​D ​  - количество цифр в числе. ​                │ +110 DATA CD,93,29 :'CALL 2993h     ;​Нахождение функции COS() 
-  └────────────────────────────────────────────────────────────────────┘ +120 DATA CD,25,34 :'CALL 3425h     ;​Преобразование числа в строку 
-   ​Для ​ в ы в о д а  имеются две подпрограммы:​ +130 DATA 06,11    :'​LD ​  ​B,​11h 
-           ​┌─────────────────────────────────────────────────┐ +140 DATA 7E       :'​LD ​  ​A,​(HL) ​                         ◀───┐ 
-           ​│ ​       FOUT (3425h) -  неформатный вывод, ​      │ +150 DATA 23       :'​INC ​ HL                                  │ 
-           ​│ ​     PUFOUT (3426h) -  форматный вывод. ​        │ +160 DATA CD,A2,00 :'CALL 00A2h     ;​Вывод символа на монитор │ 
-           ​└─────────────────────────────────────────────────┘ +170 DATA 10,F9    :'DJNZ $-5       ;​Конец цикла ​          ​───┘ 
-   ​Эти подпрограммы преобразуют число, находящееся в DAC, в строку ​ симво- +180 DATA C9       :'​RET 
-лов. +190 DATA "​z"​
-Аргументы:​ A - формат;​ содержимое его битов может быть следующим:​ +
-───────── ​     bit7: если 1, то вывод осуществляется по формату;​ +
-               bit6: если 1, то через каждые 3 цифры вставляются запятые;​ +
-               bit5: если 1, то первые нули заменить на символ "​*";​ +
-               bit4: если 1, то перед числом вставить символ "​$";​ +
-               bit3: если 1, то число выводится всегда со знаком;​ +
-               bit2: если 1, то вставить знак после числа;​ +
-               ​bit1: ​    не используется;​ +
-               ​bit0:​{если 0, то число выводится с фиксированной точкой;​ +
-                    {если 1, то число выводится с плавающей точкой;​ +
-           B - количество цифр перед точкой;​ +
-           C - количество цифр после точки + 1. +
-Результаты: ​ HL - начальный адрес строки символов. +
-────────── +
-   П р и м е р 11. Вычисление косинуса вещественного числа. +
-   ​────────────── +
-   10 CLEAR 200,&​HD000:​DEFUSR=&​HD000:​A=&​HD000 +
-   ​20 A=A+1:READ R$:IF R$="​z"​ THEN 40 +
-   ​30 POKE A,​VAL("&​h"​+R$):​GOTO 20 +
-   ​40 M=USR(0) +
-   ​50  DATA CD,B4,00 :'CALL 00B4h     ;​Ввод строки с клавиатуры +
-   ​60  DATA 23       :'​INC ​ HL +
-   ​70  DATA 7E       :'​LD ​  ​A,​(HL) +
-   ​80  DATA CD,99,32 :'CALL 3299h     ;​Преобразование из строки в число +
-   ​90  DATA 3E,08    :'​LD ​  ​A,​08h +
-   ​100 DATA 32,63,F6 :'​LD ​  ​(F663h),​A ;​VALTYP:​=8 +
-   ​110 DATA CD,93,29 :'CALL 2993h     ;​Нахождение функции COS() +
-   ​120 DATA CD,25,34 :'CALL 3425h     ;​Преобразование числа в строку +
-   ​130 DATA 06,11    :'​LD ​  ​B,​11h +
-   ​140 DATA 7E       :'​LD ​  ​A,​(HL) ​                         ◀───┐ +
-   ​150 DATA 23       :'​INC ​ HL                                  │ +
-   ​160 DATA CD,A2,00 :'CALL 00A2h     ;​Вывод символа на монитор │ +
-   ​170 DATA 10,F9    :'DJNZ $-5       ;​Конец цикла ​          ​───┘ +
-   ​180 DATA C9       :'​RET +
-   ​190 DATA "​z"​ +
-   ​Остальные подпрограммы перечислены ниже: +
-        ┌────────┬───────┬────────────────────────────────────────┐ +
-        │  Имя ​  ​│ ​      ​│ ​                                       │ +
-        │ подпро-│ Адрес │         ​Выполняемые действия ​          │ +
-        │ граммы │       ​│ ​                                       │ +
-        ├────────┼───────┼────────────────────────────────────────┤ +
-        │ FOUTB  │ 371Ah │ Целое число ──▶ в двоичный вид ​        │ +
-        │ FOUTO  │ 371Eh │ Целое число ──▶ в восьмеричный вид ​    │ +
-        │ FOUTH  │ 3722h │ Целое число ──▶ в шестнадцатеричный вид│ +
-        └────────┴───────┴────────────────────────────────────────┘ +
-   ​Для этих подпрограмм:​ +
-А р г у м е н т ы:        DAC    - целое число,​ +
-───────────────── ​        ​VALTYP = 2. +
-Р е з у л ь т а т ы:      HL - начальный адрес строки. +
-───────────────────+
 </​code>​ </​code>​
 +
 +Остальные подпрограммы перечислены ниже:
 +^  Имя подпрограммы ​ ^  Адрес ​ ^  Выполняемые действия ​ ^
 +|FOUTB|371Ah|Целое число ──▶ в двоичный вид|
 +|FOUTO|371Eh|Целое число ──▶ в восьмеричный вид|
 +|FOUTH|3722h|Целое число ──▶ в шестнадцатеричный вид|
 +
 +Для этих подпрограмм:​
 +\\ __//​Аргументы//​__:​
 +  * DAC — целое число,
 +  * VALTYP = 2.
 +__//​Результаты//​__:​
 +  * HL — начальный адрес строки.
 +
 +
  
 ---- ----
msx/basic_dialogue_programming_language/106.1662929030.txt.gz · Последние изменения: 2022-09-11 23:43 — GreyWolf