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

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


msx:basic_dialogue_programming_language:106

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:106 [2023-02-18 16:29]
GreyWolf [1.6.1. Пересылки]
msx:basic_dialogue_programming_language:106 [2023-02-19 16:27] (текущий)
GreyWolf
Строка 4: Строка 4:
 {{anchor:​n106}} {{anchor:​n106}}
 ====== ​ 1.6. Реализация вещественной арифметики на машинном языке ====== ====== ​ 1.6. Реализация вещественной арифметики на машинном языке ======
-FIXME 
  
 <WRAP group> <WRAP group>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Изучай все не из тщеславия,​ а ради Изучай все не из тщеславия,​ а ради
 \\ практической пользы. \\ практической пользы.
Строка 56: Строка 55:
 ===== 1.6.1. Пересылки ===== ===== 1.6.1. Пересылки =====
  
-^  Имя подпрограммы ​ ^  Адрес ​ ^  Выполняемые действия ​ ^  //​Тип// ​ ^  Изменяемые регистры ​ ^+^  Имя ​\\ подпрограммы ​ ^  Адрес ​ ^  Выполняемые ​\\ действия ​ ^  //​Тип// ​ ^  Изменяемые ​\\ регистры ​ ^
 |MAF|2C4Dh|ARG := DAC|Double|A,​B,​D,​E,​H,​L,​ARG | |MAF|2C4Dh|ARG := DAC|Double|A,​B,​D,​E,​H,​L,​ARG |
 |AM|2C50h|ARG := (HL)| Double | A,​B,​D,​E,​H,​L,​ARG| |AM|2C50h|ARG := (HL)| Double | A,​B,​D,​E,​H,​L,​ARG|
Строка 85: Строка 84:
 |VMOVMF|2F10h|(HL):​= DAC|VALTYP|B,​C,​D,​E,​H,​L| |VMOVMF|2F10h|(HL):​= DAC|VALTYP|B,​C,​D,​E,​H,​L|
  
-П р и м е р 1.  Записать число в аккумулятор DAC,а затем прочитать его.+{{anchor:​e1060-01}} __//Пример 1//__. Записать число в аккумулятор DAC,а затем прочитать его. ​\\ {{.examples:​1060-01.bas|}} \\ [[+tab|wmsxbpge>​1060-01.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
Строка 103: Строка 102:
 </​code> ​                                                   </​code> ​                                                  
  
-П р и м е р 2.  Записать число в аккумулятор ARG,а затем прочитать его.+{{anchor:​e1060-02}} __//Пример 2//__. Записать число в аккумулятор ARG,а затем прочитать его.\\ {{.examples:​1060-02.bas|}} \\ [[+tab|wmsxbpge>​1060-02.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
Строка 123: Строка 122:
 {{anchor:​n1062}} {{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 ​    │ +</​WRAP></​WRAP>​ 
-     │ 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 ​    │ +|UMULT|314Ah|DE := BC·DE|A,B,C,D,E| 
-     │ IMOD   │ 323Ah │   HL := DE mod HL  ​│ ​    A,​B,​C,​D,​E,​H,​L ​    │ +|ISUB|3167h|HL := DE-HL|A,​B,​C,​D,​E,​H,​L| 
-     └────────┴───────┴────────────────────┴───────────────────────┘ +|IADD|3172h|HL := DE+HL|A,​B,​C,​D,​E,​H,​L| 
-   ​П р и м е р  3.  Умножение целых чисел (операнды находятся в регистрах +|IMULT|3193h|HL := DE·HL|A,​B,​C,​D,​E,​H,​L| 
-   ​────────────── ​  HL и DE). +|IDIV|31E6h|HL := DE/HL|A,​B,​C,​D,​E,​H,​L| 
-   ​10 CLEAR 200,&​HD000 +|IMOD|323Ah|HL := DE mod HL|A,​B,​C,​D,​E,​H,​L| 
-   ​20 DEFUSR=&​HD000 + 
-   ​30 I=&​HD000 +{{anchor:​e1060-03}} __//Пример 3//__. Умножение целых чисел (операнды находятся в регистрах HL и DE).\\ {{.examples:​1060-03.bas|}} \\ [[+tab|wmsxbpge>​1060-03.bas]] 
-   ​40 READ A$:IF A$="​z"​ THEN A=USR(0):​PRINT PEEK(&​H9000):​END +<​code>​ 
-   ​60 POKE I,​VAL("&​h"​+A$):​I=I+1:​GOTO 40 +10 CLEAR 200,&​HD000 
-   ​90  DATA 21,​0A,​00:' ​ LD   ​HL,​000Ah ​ ; Загрузка регистра HL константой +20 DEFUSR=&​HD000 
-   ​100 DATA 11,​04,​00:' ​ LD   ​DE,​0004h ​ ; Загрузка регистра DE константой +30 I=&​HD000 
-   ​110 DATA CD,​93,​31:' ​ CALL 3193h     ; Вызов нужной подпрограммы  +40 READ A$:IF A$="​z"​ THEN A=USR(0):​PRINT PEEK(&​H9000):​END 
-   ​120 DATA 22,​00,​90:' ​ LD   ​(9000h),​HL +60 POKE I,​VAL("&​h"​+A$):​I=I+1:​GOTO 40 
-   ​130 DATA C9      :' ​ RET +90  DATA 21,​0A,​00:' ​ LD   ​HL,​000Ah ​ ; Загрузка регистра HL константой 
-   ​140 DATA "​z" ​    :'​+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>​ </​code>​
  
Строка 158: Строка 160:
 ===== 1.6.3. Арифметические операции над вещественными числами ===== ===== 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|
 +|COS|2993h|DAC := COS(DAC)|A,​B,​C,​D,​E,​H,​L,​DAC,​ARG|
 +|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|
 +
 +{{anchor:​e1060-04}} __//​Пример 4//__. Сумма двух вещественных чисел.\\ {{.examples:​1060-04.bas|}} \\ [[+tab|wmsxbpge>​1060-04.bas]]
 <​code>​ <​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 
-       │ DECSUB │ 268Ch │  DAC := DAC-ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +60 DATA CD,​9A,​26 ​    :'​DAC:​=DAC+ARG ​      ;​F00Ch 
-       │ DECADD │ 269Ah │  DAC := DAC+ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F00Fh 
-       │ DECNRM │ 26FAh │ Нормализовать DAC  │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​      ;​F012h 
-       │ DECROU │ 273Ch │   ​Округлить DAC    │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +90 DATA C9           :'​RET ​               ;F015h 
-       │ DECMUL │ 27E6h │  DAC := DAC·ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +100 FOR T=0 TO &​H15:​READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT 
-       │ DECDIV │ 289Fh │  DAC := DAC/​ARG ​   │   ​A,​B,​C,​D,​E,​H,​L,​DAC ​  │ +110 INPUT"​Первое слагаемое";​N1:​INPUT"​Второе слагаемое";​N2 
-       │ COS    │ 2993h │  DAC := COS(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +120 A$=HEX$(VARPTR(N1)):​B$=HEX$(VARPTR(N2)) 
-       │ SIN    │ 29ACh │  DAC := SIN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +130 L1$=RIGHT$(A$,​2):​L2$=RIGHT$(B$,​2) 
-       │ TAN    │ 29FBh │  DAC := TAN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +140 H1$=LEFT$(A$,​2):​H2$=LEFT$(B$,​2) 
-       │ ATN    │ 2A14h │  DAC := ATN(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$) 
-       │ LOG    │ 2A72h │  DAC := LOG(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +160 POKE &​HF007,​VAL("&​h"​+L2$):​POKE &​HF008,​VAL("&​h"​+H2$) 
-       │ SQR    │ 2AFFh │  DAC := SQR(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +170 POKE &​HF010,​VAL("&​h"​+L1$):​POKE &​HF011,​VAL("&​h"​+H1$) 
-       │ EXP    │ 2B4Ah │  DAC := EXP(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +180 H=USR(H) 
-       │ RND    │ 2BDFh │  DAC := RND(DAC) ​  │ A,​B,​C,​D,​E,​H,​L,​DAC,​ARG │ +190 PRINT"​Сумма:";​N1 
-       │ SIGN   │ 2E71h │  A   := SIGN(DAC) ​ │          A            │ +</​code>​
-       │ 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-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>​
  
-   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 +60 DATA CD,AC,29     :'​DAC:​=SIN(DAC)      ;F006h 
-   ​90 DATA C9           :'​RET ​                ​;F00Fh +70 DATA 21,​00,​00 ​    :'​LD ​ HL,​address(N1) ;F009h 
-   ​100 FOR T=0 TO 15:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT +80 DATA CD,​67,​2C ​    :'​LD ​ (HL),​DAC ​      ​;F00Ch 
-   ​110 INPUT"​Число";​N1 +90 DATA C9           :'​RET ​               ;F00Fh 
-   ​120 ​A$=HEX$(VARPTR(N1)) +100 FOR T=0 TO 15:READ Z$:POKE &​HF000+T,​VAL("&​h"​+Z$):​NEXT 
-   ​130 L1$=RIGHT$(A$,​2) +110 INPUT"​Число";​N1:A$=HEX$(VARPTR(N1)) 
-   ​140 ​H1$=LEFT$(A$,​2) +130 L1$=RIGHT$(A$,​2):H1$=LEFT$(A$,​2) 
-   ​150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$) +150 POKE &​HF001,​VAL("&​h"​+L1$):​POKE &​HF002,​VAL("&​h"​+H1$) 
-   ​170 POKE &​HF00A,​VAL("&​h"​+L1$):​POKE &​HF00B,​VAL("&​h"​+H1$) +170 POKE &​HF00A,​VAL("&​h"​+L1$):​POKE &​HF00B,​VAL("&​h"​+H1$) 
-   ​180 H=USR(H):​PRINT"​RND(n1)=";N1+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>​
  
- +{{anchor:​e1060-08}} __//Пример 8//__. Вычислить значение функции двух переменных z = cos(x)+ sin(y)\\ {{.examples:​1060-08.bas|}} \\ [[+tab|wmsxbpge>​1060-08.bas]] 
-   П р и м е р  8.  Вычислить значение функции двух переменных ​ +<​code>​ 
-   ​────────────── ​             ​z = cos(x)+ sin(y) +10 CLEAR 200,&​HF000:​DEFUSR=&​HF000:​T=0 
- +20 INPUT"​X=";​X:​INPUT"​Y=";​Y:​A1$=HEX$(VARPTR(X)):​A2$=HEX$(VARPTR(Y)) 
-   ​10 CLEAR 200,&​HF000:​DEFUSR=&​HF000:​T=0 +30 L1=VAL("&​h"​+RIGHT$(A1$,​2)):​R1=VAL("&​h"​+LEFT$(A1$,​2)) '​Адрес числа X 
-   ​20 INPUT"​X=";​X:​INPUT"​Y=";​Y:​A1$=HEX$(VARPTR(X)):​A2$=HEX$(VARPTR(Y)) +40 L2=VAL("&​h"​+RIGHT$(A2$,​2)):​R2=VAL("&​h"​+LEFT$(A2$,​2)) '​Адрес числа Y 
-   ​30 L1=VAL("&​h"​+RIGHT$(A1$,​2)):​R1=VAL("&​h"​+LEFT$(A1$,​2)) '​Адрес числа X +50 POKE &​HF301,​L1:​POKE &​HF302,​R1:​POKE &​HF303,​L2:​POKE &​HF304,​R2 
-   ​40 L2=VAL("&​h"​+RIGHT$(A2$,​2)):​R2=VAL("&​h"​+LEFT$(A2$,​2)) '​Адрес числа Y +60 READ Z$:IF Z$<>"​RET"​ THEN POKE &​HF000+T,​VAL("&​h"​+Z$):​T=T+1:​GOTO 60 
-   ​50 POKE &​HF301,​L1:​POKE &​HF302,​R1:​POKE &​HF303,​L2:​POKE &​HF304,​R2 +70  DATA 2A,01,F3 :'​LD ​  ​HL,​(F301h);​ HL содержит адрес переменной X 
-   ​60 READ Z$:IF Z$<>"​RET"​ THEN POKE &​HF000+T,​VAL("&​h"​+Z$):​T=T+1:​GOTO 60 +75  DATA E5       :'​PUSH HL        ; 
-   ​70  DATA 2A,01,F3 :'​LD ​  ​HL,​(F301h);​ HL содержит адрес переменной X +80  DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=X 
-   ​75  DATA E5       :'​PUSH HL        ; +90  DATA CD,93,29 :'​DAC:​=COS(DAC) ​ ; DAC:​=COS(X) 
-   ​80  DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=X +95  DATA E1       :'​POP ​ HL        ; 
-   ​90  DATA CD,93,29 :'​DAC:​=COS(DAC) ​ ; DAC:​=COS(X) +97  DATA E5       :'​PUSH HL        ; 
-   ​95  DATA E1       :'​POP ​ HL        ; +100 DATA CD,67,2C :'​LD ​  ​(HL),​DAC ​ ; Z:​=COS(X)◀── "​Прячем"​ результат в 
-   ​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 
-                                      ; В нашем случае: ​ Z ≡ X  +120 DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=Y 
-   ​110 DATA 2A,03,F3 :'​LD ​  ​HL,​(F303h);​ HL содержит адрес переменной Y +130 DATA CD,AC,29 :'​DAC:​=SIN(DAC) ​ ; DAC:​=SIN(Y) 
-   ​120 DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=Y +140 DATA CD,4D,2C :'​LD ​  ​ARG,​DAC ​  ; ARG:​=SIN(Y) 
-   ​130 DATA CD,AC,29 :'​DAC:​=SIN(DAC) ​ ; DAC:​=SIN(Y) +145 DATA E1       :'​POP ​ HL        ; 
-   ​140 DATA CD,4D,2C :'​LD ​  ​ARG,​DAC ​  ; ARG:​=SIN(Y) +147 DATA E5       :'​PUSH HL        ; 
-   ​145 DATA E1       :'​POP ​ HL        ; +150 DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=Z 
-   ​147 DATA E5       :'​PUSH HL        ; +160 DATA CD,9A,26 :'​ADD ​ DAC,​ARG ​  ; DAC:​=Z+SIN(Y) 
-   ​150 DATA CD,5C,2C :'​LD ​  ​DAC,​(HL) ​ ; DAC:=Z +165 DATA E1       :'​POP ​ HL        ; 
-   ​160 DATA CD,9A,26 :'​ADD ​ DAC,​ARG ​  ; DAC:​=Z+SIN(Y) +170 DATA CD,67,2C :'​LD ​  ​(HL),​DAC ​ ; X:=DAC 
-   ​165 DATA E1       :'​POP ​ HL        ; +180 DATA C9,"​RET"​ :'​RET 
-   ​170 DATA CD,67,2C :'​LD ​  ​(HL),​DAC ​ ; X:=DAC +190 PRINT COS(X)+SIN(Y) 
-   ​180 DATA C9,"​RET"​ :'​RET +200 A=USR(A):​PRINT X '​Результат
-   ​190 PRINT COS(X)+SIN(Y) +
-   ​200 A=USR(A):​PRINT X '​Результат +
 </​code>​ </​code>​
  
Строка 300: Строка 298:
 ===== 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>​
  
Строка 330: Строка 322:
 ===== 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>​
  
Строка 371: Строка 358:
 ===== 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 преобразуется к целому типу ​  │ +После выполнения подпрограммы в ячейке с именем ​ VALTYP будет находиться код типа числа, находящегося в DAC.
-    ​│ ​FRCSNG ​│ 2FB2h │ Содержимое DAC преобразуется к типу одинарной│ +
-    │        │       ​│ ​                 ​точности ​                   │ +
-    ​│ ​FRCDBL ​│ 303Ah │ Содержимое DAC преобразуется к типу двойной ​ │ +
-    │        │       ​│ ​                 ​точности ​                   │ +
-    ​│ ​FIXER  ​│ ​30BEh │          ​DAC:​=SGN(DAC)·INT(ABS(DAC)) ​        │ +
-    ​└────────┴───────┴──────────────────────────────────────────────┘ +
-   ​После выполнения подпрограммы в ячейке с именем ​ VALTYP будет находить+
-ся код типа числа, находящегося в DAC. +
-</​code>​+
  
 {{anchor:​n1067}} {{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.1676726970.txt.gz · Последние изменения: 2023-02-18 16:29 — GreyWolf