Скачать 0.83 Mb.
|
Список областей завершается терминальной областью, начинающейся с адреса 77772. Это связано с тем, что подпрограмма выделения памяти фиксирует конец списка, как только адрес очередной области станет отрицательным. Если потребуется распределять память непосредственно из ПП, то это можно сделать, используя следующие вызовы: CALL @#176132 — Выделяет память: в R0 — нужное число байтов (если в R0 число меньше нуля, то выделяется максимальная свободная память). На выходе: R0 — объем свободной памяти в байтах (если он меньше запрашиваемого, то память не выделена, кроме случая выделения максимальной памяти), R1 — адрес начала области данных. CALL @#176300 — Освобождает память, выделенную ранее. Вход: в R0— число освобождаемых байтов, R1—адрес начала области данных, если R1 меньше нуля, то освобождается вся память (значения R0 и R1 должны совпадать с соответствующими значениями при выделении памяти, кроме случая очистки всей памяти). Выход: при ошибке устанавливается знаковый бит, при нормальном завершении знаковый бит очищен. Имеется также другой способ обращения к подпрограммам, использующим массив параметров (сюда относятся подпрограммы обслуживания дисковода, магнитофона, кассет ПЗУ, памяти ПП): в ОЗУ ЦП с некоторого адреса (можно и в SEL-ОЗУ) записывается необходимый массив параметров, затем его адрес в ОЗУ ЦП заносится по адресу 23200, после чего выполняется одно из следующих действий: INC @#7062 вызов непосредственно программы в ПЗУ CALL @#125030 или INC @#7062 вызов обработчика, используя диспетчер процессов TRAP 0 Код статуса завершения операции возвращается, как обычно, в первом байте массива параметров. Внимание! При использовании предыдущих вызовов содержимое регистров не сохраняется, также не рекомендуется использовать второй способ при вызовах подпрограмм из обработчиков прерываний или, если вызов нужно производить из подпрограммы, которая сама использует диспетчер процессов в своих нуждах. С. Клоков, Д. Ланин, г. Омск СуперБейсик для УКНЦ Факт двухпроцессорности УКНЦ ни для кого не секрет, но вот способы «сознательного» использования периферийного процессора (ПП) для большинства — тайна за семью печатями. Такова, увы, особенность документации к компьютеру. Впрочем, возможности ПП там (а также в журнале «Персональный компьютер УКНЦ» №1.94) описаны достаточно хорошо, но вот связь ПП и ЦП... Мы попытались упростить сложный механизм связи. Идея такова: создается программа-драйвер, которая помещается в ПП и обеспечивает достаточно простую связь. Эта программа присоединена к файлу с Бейсиком. При запуске Бейсика управление передается программе, а уже потом самому Бейсику. В результате ПП становится доступным средствами Бейсика. Полученную комбинацию мы назвали СуперБейсиком. Немного дополнительных сведений и примеров. Драйвер организует канал связи с адресами (восьмеричными) 450, 452, 454, 456, 176666. Ячейка 450 содержит 1, если ПП готов к приему следующей команды, и 0, если не готов. Ячейка 452 содержит код последней нажатой или отжатой клавиши в формате ПП (см. документацию к УКНЦ). Ячейки 454 и 456 содержат адрес и данные, 176666 и служат для передачи команд драйверу. Список команд таков: POKE &O176666,7 инициализация драйвера POKE &O454,адрес занесение слова в ОЗУ ПП по указанному адресу POKE &O456,данные POKE &O176666,1 POKE &O454,адрес чтение слова из ОЗУ ПП по указанному адресу в POKE &O176666,2 ячейку 456 Z=PEEK(&O456) POKE &O454,адрес запуск подпрограммы в машинных кодах с ука- POKE &O176666,3 занного адреса в ОЗУ ПП POKE &O454,длительность воспроизведение звука POKE &O456,частота POKE &O176666,4 POKE &O454,позиция печать символа с кодом ASCII до 255 в позиции от 0 до 39 в POKE &O456,код служебных строках (при строка=5 — в верхней, при POKE &O176666,строка строка=6 — в нижней) Перед подачей любой команды, кроме первой, необходимо проверять готовность. Драйвер занимает около 0,5 Кб памяти. С помощью СуперБейсика можно, не зная ассемблера, включать в программы звуковые эффекты, изменять начертание символов и т.п. В нашей школе №64 он быстро завоевал популярность и послужил инструментом для создания многих интересных программ. Автор предлагает обсудить некоторые особенности устройства Бейсик-интерпретатора УКНЦ, рассчитывая, что это будет полезно для читателей как с практической точки зрения (исправление ошибок), так и с точки зрения углубления своих знаний по теории хранения и преобразования информации в ЭВМ. Е.А. Еремин Об алгоритмах перевода целых чисел в некоторые системы счисления, реализованные в BASIC-интерпретаторе УКНЦ Как известно, при работе с компьютером используется несколько систем счисления: входные и выходные данные обычно представляются в привычной человеку десятичной форме, а при хранении в памяти ЭВМ применяется технически более удобный двоичный способ записи. Что бы ни говорили и ни писали о ненужности двоичной системы для рядового пользователя, а у него то и дело возникает необходимость представить, как выглядит число в двоичной или кратных ей более компактных восьмеричной или шестнадцатеричной системах. На мой взгляд, в обучении это еще более актуально, ибо объяснить те или иные принципы работы компьютера в десятичной системе иногда просто невозможно. (Кто не согласен, пусть задумается, для примера, над вопросом: почему за ячейкой памяти с адресом 32767 следует ячейка — 32768 и какой вообще смысл имеет отрицательный адрес ОЗУ?!) Признаем, что знание двоичной системы все же иногда полезно, и поговорим о переводе чисел из одной системы в другую. Для облегчения этой рутинной процедуры естественно обратиться за помощью к самому компьютеру. Идеальным инструментом для этой цели служит язык Бейсик, в котором предусмотрены данные во всех четырех упоминавшихся ранее формах и возможности их взаимного перевода. В данной заметке подробно рассмотрены алгоритмы перевода целых чисел в двоичную, восьмеричную и шестнадцатеричную форму, реализованные в сетевой вильнюсской версии Бейсика школьного компьютера УКНЦ. Причин такому выбору несколько. Во-первых, в трех этих однотипных алгоритмах автор Бейсик-интерпретатора (или его несколько авторов — фамилии почему-то до сих пор нигде не встречались) умудрился сделать две ошибки, в результате которых функция перевода в шестнадцатеричную форму HEX$() практически неработоспособна, а функция BIN$() «не может справиться» с большим аргументом. Во-вторых, задача вывода числа в каждой из обсуждаемых форм является классической задачей программирования, и почему бы учителю (да и его наиболее способным ученикам) не посмотреть, как она решается? В-третьих, несмотря на очевидные преимущества компьютера IBM, многим школам приходится пока работать именно на более дешевом отечественном УКНЦ... Итак, вспомнив народную мудрость «Не боги горшки обжигают», начнем обсуждение. Обратимся к распечатке небольшого участка Бейсика УКНЦ, «посвященного» функциям OCT$(), BIN$() и HEX$() для перевода целого 16-битного числа в восьмеричную, двоичную и шестнадцатеричную системы счисления. Отметим, что результатом всех трех функций является текстовая строка с соответствующим представлением исходного числа. Рассмотрение будем вести на примере наиболее сложной функции HEX$(); все остальные легко разобрать самостоятельно по аналогии. Обратимся к адресу 42232, где находится первая команда алгоритма: в регистр микропроцессора R5 заносится константа 4 — количество шестнадцатеричных цифр в представлении 16-битного числа (напомним, что каждая цифра объединяет по 4 бита). Далее следует вызов подпрограммы 43330, которая в строковом пространстве выделяет указанное в R5 количество байт для результата и в случае нехватки памяти прерывает дальнейшее выполнение программы сообщением об ошибке. Избавим читателя от не существенных для алгоритма перевода подробностей работы подпрограммы. Отметим только, что при успешном ее завершении в регистре R1 возвращается адрес первого свободного байта в строковой области ОЗУ, т.е. выделенный нам участок имеет меньшие адреса. После резервирования памяти командой 42242 из стека извлекается аргумент функции — число, которое следует переводить в HEX-представление. Значение R1 следующей командой запоминается в стек. И вот, наконец, начинается собственно процесс перевода. Команды 42246—42250 уменьшают на единицу R5 и в случае отрицательного результата осуществляют переход на ошибку. Несложные рассуждения показывают, что эта проверка излишняя, так как получить из 2-байтного R0 более 4 ненулевых шестнадцатеричных цифр в принципе невозможно. Следующий этап — выделение очередной (младшей) цифры в регистре R2 путем сброса старших 12 бит командой очистки битов BIC. Полученное таким способом число в интервале от 0 до 15 анализируется и преобразуется в символ с помощью команд 42260—42274: если значение превышает 9, то формируются латинские заглавные буквы А—F, в противном случае сложением с константой 60 в R2 получается цифра 0—9. Попутно заметим, что если в команде 42266 использовать для сложения не 67, а 7, то можно обойтись без перехода в 42272. После метки L2630 находится команда записи сформированного символа в строковую область, причем подчеркнем, что адрес в R1 предварительно уменьшается. При таком способе формирования итоговая строка формируется как бы «задом наперед» и старшая цифра в тексте получится первой, а младшая — последней. Команды 42302—42312 производят подготовку к выделению следующей цифры — выполняют сдвиг числа в R0 на 4 бита вправо. При этом младшие 4 уже использованных бита теряются, а старшие обнуляются. Обратите внимание на одну деталь: самый старший (знаковый) бит очищается особым образом, так как операция ASR сохраняет его значение. А теперь внимание! Если результат сдвигов ненулевой, т.е. еще остались невыведенные шестнадцатеричные цифры, по команде 42314 следует переход... на метку L2630. При таком алгоритме сформированная ранее самая младшая цифра снова заносится в итоговую строку и цикл повторяется, пока R0 не обратится в ноль. В результате ответ состоит полностью из одинаковых цифр, причем только последняя будет всегда правильной. Теперь понятно, почему так странно работает функция HEX$()? Для исправления ошибки достаточно изменить адрес перехода на 42246: тогда из R0 будет выделена новая цифра и процесс пойдет правильно. После выхода из цикла по R0=0 команда 42316 вычисляет фактическую длину результирующей текстовой строки (вспомним, что в «нижнем этаже» стека хранился адрес до начала перевода), а следующая команда заносит полученную длину в стек «этажом выше». Затем происходит переход на дальнейшую обработку результата. Совершенно аналогично, только еще проще, работают функции OCT$() и BIN$(): дело в том, что в двоичном и восьмеричном представлении нет никаких других символов, кроме цифр. Предлагаем читателю самостоятельно разобрать приведенный текст программы по аналогии. Обратим внимание на еще одну интересную деталь — на максимальное количество символов в текстовом результате. Для OCT$() их 6, что, конечно, правильно. Для BIN$() их затребовано 16 (см. команду 42160). Это было бы так, если бы 16 было десятичным числом. Но на самом деле значение констант в распечатке приведено в восьмеричной системе. Итак, резервируется место не под 16, а под 14 двоичных цифр! А что будет, если их получится больше? Проверили? Правильно, появилось сообщение «Кончилась память строк». Сработало ограничение в 42176, которое при отсутствии ошибки в программе интерпретатора сработать не могло. Так работают алгоритмы перевода целых чисел в различные системы счисления в Бейсике УКНЦ. В заключение приведем исправления, которые устраняют замеченные ошибки:
Примечание. Все значения в таблице даны в восьмеричной системе. (судя по всему – не хватает не менее 2-х первых строк (первой идет подпрограмма @OCT) и куска в конце ...) 216 jsr pc,43330 [выделить] MOV (SP),R0 ;42112 11600 аргумент в R0 MOV R1,-(SP) ;42114 10146 запомнить адрес L2622: DEC R5 ;42116 5305 уменьшить счетчик BMI L2621 ;42120 100525 переход по минусу на ошибку MOV R0,R2 ;42122 10002 L3247: BIC #L1564,R2 ;42124 42702,177770 очередная цифра АDD #L4,R2 ;42130 62702,60 MOVB R2,-(R1) ;42134 110241 запомнить символ CLC ;42136 241 подготовка ROR R0 ;42140 6000 к выделению ASR R0 ;42142 6200 следующей ASR R0 ;42144 6200 цифры ВNE L2622 ;42146 1363 если не 0 - продолжить SUB R1,(SP) ;42150 160116 вычислить длину MOV R1,L113(SP) ;42152 10166,2 и запомнить BR L2442 ;42156 511 br 42402 ;@BIN$ L2220: MOV #L403,R5 ;42160 12705,16 ??? 14 байт в рез. строке JSR PC,L2620 ;42164 4767,1140 jsr pc,43330 [выделить] MOV (SP),R0 ;42170 11600 аргумент в R0 MOV R1,-(SP) ;42172 10146 запомнить адрес L2623: DEC R5 ;42174 5305 уменьшить счетчик BMI L2621 ;42176 100476 по минусу на ошибку MOV R0,R2 ;42200 10002 BIC #L472,R2 ;42202 42702,177776 очередная цифра ADD #L4,R2 ;42206 62702,60 MOVB R2,-(R1) ;42212 110241 запомнить символ CLC ;42214 241 подготовка к выделению ROR R0 ;42216 6000 следующей цифры BNE L2623 ;42220 1365 если не 0 - продолжить SUB R1,(SP) ;42222 160116 вычислить длину MOV R1,L113(SP) ;42224 10166,2 и запомнить BR L2442 ;42230 464 br 42402 ;@HEX MOV #L114,R5 ;42232 12705,4 4 байта в рез. строке JSR PC,L2620 ;42236 4767,1066 jsr pc,43330 [выделить] MOV (SP),R0 ;42242 11600 аргумент в R0 MOV R1,-(SP) ;42244 10146 запомнить адрес DEC R5 ;42246 5305 уменьшить счетчик BMI L2621 ;42250 100451 переход по минусу на ошибку MOV R0,R2 ;42252 10002 BIC #L2624,R2 ;42254 42702,177760 очередная цифра CMP R2,#L2625 ;42260 20227,11 сравнить с 9 BLE L2626 ;42264 3403 меньше 9 - цифра ADD #L2627,R2 ;42266 62702,67 +67 (A-F) BR L2630 ;42272 402 L2626: ADD #L4,R2 ;42274 62702,60 +60 (0-9) L2630: MOVB R2,-(R1) ;42300 110241 запомнить символ CLC ;42302 241 подготовка ROR R0 ;42304 6000 к выделению ASR R0 ;42306 6200 ASR R0 ;42310 6200 следующей цифры ASR R0 ;42312 6200 BNE L2630 ;42314 1371 ??? нужен переход на 42246 SUB R1,(SP) ;42316 160116 вычислить длину MOV R1,L113(SP) ;42320 10166,2 и запомнить BR L2442 ;42324 426 br 42402 MOV R1,L113(SP) ;42320 10166,2 и запомнить BR L2442 ;42324 426 br 42402 1 В данной статье, публикация которой начата в предыдущем номере журнала, сохранена сквозная нумерация таблиц и рисунков. — Прим. ред. |
Ru Персональный компьютер, или "Азбука pc" для начинающих http Олимпиады и контрольно-измерительные материалы по информатике и ит олимпиадная информатика |
Инструкция по самостоятельной установке почтового сертификата на... Если срок действия Вашего почтового сертификата подходит к концу, необходимо выполнить следующие действия для его перевыпуска |
||
Инструкция по самостоятельной установке почтового сертификата на... Когда срок действия Вашего почтового сертификата подходит к концу, необходимо выполнить следующие действия для его перевыпуска |
Требования к продукции Персональный компьютер Lenovo ThinkCentre Tiny M700 I5 6400T 4Gb 500gb 7200 Intel hd nodvd wi-Fi usb kb&Mouse dos (10HY003tru) или... |
||
Назначение Контроллер srtr d предназначен для использования в составе терминала платежных или иных систем имеющих в своем составе персональный... |
Руководство обучающегося в системе дистанционного обучения персональный... Руководство предназначено для обучающихся в системе дистанционного обучения «Персональный учитель 0», работающих с программой доступа... |
||
«Радиационный фон и методы его измерения» Оборудование: компьютер, интерактивная доска, проектор, типовой персональный дозиметр, презентации, раздаточный материал (Основные... |
Книга raznprogram xls Для работы с ней надо иметь персональный компьютер типа не ниже Pentium II с операционной системой не ниже Windows 98, оснащенный... |
||
Руководство и персональный состав педагогических работников Уровень образования (впо, спо, среднее общее образование), наименование оо, квалификация по диплому, год окончания) |
Цели урока Марс на базе Нато произошла авария, из-за которой был поврежден компьютер-помощник. Путешественник «А» связывается с командным центром... |
||
Методическое пособие содержит дидактические и методические материалы... «Партнерство в образовании» и Windows Server 2003, организации и работы в коллективе службы технической поддержки. Этот курс по настройке... |
Инструкция по охране труда для работников ниу вшэ санкт-Петербург... Работник ниу вшэ – Санкт – Петербург (далее по тексту Филиал) допускается к самостоятельной работе на персональных электронно вычислительных... |
||
Компьютер и дети. Компьютер друг или враг? Показать возможность использования компьютера в учебной деятельности и в домашних условиях |
Предметный указатель к тому 1, 1995 содержание тома 1, 1995 Разработка прогрессивных технологических процессов и оборудования перенастраиваемых многоассортиментных производств синтетических... |
||
Карманный персональный компьютер (кпк) Программа Outlook 2002 может содержаться на компакт-диске с ActiveSync. Если у вас нет программы Outlook, установите программу Microsoft... |
Папка учителя по самообразованию Образование (название учебного заведения и год окончания) высшее, Аркалыкский педагогический институт Им. И. Алтынсарина, 1995 г |
Поиск |