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

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


msx:basic_dialogue_programming_language:106

Различия

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

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

Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:106 [2022-09-11 23:35]
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 
  
-<code+<WRAP group
-1.6.  Р е а л и з а ц и я   в е щ е с т в е н н о й   а р и ф м е т и к и +<WRAP half column> \\ </​WRAP>​ 
-                      н а   м а ш и н н о м   ​я ​з ы к е+<WRAP half column><​WRAP right> 
 +Изучай все не из тщеславия, а ради 
 +\\ практической пользы. 
 +<WRAP rightalign>​ 
 +—//Г.Лихтенберг. Афоризмы// 
 +</​WRAP></​WRAP>​
  
-                                       ​Изучай все не из тщеславия,​ а ради +</​WRAP></​WRAP>​
-                                       ​практической пользы. +
-                                                   ​Г.Лихтенберг. Афоризмы+
  
-   В системной области имеются два вещественных "​регистра" ​-  ​а к к у м у+В системной области имеются два вещественных "​регистра" ​— //аккумулятора//, при помощи которых компьютер осуществляет все арифметические операции: ​ ​* ​ 
-л я т о р а, при помощи которых компьютер осуществляет все арифметические +  ​DAC ("​Decimal ACcumulator"​-"​десятичный аккумулятор"​) ​— F7F6h, 16 байтов,​ 
-операции:​ +  ​ARG ("​ARGument"​-"​аргумент"​) ​                         ​— F847h, 16 байтов. 
-  DAC ("​Decimal ACcumulator"​-"​десятичный аккумулятор"​) ​F7F6h, 16 байтов,​ + 
-  ARG ("​ARGument"​-"​аргумент"​) ​                         ​F847h, 16 байтов. +//Вещественное// число в аккумуляторах ​ размещается ​ следующим образом:​ 
-   ​В е щ е с т в е н н о е  число в аккумуляторах ​ размещается ​ следующим +<​code>​ 
-образом: ​          ​F7F6h     ​F7F7h ​                  F7FDh+                   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.+
  
 +В ячейке VALTYP системной области (по адресу F663h) хранится тип числа, находящегося в аккумуляторе DAC, причем тип закодирован следующим образом:​
 +  * 2 — целое число;
 +  * 4 — вещественное число одинарной точности;​
 +  * 8 — вещественное число двойной точности.
 +В следующих табличках приведен список входных точек очень полезных подпрограмм ROM.
  
-                       ​1.6.1. ​ П е р е с ы л к и 
-      ┌────────┬───────┬────────────────┬────────┬──────────────────┐ 
-      │   ​Имя ​ │       ​│ ​               │        │                  │ 
-      │ подпро-│ Адрес │   ​Выполняемые ​ │ Т и п  │    Изменяемые ​   │ 
-      │ граммы │       ​│ ​    ​действия ​  ​│ ​       │     ​регистры ​    │ 
-      ├────────┼───────┼────────────────┼────────┼──────────────────┤ 
-      │ MAF    │ 2C4Dh │   ARG := DAC   │ Double │ A,​B,​D,​E,​H,​L,​ARG ​ │ 
-      │ MAM    │ 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 ​  │ 
-      └────────┴───────┴────────────────┴────────┴──────────────────┘ 
-   П р и м е р 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:​n1061}}
 +===== 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>​
 +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
 +</​code> ​                                                  
  
 +{{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>​
  
 +{{anchor:​n1062}}
 +===== 1.6.2. Арифметические операции над целыми числами =====
  
 +<WRAP group>
 +<WRAP half column> \\ </​WRAP>​
 +<WRAP half column><​WRAP right>
 +Наиболее полезны те советы,​ которым
 +\\ легко следовать.
 +<WRAP rightalign>​
 +—//​Л.Вовенарг//​
 +</​WRAP></​WRAP>​
  
 +</​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|
  
-       ​1.6.2. ​  ​А ​р и ф м е т и ч е с к и е   ​о п е р а ц и и  над +{{anchor:​e1060-03}} __//Пример 3//__. Умножение целых чисел (операнды находятся в регистрах HL и DE).\\ {{.examples:​1060-03.bas|}} \\ [[+tab|wmsxbpge>​1060-03.bas]] 
-                         ц е л ы м и  ч и с л а м и+<​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 
 +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:n1063}} 
-                                      легко следовать. +===== 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 ​    │ +
-     ​└────────┴───────┴────────────────────┴───────────────────────┘ +
-   ​П ​р и м е р  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" ​    :'​+
  
-       ​1.6.3. ​ А р и ф м е т и ч е с к и е   о п е р а ц и и   н а д + ​Имя ​\\ подпрограммы ​ ^  ​Адрес ​ ​^  ​Выполняемые ​\\ действия ​ ​^ ​ ​Изменяемые ​\\ регистры  ​^ 
-                   в е щ е с т в е н н ы м и   ч и с л а м и +|DECSUB|268Ch|DAC := DAC-ARG|A,​B,​C,​D,​E,​H,​L,​DAC| 
-       ​┌────────┬───────┬────────────────────┬───────────────────────┐ +|DECADD|269Ah|DAC := DAC+ARG|A,​B,​C,​D,​E,​H,​L,​DAC| 
-       ​│ ​  Имя ​ ​│ ​      ​│ ​                   │                       │ +|DECNRM|26FAh|Нормализовать DAC|A,​B,​C,​D,​E,​H,​L,​DAC| 
-       ​│ ​подпро-│ Адрес ​Выполняемые действия│  ​Изменяемые регистры  ​│ +|DECROU|273Ch|Округлить DAC|A,​B,​C,​D,​E,​H,​L,​DAC| 
-       │ граммы │       ​│ ​                   │                       │ +|DECMUL|27E6h|DAC := DAC·ARG|A,​B,​C,​D,​E,​H,​L,​DAC| 
-       ​├────────┼───────┼────────────────────┼───────────────────────┤ +|DECDIV|289Fh|DAC := DAC/ARG|A,​B,​C,​D,​E,​H,​L,​DAC| 
-       │ DECSUB ​│ 268Ch │  ​DAC := DAC-ARG ​   ​│ ​  A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +|COS|2993h|DAC := COS(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ DECADD ​│ 269Ah │  ​DAC := DAC+ARG ​   ​│ ​  A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +|SIN|29ACh|DAC := SIN(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ DECNRM ​│ 26FAh │ Нормализовать DAC  ​│ ​  A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +|TAN|29FBh|DAC := TAN(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ DECROU ​│ 273Ch │   Округлить DAC    ​│ ​  A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +|ATN|2A14h|DAC := ATN(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ DECMUL ​│ 27E6h │  ​DAC := DAC·ARG ​   ​│ ​  A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +|LOG|2A72h|DAC := LOG(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ DECDIV ​│ 289Fh │  ​DAC := DAC/​ARG ​   ​│ ​  A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +|SQR|2AFFh|DAC := SQR(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ COS    ​│ ​2993h │  ​DAC := COS(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG ​ +|EXP|2B4Ah|DAC := EXP(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ SIN    ​│ ​29ACh │  ​DAC := SIN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG ​ +|RND|2BDFh|DAC := RND(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ TAN    ​│ ​29FBh │  ​DAC := TAN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG ​ +|SIGN|2E71h|A := SIGN(DAC)|A| 
-       │ ATN    ​│ ​2A14h │  ​DAC := ATN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG ​ +|ABSFN|2E82h|DAC := ABS(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG| 
-       │ LOG    ​│ ​2A72h │  ​DAC := LOG(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG ​ +|NEG|2E8Dh|DAC := - DAC|A,H,L,DAC| 
-       │ SQR    ​│ ​2AFFh │  ​DAC := SQR(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG ​ +|SGN|2E97h|DAC := SGN(DAC)|A,H,L,DAC|
-       │ 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 │  ​  ​:= SIGN(DAC) ​ ​│ ​         ​           │ +
-       │ 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:​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>​
  
-   10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 +{{anchor:​e1060-05}} __//​Пример 5//__. Возведение в степень.\\ {{.examples:​1060-05.bas|}} \\ [[+tab|wmsxbpge>​1060-05.bas]] 
-   ​20 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ​ ;F000h +<​code>​ 
-   ​30 DATA CD,​5C,​2C ​    :'​LD ​ DAC,​(HL) ​       ;F003h +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 
-   ​60 DATA CD,DF,2B     :'​DAC:​=RND(DAC      ;F006h +20 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F000h 
-   ​70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ​ ;F009h +30 DATA CD,​5C,​2C ​    :'​LD ​ DAC,​(HL) ​      ​;F003h 
-   ​80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​       ;F00Ch +40 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N2) ;F006h 
-   ​90 DATA C9           :'​RET ​                ​;F00Fh +50 DATA CD,​50,​2C ​    :'​LD ​ ARG,​(HL) ​      ;​F009h 
-   ​100 FOR T=0 TO 15:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT +60 DATA CD,D7,37     :'​DAC:​=DAC^ARG       ;F00Ch 
-   ​110 INPUT"Число";N1 +70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F00Fh 
-   ​120 A$=HEX$(VARPTR(N1)) +80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​      ​;F012h 
-   ​130 L1$=RIGHT$(A$,​2) +90 DATA C9           :'​RET ​               ;F015h 
-   ​140 H1$=LEFT$(A$,​2) +100 FOR T=0 TO &H15:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT 
-   ​150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$) +110 INPUT"N1";N1:​INPUT"​N2";​N2 
-   ​170 POKE &HF00A,​VAL("&​h"​+L1$):​POKE &HF00B,​VAL("&​h"​+H1$) +120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2)) 
-   ​180 H=USR(H):PRINT"RND(n1)=";N1+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>​
  
 +{{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
 +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>​
  
 +{{anchor:​e1060-07}} __//​Пример 7//__. Генерация псевдослучайного числа.\\ {{.examples:​1060-07.bas|}} \\ [[+tab|wmsxbpge>​1060-07.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
 +60 DATA CD,​DF,​2B ​    :'​DAC:​=RND(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
 +120 A$=HEX$(VARPTR(N1))
 +130 L1$=RIGHT$(A$,​2)
 +140 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"​RND(n1)=";​N1
 +</​code>​
  
-   П р и м е р  8.  Вычислить значение функции двух переменных ​ +{{anchor:​e1060-08}} __//Пример 8//__. Вычислить значение функции двух переменных z = cos(x)+ sin(y)\\ {{.examples:​1060-08.bas|}} \\ [[+tab|wmsxbpge>​1060-08.bas]] 
-   ​────────────── ​             ​z = cos(x)+ sin(y)+<​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>​
  
-   10 CLEAR 200,&​HF000:DEFUSR=&​HF000:​T=0 +{{anchor:n1064}} 
-   20 INPUT"​X=";​X:​INPUT"​Y=";​Y:​A1$=HEX$(VARPTR(X)):​A2$=HEX$(VARPTR(Y)) +===== 1.6.4. Возведение ​в степень =====
-   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:=+
-   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:=+
-   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 '​Результат+
  
 +^  Имя подпрограммы ​ ^  Адрес ​ ^  Выполняемые действия ​ ^  //​Тип// ​ ^
 +|SNGEXP|37C8h|%% DAC := DAC^ARG %%|Одинарная точность|
 +|DBLEXP|37D7h|%% DAC := DAC^ARG %%|Двойная точность|
 +|INTEXP|383Fh|%% DAC := DE^HL %%|Целая|
  
-\page +{{anchor:​e1060-09}} __//Пример 9//__. Вычислить 3².\\ {{.examples:​1060-09.bas|}} \\ [[+tab|wmsxbpge>​1060-09.bas]] 
-              1.6.4. ​ В о з в е д е н и е  в  с т е п е н ь +<​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 
-     │ SNGEXP │ 37C8h │  DAC := DAC^ARG ​   │   ​Одинарная точность ​ │ +70 DATA 11,​00,​F2 ​        :'​LD ​  ​DE,​F200h 
-     │ DBLEXP │ 37D7h │  DAC := DAC^ARG ​   │    Двойная точность ​  │ +80 DATA 01,​10,​00 ​        :'​LD ​  ​BC,​10h 
-     │ INTEXP │ 383Fh │  DAC := DE^HL      │         ​Целая ​        │ +90 DATA ED,B0            :'​LDIR 
-     ​└────────┴───────┴────────────────────┴───────────────────────┘ +130 DATA C9              :'​RET 
-   П р и м е р  9.   ​Вычислить 3² . +140 FOR T=0 TO 19:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT 
-   ────────────── +150 X=USR(X) 
-   ​10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 +160 FOR T=0 TO 15:PRINT HEX$(PEEK(&​HF200+T));"​ ";:​NEXT 
-   ​30 DATA 11,​03,​00 ​        :'​LD ​  ​DE,​0003h +</​code>​
-   ​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:​n1065}}
 +===== 1.6.5. Сравнение =====
 + 
 +^  Имя подпрограммы ​ ^  Адрес ​ ^  Тип ​ ^  Левая часть условия ​ ^  Правая часть условия ​ ^  Изменяемые регистры ​ ^
 +|FCOMP|2F21h|Single|CBED|DAC|HL|
 +|ICOMP|2F4Dh|Integer|DE|HL|HL|
 +|XDCOMP|2F5Ch|Double|ARG|DAC|A,​B,​C,​D,​E,​H,​L|
  
-                      1.6.5. ​ С р а в н е н и е  +Подпрограмма возвращает следующее содержимое регистра A 
-  ┌────────┬───────┬─────────┬───────┬───────┬───────────────────────┐ +  ​* ​-1, если ​ левая часть условия < правой части условия,​ 
-  │   ​Имя ​ │       ​│ ​        │ Левая │ Правая│ ​                      │ +  ​* ​0, если ​ левая часть условия = правой части условия,​ 
-  │ подпро-│ Адрес │   ​Тип ​  │ часть │ часть │  Изменяемые регистры ​ │ +  ​* ​1, если ​ левая часть условия > правой части условия.
-  │ граммы │       ​│ ​        ​│условия│условия│ ​                      │ +
-  ├────────┼───────┼─────────┼───────┼───────┼───────────────────────┤ +
-  │ 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.  Сравнение двух вещественных чисел. +{{anchor:​e1060-10}} __//Пример 10//__. Сравнение двух вещественных чисел.\\ {{.examples:​1060-10.bas|}} \\ [[+tab|wmsxbpge>​1060-10.bas]] 
-   ────────────── +<​code>​ 
-   ​10 CLEAR 200,&​HD000:​DEFUSR=&​HD000 +10 CLEAR 200,&​HD000:​DEFUSR=&​HD000 
-   ​20 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N1)  +20 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N1)  
-   ​30 DATA CD,​5C,​2C ​         :'​LD ​ DAC,​(HL) ​     +30 DATA CD,​5C,​2C ​         :'​LD ​ DAC,​(HL) ​     
-   ​40 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N2)  +40 DATA 21,​00,​00 ​         :'​LD ​ HL,​address(N2)  
-   ​50 DATA CD,​50,​2C ​         :'​LD ​ ARG,(HL) +50 DATA CD,​50,​2C ​         :'​LD ​ ARG,(HL) 
-   ​60 DATA CD,​5C,​2F ​         :'​Сравнить DAC и ARG +60 DATA CD,​5C,​2F ​         :'​Сравнить DAC и ARG 
-   ​70 DATA 32,​00,​F1 ​         :'​LD ​ (F100h),A  +70 DATA 32,​00,​F1 ​         :'​LD ​ (F100h),A  
-   ​90 DATA C9                :'​RET ​             +90 DATA C9                :'​RET ​             
-   ​100 FOR T=0 TO &​H12:​READ Z$:POKE &​HD000+T,​VAL("&​h"​+Z$):​NEXT +100 FOR T=0 TO &​H12:​READ Z$:POKE &​HD000+T,​VAL("&​h"​+Z$):​NEXT 
-   ​110 INPUT"​Left";​N1:​INPUT"​Right";​N2 +110 INPUT"​Left";​N1:​INPUT"​Right";​N2 
-   ​120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2)) +120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2)) 
-   ​130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2) +130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2) 
-   ​140 H1$= LEFT$(A$,​2):​H2$= LEFT$(B$,​2) +140 H1$= LEFT$(A$,​2):​H2$= LEFT$(B$,​2) 
-   ​150 POKE &​HD001,​VAL("&​h"​+L1$):​POKE &​HD002,​VAL("&​h"​+H1$) +150 POKE &​HD001,​VAL("&​h"​+L1$):​POKE &​HD002,​VAL("&​h"​+H1$) 
-   ​160 POKE &​HD007,​VAL("&​h"​+L2$):​POKE &​HD008,​VAL("&​h"​+H2$) +160 POKE &​HD007,​VAL("&​h"​+L2$):​POKE &​HD008,​VAL("&​h"​+H2$) 
-   ​180 H=USR(H):​A=PEEK(&​HF100) +180 H=USR(H):​A=PEEK(&​HF100) 
-   ​190 IF A=255 THEN PRINT"​LEFT < RIGHT"​ +190 IF A=255 THEN PRINT"​LEFT < RIGHT"​ 
-   ​200 IF A=1 THEN PRINT"​LEFT > RIGHT"​ +200 IF A=1 THEN PRINT"​LEFT > RIGHT"​ 
-   ​210 IF A=0 THEN PRINT"​LEFT = RIGHT"+210 IF A=0 THEN PRINT"​LEFT = RIGHT" 
 +</​code>​
  
 +{{anchor:​n1066}}
 +===== 1.6.6. Преобразование типов =====
  
-            1.6.6. ​ П р е о б р а з о в а н и е   т и п о в + ​Имя подпрограммы ​ ^  ​Адрес ​ ​^  ​Выполняемые действия ​ ^ 
-    ┌────────┬───────┬──────────────────────────────────────────────┐ +|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.+
  
-        1.6.7.  ​П р е о б р а з о в а н и е   ч и с е л   д л я  +После выполнения подпрограммы в ячейке ​с именем ​ VALTYP будет находиться код типа числа, ​находящегося в DAC.
-                      в ы в о д а  на  ​п ​е ч а т ь+
  
-   Для преобразования ​ из  с т р о к и  в  ч и с л о  используется подпро+{{anchor:​n1067}} 
-грамма с именем +===== 1.6.7. Преобразование чисел для вывода на печать ===== 
-  ​┌────────────────────────────────────────────────────────────────────┐ + 
-  ​│ ​  FIN (3299h) ​                                                     │ +Для преобразования из //строки// в //число// используется подпрограмма с именем 
-  ​│   А р г у м е н т ы:    HL  ​- ​адрес строки символов, ​              │ + 
-  ​│ ​  ​───────────────── ​      - первый символ строки. ​               │ +FIN (3299h) 
-  ​│   Р е з у л ь т а т ы:  DAC вещественное число, ​                 │ +  ​* __//Аргументы//__: 
-  ​│ ​  ​─────────────────── ​    - { была десятичная точка, ​        │ +    HL — адрес строки символов,​ 
-  ​│ ​                              ​{ ​FFh десятичной точки не было, ​   │ +    ​* ​— первый символ строки. 
-  ​│ ​                      - количество цифр после десятичной точки, ​ │ +  ​* __//Результаты//__: 
-  ​│ ​                      - количество цифр в числе. ​                │ +    * DAC — вещественное число,​ 
-  ​└────────────────────────────────────────────────────────────────────┘ +      ​* ​— 
-   ​Для ​ в ы в о д а  имеются две подпрограммы:​ +        * — была десятичная точка,​ 
-           ┌─────────────────────────────────────────────────┐ +        ​* ​FFh — десятичной точки не было, 
-           ​│ ​       ​FOUT (3425h) ​-  ​неформатный вывод, ​      │ +      ​* ​— количество цифр после десятичной точки,​ 
-           │      ​PUFOUT (3426h) ​-  ​форматный вывод. ​        │ +      ​* ​— количество цифр в числе. 
-           └─────────────────────────────────────────────────┘ + 
-   ​Эти подпрограммы преобразуют число, находящееся в DAC, в строку ​ симво+ 
-лов. +Для ​//вывода// имеются две подпрограммы:​ 
-Аргументы:​ A - формат;​ содержимое его битов может быть следующим:​ +  ​* ​FOUT (3425h) ​— неформатный вывод,​ 
-───────── ​     ​bit7: если 1, то вывод осуществляется по формату;​ +  ​* ​PUFOUT (3426h) ​— форматный вывод. 
-               ​bit6: если 1, то через каждые 3 цифры вставляются запятые;​ + 
-               ​bit5: если 1, то первые нули заменить на символ "​*";​ +Эти подпрограммы преобразуют число, находящееся в DAC, в строку ​ символов. 
-               ​bit4: если 1, то перед числом вставить символ "​$";​ + 
-               ​bit3: если 1, то число выводится всегда со знаком;​ +__Аргументы__ 
-               ​bit2: если 1, то вставить знак после числа;​ +  * A - формат;​ содержимое его битов может быть следующим:​ 
-               ​bit1:     не используется;​ +    ​* ​bit7: если 1, то вывод осуществляется по формату;​ 
-               ​bit0:{если 0, то число выводится с фиксированной точкой;​ +    ​* ​bit6: если 1, то через каждые 3 цифры вставляются запятые;​ 
-                    {если 1, то число выводится с плавающей точкой;​ +    ​* ​bit5: если 1, то первые нули заменить на символ "​*";​ 
-           ​количество цифр перед точкой;​ +    ​* ​bit4: если 1, то перед числом вставить символ "​$";​ 
-           ​количество цифр после точки + 1. +    ​* ​bit3: если 1, то число выводится всегда со знаком;​ 
-Результаты: ​ HL начальный адрес строки символов. +    ​* ​bit2: если 1, то вставить знак после числа;​ 
-────────── +    ​* ​bit1:     не используется;​ 
-   ​П р и м е р 11. Вычисление косинуса вещественного числа. +    ​* ​bit0: 
-   ────────────── +      * если 0, то число выводится с фиксированной точкой;​ 
-   ​10 CLEAR 200,&​HD000:​DEFUSR=&​HD000:​A=&​HD000 +      ​* ​если 1, то число выводится с плавающей точкой;​ 
-   ​20 A=A+1:READ R$:IF R$="​z"​ THEN 40 +  ​* ​— количество цифр перед точкой;​ 
-   ​30 POKE A,​VAL("&​h"​+R$):​GOTO 20 +  ​* ​— количество цифр после точки + 1. 
-   ​40 M=USR(0) +__Результаты__:  HL — начальный адрес строки символов. 
-   ​50  DATA CD,B4,00 :'CALL 00B4h     ;​Ввод строки с клавиатуры + 
-   ​60  DATA 23       :'​INC ​ HL +{{anchor:​e1060-11}} __//Пример 11//__. Вычисление косинуса вещественного числа.\\ {{.examples:​1060-11.bas|}} \\ [[+tab|wmsxbpge>​1060-11.bas]] 
-   ​70  DATA 7E       :'​LD ​  ​A,​(HL) +<​code>​ 
-   ​80  DATA CD,99,32 :'CALL 3299h     ;​Преобразование из строки в число +10 CLEAR 200,&​HD000:​DEFUSR=&​HD000:​A=&​HD000 
-   ​90  DATA 3E,08    :'​LD ​  ​A,​08h +20 A=A+1:READ R$:IF R$="​z"​ THEN 40 
-   ​100 DATA 32,63,F6 :'​LD ​  ​(F663h),​A ;​VALTYP:​=8 +30 POKE A,​VAL("&​h"​+R$):​GOTO 20 
-   ​110 DATA CD,93,29 :'CALL 2993h     ;​Нахождение функции COS() +40 M=USR(0) 
-   ​120 DATA CD,25,34 :'CALL 3425h     ;​Преобразование числа в строку +50  DATA CD,B4,00 :'CALL 00B4h     ;​Ввод строки с клавиатуры 
-   ​130 DATA 06,11    :'​LD ​  ​B,​11h +60  DATA 23       :'​INC ​ HL 
-   ​140 DATA 7E       :'​LD ​  ​A,​(HL) ​                         ◀───┐ +70  DATA 7E       :'​LD ​  ​A,​(HL) 
-   ​150 DATA 23       :'​INC ​ HL                                  │ +80  DATA CD,99,32 :'CALL 3299h     ;​Преобразование из строки в число 
-   ​160 DATA CD,A2,00 :'CALL 00A2h     ;​Вывод символа на монитор │ +90  DATA 3E,08    :'​LD ​  ​A,​08h 
-   ​170 DATA 10,F9    :'DJNZ $-5       ;​Конец цикла ​          ​───┘ +100 DATA 32,63,F6 :'​LD ​  ​(F663h),​A ;​VALTYP:​=8 
-   ​180 DATA C9       :'​RET +110 DATA CD,93,29 :'CALL 2993h     ;​Нахождение функции COS() 
-   ​190 DATA "​z"​ +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 
-        │ FOUTB  │ 371Ah │ Целое число ──▶ в двоичный вид ​        │ +190 DATA "​z"​
-        │ 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.1662928547.txt.gz · Последние изменения: 2022-09-11 23:35 — GreyWolf