[an error occurred while processing this directive]
.ов .сс 2.3.3. Для описания массивов и работы со строковыми переменными или константами предназначены следующие команды: DIM A(X,Y,Z) - описание массива (описан трехмерный массив А с диапазоном индексов 0-X, 0-Y, 0-Z, занята память под (X+1)*(Y+1)*(Z+1) вещественных элементов). Количество размерностей ограничивается только общим объемом памяти; LEN?(A¤) - значение, число символов в строке-аргументе; STR¤(X) - значение, строка, содержащая текстовое представление целого или вещественного аргумента; VAL (A¤) - значение, вещественное, текстовое представление которого расположено в начале аргумента (до первого не числового символа); CHR¤(X) - значение, символ, код которого равен Х; ASC (A¤) - код первого символа строки-аргумента; .сс В версии "Бейсик-Агат" содержимым строчной переменной могут быть как русские (большие и малые) так и латинские (большие и малые) буквы. Коды букв приведены в Таблице 3. В версии APPLESOFT содержимым строчной переменной могут быть только малые латинские буквы. Таблица 3. .ми0 .ао0 ------------------------------------------------------ !лат.! код! лат.! код !рус.! код ! рус.! код !Зна-! код ! !мал.! ! бол.! !мал.! ! бол.! !ки ! ! !------------------------------------------------------- ! ! ! ! ! ю ! 96 ! Ю ! 224 ! ! 160 ! ! a ! 65 ! A ! 193 ! а ! 97 ! А ! 225 ! ! ! 161 ! ! b ! 66 ! B ! 194 ! б ! 98 ! Б ! 226 ! " ! 162 ! ! c ! 67 ! C ! 195 ! ц ! 99 ! Ц ! 227 ! # ! 163 ! ! d ! 68 ! D ! 196 ! д ! 100 ! Д ! 228 ! ¤ ! 164 ! ! e ! 69 ! E ! 197 ! е ! 101 ! Е ! 229 ! % ! 165 ! ! f ! 70 ! F ! 198 ! ф ! 102 ! Ф ! 230 ! & ! 166 ! ! g ! 71 ! G ! 199 ! г ! 103 ! Г ! 231 ! ' ! 167 ! ! h ! 72 ! H ! 200 ! х ! 104 ! Х ! 232 ! ( ! 168 ! ! i ! 73 ! I ! 201 ! и ! 105 ! И ! 233 ! ) ! 169 ! ! j ! 74 ! J ! 202 ! й ! 106 ! Й ! 234 ! * ! 170 ! ! k ! 75 ! K ! 203 ! к ! 107 ! К ! 235 ! + ! 171 ! ! l ! 76 ! L ! 204 ! л ! 108 ! Л ! 236 ! , ! 172 ! ! m ! 77 ! M ! 205 ! м ! 109 ! М ! 237 ! - ! 173 ! ! n ! 78 ! N ! 206 ! н ! 110 ! Н ! 238 ! . ! 174 ! ! o ! 79 ! O ! 207 ! о ! 111 ! О ! 239 ! / ! 175 ! ! p ! 80 ! P ! 208 ! п ! 112 ! П ! 240 ! 0 ! 176 ! ! q ! 81 ! Q ! 209 ! я ! 113 ! Я ! 241 ! 1 ! 177 ! ! r ! 82 ! R ! 210 ! р ! 114 ! Р ! 242 ! 2 ! 178 ! ! s ! 83 ! S ! 211 ! с ! 115 ! С ! 243 ! 3 ! 179 ! ! t ! 84 ! T ! 212 ! т ! 116 ! Т ! 244 ! 4 ! 180 ! ! u ! 85 ! U ! 213 ! у ! 117 ! У ! 245 ! 5 ! 181 ! ! v ! 86 ! V ! 214 ! ж ! 118 ! Ж ! 246 ! 6 ! 182 ! ! w ! 87 ! W ! 215 ! в ! 119 ! В ! 247 ! 7 ! 183 ! ! x ! 88 ! X ! 216 ! ь ! 120 ! Ь ! 248 ! 8 ! 184 ! ! y ! 89 ! Y ! 217 ! ы ! 121 ! Ы ! 249 ! 9 ! 185 ! ! z ! 90 ! Z ! 218 ! з ! 122 ! З ! 250 ! : ! 186 ! ! ! ! ! ! ш ! 123 ! Ш ! 251 ! ; ! 187 ! ! ! ! ! ! э ! 124 ! Э ! 252 ! < ! 188 ! ! ! ! ! ! щ ! 125 ! Щ ! 253 ! = ! 189 ! ! ! ! ! ! ч ! 126 ! Ч ! 254 ! > ! 190 ! ! ! ! ! ! ъ ! 127 ! Ъ ! 255 ! ? ! 191 ! --------------------------------------------------------- .нф LEFT¤(A¤,X) - строка из первых Х символов аргумента; RIGHT¤(A¤,X) - строка из последних Х символов аргумента; MID¤(A¤,X,Y) - строка из Y символов А¤, начиная с Х-го. В качестве примера приведена небольшая программа, с помощью которой можно сортировать массив слов по первому символу латинского алфавита: 100 FOR I=2 TO N 150 FOR J=I-1 TO 1 STEP -1 180 IF ASC (LEFT¤(M¤(I),1))<ASC (LEFT¤(M¤(J),1)) THEN A¤=M¤(I): M¤(I)=M¤(J): M¤(J)=A¤ 300 NEXT 330 NEXT Здесь М¤ - имя сортируемого массива. Далее приводятся примеры работы со строками. В¤ = "АГАТ" : А¤ = "БЕЙСИК" : А¤ = А¤+"-"+В¤ После выполнения этих действий строковой переменной А¤ принадлежит строка "БЕЙСИК-АГАТ". Если набрать директиву PRINT RIGHT¤(A¤,4) то на экране ВКУ будет напечатано: АГАТ. Директива PRINT MID¤(A¤,6,3) приведет к тому, что на экране ВКУ будет напечатано: К-А. Директива А=LEN(A¤) вызовет присвоение переменной А значения 11. Следующая программа напечатает на экране ВКУ латинский алфавит: 10 FOR I=1 TO 26 20 PRINT I;".";CHR¤(I+¤40) 30 NEXT При работе с массивами необходимо помнить о том, что не объявленные в операторе DIM массивы автоматически получают размерность всех индексов от 0 до 10. Объявление в операторе DIM массива должно предшествовать его использованию в программе. Идентификация идентификаторов осуществляется так, что переменные А, А%, А¤, А%(I), А¤(J) являются различными, а появление в одной программе массивов А(1,2) и А(3,4,5) ведет к ошибке и останову интерпретации. 2.3.4. Ввод/вывод данных осуществляется с помощью следующих команд: INPUT I%,X,A¤ - ввод целого, вещественного и строкового значений с клавиатуры или заменяющего ее устройства. Перед вводом каждого элемента выдается "?" (перед каждым вторым, третьим и т.д. - "??"). Вводимое значение отображается на экране, действуют стандартные средства редакции в строке. Данные на вводе записываются по правилам для констант, строки можно вводить без кавычек, но тогда они не должны содержать запятых, которые используются в качестве разделителей единиц данных на вводе; INPUT "НАЧИНАЙТЕ ВВОД";А - строковая константа заменяет первый "?" при вводе; GET A¤ - ввод одного символа с клавиатуры. Все символы равноправны. На экране введенный символ не отображается; READ X - присваивает Х значение очередного элемента списка данных, определенного оператором DATA; DATA 1,¤FF69,РАЗНЫЕ,ЗНАЧЕНИЯ,"ОДНО,ЗНАЧЕНИЕ" - список данных для операторов READ. В примере записано два целых и три строковых значения - правила употребления запятых в строках такие же, как на вводе; RESTORE - устанавливает в начальное положение указатель списка данных. Следующим READ будет прочитан первый элемент первого по тексту программы (но не по порядку исполнения операторов DATA) списка; PRINT A¤;I%;X - вывод на экран или заменяющее его устройство значений элементов списка. Разделитель ";" задает печать вплотную за предыдущим элементом. Разделитель "," - в очередную треть экрана. Наличие ";" в конце списка PRINT задает для следующего PRINT печать в ту же строку, иначе каждый следующий оператор осуществляет вывод с новой строки. При наборе программы "?" тождественен слову PRINT. 2.3.5. Ниже приведены команды передачи управления: GOTO 360 - переход на строку 360; GOSUB 1100 - переход на строку 1100 с запоминанием адреса возврата; RETURN - возврат к оператору, следующему за последним по выполнению GOSUB; POP - удаление последнего адреса возврата из списка; ON X GOTO 100,200,300,400 - переключатель-переход на строку с Х-м номером из списка; ON X GOSUB ... - переключатель-вызов, вызывает Х-ю из перечисленных подпрограмм; DEF FN SEC(X)=1/SIN(X) - определяет функцию SEC, теперь можно пользоваться Y=1-FNSEC(.1*A) . Количество аргументов при описании функций не более 1; IF X=1 THEN PRINT Y - последовательность операторов после THEN и до конца строки выполняется только при истинности логического выражения IF , иначе выполнение продолжается со следующей строки; FOR I=1 TO 15 STEP 4: NEXT - цикл, выполняет операторы между оператором FOR и соответствующим ему NEXT с I=1, затем с I=5, I=9 и т.д., пока не будет I>15 , тогда выполняются операторы, следующие за NEXT. Если STEP опустить, будет использован шаг 1; хотя бы одно выполнение операторов цикла происходит всегда; NEXT - конец цикла, после выхода из цикла его переменная получает первое из значений, не удовлетворяющее условию; ONERR GOTO 1500 - подключение программы обработки ошибок, диагностируемых интерпретатором и ДОС. Начальный номер строки обработчика 1500. На экран диагностика не выдается; RESUME - используется в программе обработки ошибок. Выполняет возврат на оператор, при выполнении которого обнаружена ошибка. Если никаких мер не принято, ошибка повторится. Перед выполнением 'RESUME' следует устранить причину ошибки, например взять с обатным знаком операнд квадратного корня, устранить ошибочное обращение к диску заменой CHR¤(4) (признака обращения к DOS) на некоторый нейтральный код. 2.3.6. Следующие команды предназначены для работы в графических режимах и ввода данных от игровых пультов: MGR=N - включение графики среднего разрешения. N - номер страницы размером 8К байт, при этом 1<=N<=3; HGR=N - включение графики высокого разрешения. Параметры такие же, как у оператора MGR. Команды включения графических режимов очищают включенную экранную страницу памяти; COLOR=X - устанавливает цвет для последующих графических операторов (0<=X<=7). Кодировка цветов в зависимости от значения Х приведена ниже: 1 - красный; 2 - салатовый; 3 - желтый; 4 - синий; 5 - сиреневый; 6 - голубой ; 7 - белый. PLOT X,Y - помещает точку текущего цвета в Х-ю позицию Y-й строки экрана; PLOT X0,Y0 TO X1,Y1 - рисует прямую линию текущего цвета из точки X0,Y0 в точку X1,Y1. Если координаты начальной точки не указаны, используется конечная точка последнего по выполнению оператора PLOT; SCRN (X,Y) - значение, номер цвета точки X,Y; DRAW I AT X,Y - воспроизводит I-й образ (кодировка образов описана в документе Фг.00012-02 33 01) в точке X,Y текущим цветом; XDRAW I AT X,Y - воспроизводит I-й образ, но цветом, дополнительным к цвету экрана; SCALE=X - устанавливает масштаб воспроизведения образов (1-255); ROT=X - устанавливает угол поворота образов по часовой стрелке. Для SCALE=1 дискрет 90 градусов или 16 единиц ROT , для SCALE=2 - 45 или 8 единиц ROT и т.д. Диапазоны допустимых значений координат для MGR от 0 до 127, для HGR от 0 до 255; TEXT=N - устанавливает текстовый режим, N - номер страницы 2<=N<=63, страницы от 2 до 31 - цветные 32х32 символа, от 32 до 63 - черно-белые 32х64 символа; RIBBON=X - устанавливает цвет символов в текстовом режиме (0<=Х<=7); в версии ARRLESOFT директива HGR2 устанавливает графический режим с разрешением 280*192 точки, а директива HGR- смешанный текст-графический режим. В этой версии существуют директивA HPLOT X,Y, рисующая точку заданного цвета в позиции с координатами X и Y и директова HPLOT X,Y TO X1,Y1, соединяющая две точки экрана. Существует так же директива HCOLOR= I (1<=I<=6), устанавливающая цвет для последующих графических операторов. PDL(X) - значение, установленное ручкой Х-го игрового датчика (X = 0 или 1). 2.3.7. В языке "Бейсик" ПЭВМ "АГАТ" исполнения 9 и языке "APPLESOFT" реализованы следующие элементарные математические функции: SIN(X) - значение синуса (X рад); COS(X) - значение косинуса (X рад); TAN(X) - значение тангенса (X рад); ATN(X) - значение арктангенса Х; INT(X) - значение целой части Х; RND(X) - псевдослучайное значение в интервале 0,1. При X>0 элемент случайной последовательности. При X<0 запуск псевдослучайной последовательности (своей для каждого X). При Х=0 - повторение последнего результата; SGN(X) - 1 при Х>0, 0 при Х=0, минус 1 при Х<0; ABS(X) - модуль Х; SQR(X) - положительный квадратный корень X; EXP(X) - экспонента X; LOG(X) - натуральный логарифм Х. 2.4. Средства программирования на языке ассемблера В яэыке "APPLESOFT" средства программирования на языке ассемблера не предусмотрены. 2.4.1. Для управления ассемблированием в языке "Бейсик" для ПЭВМ "Агат" исполнения 9 используются следующие команды: *{СМЕЩЕНИЕ,} АДРЕС: - используется для входа в режим ассемблирования. Задает адреса формируемого объектного кода при ассемблировании и исполнении (если предполагается исполнять программу не на тех адресах, на которые она записывается при ассемблировании). В случае совпадения адреса и смещения смещение указывать не обязательно. АДРЕС - выражение, задающее начальный адрес записи формируемого кода при ассемблировании. СМЕЩЕНИЕ - выражение, задающее начальное значение адреса, используемого для ссылок на формируемый код (адрес программы при исполнении). Например, в результате выполнения *¤1234,¤3100:!МЕТКА:=МЕТКА!: по адресу ¤3100 будет записано слово ¤3412. Указание адреса должно обязательно предшествовать исполнению первой команды ассемблирования. Указание адреса между командами ассемблирования изменяет параметры последующей загрузки кода, сохраняя возможность перекрестных ссылок по меткам; ! - сигнал входа в ассемблер и разделитель команд ассемблирования внутри строки; должен предшествовать каждой команде ассемблера; !: - пустая команда ассемблера, служит сигналом перехода на второй проход или конца ассемблирования. Ассемблирование проводится в два прохода. На первом проходе определяются форматы операндов и значения меток, форматы команд записываются на место объектного кода. Просмотр текста происходит в порядке исполнения строк программы на языке "Бейсик", содержащих команды ассемблера. При исполнении на первом проходе оператора "!:", который служит сигналом на второй проход, управление передается на первый встреченный, после входа в режим ассемблирования, оператор "!". Программа должна обеспечивать второе исполнение операторов ассемблирования в том же порядке, что и на первом проходе (при этом все операторы "Бейсика" во время второго прохода выполняются еще раз). На втором проходе формируется объектный код, значения меток сохраняются и могут быть в дальнейшем использованы в качестве операндов CALL, &, USR, а также отладочными директивами (см. далее). При исполнении "!:" на втором проходе ассемблирование завершается. Для следующего входа в ассемблер снова требуется указать адреса формируемого кода. Команды ассемблера могут быть помечены. Метками служат целые и вещественные переменные языка "Бейсик", например: 5 КОН = ¤FDDF:*¤6000: 10 ! MI:!M2%:LDA ¤AA55!STA ¤666 20 !JSR КОН!RTS 30 !: Команды ассемблера подразделяются на программные команды и константы. 2.4.2. Ниже перечислены команды ассемблера, предназначенные для формирования констант: 1) ! <выражение> - загружает 5 байт вещественным значением выражения, вычисленным на втором проходе, в представлении интерпретатора; 2) < <выражение> - загружается старший байт целого значения, определяемого выражением; 3) > <выражение> - загружается младший байт значения; 4) = <выражение> - загружается 2 байта целого значения выражения в порядке "младший,старший", то есть в формате адреса; 5) <выражение> - то же, что и = , но в порядке "старший,младший", то есть в формате целого значения интерпретатора; 6) ¤{XX} - ( четное число шестнадцатеричных цифр ) шестнадцатеричная загрузка зоны; 7) "строка длиной N" - загружает N байт кодами КОИ-7 символов строки ( при этом старший разряд "0" ); 8) # <выражение> - увеличивает значение счетчиков адреса и смещения на значение выражения (генерация свободной зоны). Пример использования констант в языке ассемблера: 5 M1=¤100:LNGHT=15: M2%=M1-LNGHT:X=1.57 10 *¤3000:!SIN(X)+COS(X)!=M1*12 20 !>M1+16*LNGHT+M2%+100 30 !¤AAB6F7FD0001 40 ! M1+256+80 50 !=¤FDF4 !¤B1 60 !"ТАБЛИЦА"!К:: После RUN сформируется код 3000 - 81 00 1A 15 68 00 0C 45 3008 - AA B6 F7 FD 00 01 02 50 3010 - F4 FD B1 74 61 62 6C 69 3018 - 63 61 где 3000-3004 - представление вещественного 1.00079601 3005-3006 - адрес ¤C00 (12*256) 3007 - младший байт значения ¤100+¤F0+¤64+¤F1 3008-300D - последовательность байт 300E-300F - целое представление ¤250 3010-3011 - адрес ¤FDF4 3012 - байт ¤B1 3012-3019 - текст "ТАБЛИЦА" Переменная К получит значение ¤301A. 2.4.3. В данном пункте изложены правила написания и использования программных команд ассемблера. Первое поле программной команды - мнемокод операции, затем может следовать операнд. В качестве содержимого операнда могут использоваться константы типа 2), 3), 4), а в непосредственных операндах и типа 7) длиной в 1 символ. При использовании в качестве операндов констант типа 2), 3) - формат адресации однобайтный; типа 4) - двубайтный. В случае отсутствия перед операндом знаков "<", ">", "=" формат адресации определяется следующим образом. Если в выражении имеется идентификатор, значение которого не определено на первом проходе к данному моменту, то формат адресации двухбайтный, в противном случае он определяется значением выражения. Если значение выражения меньше 256, то формат адресации однобайтный. Если значение выражения больше 256, то формат адресации двухбайтный. Предусмотрены дополнительные возможности введения комментариев в любой команде от символа ";" до конца команды ("!" или конец строки). Пример использования программных команд: 5 GOTO 65 10 REM МАКРООПРЕДЕЛЕНИЕ 20 !PLA!STA¤0!PLA!STA¤1 30 RETURN 40 REM МАКРООПРЕДЕЛЕНИЕ ДЛЯ ВОЗВРАТА 50 !LDA¤1!PHA!LDA¤0!PHA!RTS 60 RETURN 65 *4096 : ! BEGIN: NOP ; ТРЕБУЕТСЯ ДЛЯ ПРАВИЛЬНОГО НАЧАЛА ВТОРОГО ПРОХОДА 70 REM ПОДПРОГРАММА ПЕЧАТИ И ВЫБРАСЫВАНИЯ 3 БАЙТ ИЗ СТЕКА 80 GOSUB 10 90 FOR I=1 TO 3 100 !PLA!JSR¤FDE1; ПОДПРОГРАММА COUT СИСТЕМНОГО МОНИТОРА 110 NEXT 120 GOSUB 40 130 MJ=0:REM ИСПОЛЬЗОВАНИЕ МАКРОСА С МЕТКАМИ 140 SR=5000: DS=8000: LN=33:REM ИСТОЧНИК,ПОЛУЧАТЕЛЬ ДЛИНЫ ПЕРЕПИСИ 150 GOSUB 1000 160 SR=5100: DS=7000: LN=99: GOSUB 1000 170 !:END 1000 MJ=MJ+1:REM НАЧАЛО МАКРООПРЕДЕЛЕНИЯ ПЕРЕПИСИ 1010 !LDX# ¤0! L(MJ):LDA=SR.X; ПРИ КАЖДОМ НОВОМ МАКРОВЫЗОВЕ МЕТКОЙ БУДЕТ ОЧЕРЕДНОЙ ЭЛЕМЕНТ МАССИВА 1020 !STA DS,X!INX!CPX # LN 1030 !BNE L(MJ) ; ПЕРЕХОД ВНУТРИ МАКРООПРЕДЕЛЕНИЯ 1040 RETURN 2.4.4. Интерпретатор языка "Бейсик" предоставляет пользователю следующие средства отладки: * <выражение> - осмотр содержимого ячейки памяти по заданному адресу; Например, *¤3000 3000 - 4В *<выражение 1> . <выражение 2> - осмотр интервала памяти по заданнным начальному и конечному адресам; Например, после директивы *¤B1.¤C8 на экране появится следующая информация: 00B1- E6 B8 D0 02 E6 B9 AD 00B8- 05 02 C9 3A B0 0A C9 20 00C0- F0 EF 38 E9 30 38 E9 D0 00C8- 60 *<выражение 1>#<выражение 2> . <выражение 3> М - передвижение интервала памяти; *<выражение 1>#<выражение 2>.<выражение 3>V - сравнение двух интервалов памяти; * [<выражение>] L - вывод текста программы в мнемокоде системы команд, с заданного адреса или, если адрес не указан, продолжение листинга. Выводится 28 строк текста программы; *<выражение 1>.<выражение 2>Т - вывод текста в кодировке КОИ-7 в заданном интервале; *<выражение>G - выполнение программы в кодах системы команд с заданного адреса; *<выражение 1>.<выражение 2>S - выполнение программы в кодах системы команд с адреса, определяемого выражением 1, до прерывания, осуществляемого по адресу, определяемому выражением 2. Если выражение 1 отсутствует, то начальным адресом считается адрес последнего прерывания. При пользовании директивой S следует учитывать: 1) исходное включение памяти для отлаживаемой программы отличается от используемого интерпретатором. Состояние эмулятора ПЗУ на момент запуска/останова отлаживаемой программы хранится в ячейке ¤е9, состояние дополнительного ОЗУ - в ячейке ¤Е8: иногда необходимо задать их перед запуском программы. Переключения банков памяти, выполняемые отлаживаемой программой, запоминаются (содержимые РСС в ячейках ¤Е8-Е9 интерпретатора) и повторяются при последующих исполнениях "S"; 2) содержимое ячеек ¤0 - ¤FFF отлаживаемой программы хранится в адресах ¤8000-8FFF банка 9 и не портится при работе интерпретатора; 3) содержимое регистров отлаживаемой программы запоминается в ячейках ¤45-¤49 интерпретатора, адрес точки останова - в 0-1. Осмотр и изменение регистров следует проводить директивой УПР-Е системного монитора; 4) содержимое текстового экрана отлаживаемой программы хранится в ячейках ¤9000-¤97FF банка С и не показано на экране в диалоге интерпретатора. Для его просмотра рекомендуется переписать эту зону в текущий экран. Предусмотрено использование "S" для отладки программ, размещаемых на адресах ПЗУ, следует только следить за сохранностью интерпретатора, размещенного в массиве 0 модуля-эмулятора ПЗУ. Команды осмотра содержимого памяти отладчика и команды загрузки в память системного монитора работают с учетом содержимого ячеек ¤E8 и ¤E9. Ассемблерные команды и директивы ДОС загружают код независимо от содержимого этих ячеек. *<выражение 1>.<выражение 2>W - запись интервала памяти на магнитную ленту (МЛ); *<выражение 1>.<выражение 2>R - считывание интервала памяти с МЛ. -7 в заданном интервале; *<выражение>G - выполнение программы в кодах системы команд с заданного адреса; *<выражение 1>.<выражение 2>S - выполнение программы в кодах системы команд с адреса, определяемого выражением 1, до[an error occurred while processing this directive]