Знакомство с ЭКВМ - программа перевода температуры |
Главная / ЭКВМ / Начинающим |
Усовершенствуем предыдущую программу перевода температуры. Заметим, что все числа в таблице получены из четырёх основных: Построим программу таким образом, что она будет самостоятельно рассчитывать требуемые коэффициенты. Для выбора нужного типа преобразования пользователь должен будет предварительно ввести определённый код. Ниже приведён текст программы. Для экономии места, он записан не в столбик, а в виде таблицы. Программу из таблицы следует вводить построчно слева-направо, ориентируясь на значения адреса. Ввод программы следует начать с нулевого адреса в режиме программирования, для этого в режиме автоматической работы нажмите клавиши: "В/О", "F ПРГ". Для ввода последовательностей шестнадцатеричных чисел по адресам 75-99 и 195-207 используется особый режим программирования. Для начала ввода шестнадцатеричных чисел при вводе программы следует нажать "Р ПРГ". Для прекращения - "F ПРГ". В программе шестнадцатеричные числа, вводимые в режиме "Р ПРГ" оканчиваются символом 'h'. При вводе шестнадцатеричных чисел в строке ввода выводится надпись "HEX".
Подготовительные операции после ввода текста программы не требуются. Для работы с программой введите двузначный числовой код от 11 до 55, первая цифра которого обозначает из какой шкалы выполняется перевод, а вторая - в какую шкалу. Порядок соответствует приведённому в таблице ниже: 1 - Цельсия; 2 - Фаренгейта; 3 - Кельвина; 4 - Ренкина; 5 - Реомюра. После ввода кода нажмите клавиши "В/О", "С/П". Если введенный код не корректен, в строку комментария выводится сообщение "Ошибка кода". Иначе все регистры стека обнуляются, и программа ожидает ввод значения. Введите значение температуры в исходной шкале и нажмите "С/П". На индикатор в регистр X будет выведено значение после преобразования. Программа ожидает ввод следующего значения температуры. Для изменения шкалы введите соответствующий код и нажмите клавиши "В/О", "С/П". В качестве тестового примера можно использовать данные таблицы.
В приведённой выше программе использованы некоторые специальные приёмы оптимизации. Если этот пример покажется сложным, не вдавайтесь в подробности. Рассмотрим текст программы. Адрес 0000. В регистре памяти с номером 0 сохраняется введённый код. В дальнейшем для краткости регистры обозначаются через R, например R0. Нулевой адрес - это место входа в программу по нажатию "В/О", "С/П". В адресах 0001-0021 в R1...R5 вводятся значения коэффициентов. ЭКВМ имеет достаточный объем памяти, поэтому в программах для неё можно использовать такой способ. Он позволяет избежать ручного ввода коэффициентов в регистры перед запуском программы. Коэффициент в R5 - обратная величина от R1. Это используется для сокращения объема подпрограмм в адресах 0100-0194. В адресах 0022-0036 происходит преобразование введённого кода из чисел от 11 до 55 в последовательные числа от 0 до 24. Формула преобразования: 50*{(К-11)/10} + [(K-11)/10], где K - исходный код. Cкобками [ ] обозначена операция выделения целой части числа, а {} - дробная. Команды "K [x]" и "K {x}" выполняют эти же операции с содержимым регистра X. В адресах 0037-0043 происходит проверка корректности кода. Если полученное значение преобразованного кода выходит за границы от 0 до 24 - происходит переход на адрес 65 для вывода сообщения об ошибке. Корректность исходного кода при этом не проверяется. Например, введённый код "61" будет признан корректным и вызовет такой же эффект, как и "12". Но значения преобразованного кода, выходящие за границы диапазона от 0 до 24, приведут к фатальной ошибке при выполнении программы, поэтому они и проверяются. Для проверки используются команды условного перехода "F x≥0 NN" и "F x<0 NN". Если условие, указанное в команде, не выполняется, то происходит переход на адрес NN (в пределах текущей сотни команд, см. ниже). Иначе выполнение программы продолжается с команды, следующей за командой условного перехода. В адресах 0044-0053 происходит обращение к одной из подпрограмм формирования коэффициентов и запись выбранных коэффициентов в R1 и R2. Подпрограмма - это часть программы, после выполнения которой происходит автоматический возврат к основной программе. После выхода из подпрограммы выполняется команда основной программы, следующая за командой обращения к подпрограмме. Рассмотрим механизм формирования адреса подпрограммы. Последовательность команд "ИП 0"; "7"; "5"; "+" суммирует преобразованный код с числом 75. В результате получаются значения от 75 до 99. По адресам 0075-0099 в памяти расположены шестнадцатеричные числа, каждое из которых является адресом нужной подпрограммы. Адрес подпрограммы извлекается из памяти командой "К ИПРГ". Эта команда возвращает в регистр X число от 0 до 255, значение которого равно содержимому ячейки памяти программ с адресом, который был записан в регистр X до выполнения команды. Например, если преобразованный код равен нулю, то в регистре X будет число 75. По этому адресу в программе записано шестнадцатеричное число 64h, то есть десятичное 100. Именно это число будет в регистре X после выполнения команды "К ИПРГ". Это число командой по адресу 0049 заносится в R7. Следующая команда, "К ПП 7", обращается к подпрограмме, адрес которой находится в регистре, номер которого указан в команде. Если в R7 было записано число 100, то будет выполнено обращение к подпрограмме, которая начинается по адресу 0100. Такое обращение называется косвенным, а сама эта команда - косвенным переходом к подпрограмме. Подпрограмма возвращает в регистре стека Y первый коэффициент и в регистре X - второй. Команды по адресам 0051-0053 записывают эти коэффициенты в R1 и R2. В адресах 0054-0057 происходит очистка стека перед остановом. Выполнение очистки не требуется, но это придаёт программе более аккуратный вид. Если очистку не делать, на экран после останова будут выведены результаты промежуточных вычислений, бесполезные для пользователя. В адресах 0058-0064 выполняется перевод значений из одной шкалы в другую. Коэффициенты находятся в регистрах R1 и R2. Эта часть программы такая же, как в предыдущей программе. Команда "С/П" по адресу 0058 выполняет останов программы и вывод на индикатор содержимого стека. Если при последующем запуске программы не нажимать клавишу "В/О" для перехода к нулевому адресу, то после вычисления температуры программа снова перейдёт к адресу 0058 командой безусловного перехода. В адресах 0065-0074 происходит вывод на экран сообщения об ошибке. Для этого используется одна из функций ЭКВМ. Число 195 является адресом начала сообщения об ошибке. Командой "РР П 9026" число 195 записывается в регистр памяти с соответствующим номером. Регистру памяти 9026 соответствует функция вывода сообщения в строку комментария из памяти программ. Строка выводится на экран после останова программы или при выполнении команды "К ЭКР" без останова. Использование этих регистров аналогично обращениям к функциям DOS и BIOS в персональных компьютерах. Команда "РР П MMMM" позволяет записать число в регистры памяти с номерами от 0 до 9999. В частности, команда "РР П 0000" с расширенной адресацией аналогична команде "П 0" с регистровой адресацией, но занимает три байта вместо одного. Для чтения из памяти используется команда "РР ИП ММММ". Есть также отдельные двухбайтовые команды "Р П ММ" и "Р ИП ММ" для работы с регистрами от 0 до 99. В адресах 0075-0099 расположена таблица адресов подпрограмм вычисления коэффициентов. Поскольку подпрограммы расположены в адресах 0100-0194, то адрес умещается в один байт и занимает одну ячейку памяти. В адресах 0100-0194 расположены сами подпрограммы. Каждая из них начинается с адреса, указанного в таблице 0075-0099. Для экономии места некоторые подпрограммы используют общие команды. В этом случае из одной подпрограммы происходит безусловный переход в другую на одинаковое окончание. Например, подпрограмма, начало которой расположено по адресу 0100 переходит к адресу 0117, в средину подпрограммы, которая начинающется с адреса 0116. При безусловном переходе использовано свойство команды "БП NN" и других подобных команд, которые имеют однобайтовый адрес перехода. Эти команды обращаются к адресам, расположенным на текущей странице памяти. Память в ЭКВМ разбита на страницы по 100 байт в каждой. Поэтому команда "БП 17", расположенная по адресу 0101 передаёт управление на адрес 0117 в этой же странице. Команда "БП 05", расположенная по адресу 0181 передаёт управление на адрес 0105 и т.д. Для перехода между страницами используются команды с расширенной адресацией, например "Р БП NNNN". В этих командах адрес записывается полностью. Команда "В/О" завершает подпрограмму. При выполнении этой команды происходит возврат к команде, следующей за командой вызова подпрограммы. В адресах 0195-0207 расположена строка сообщения об ошибке. Строка начинается кодом 0Dh (код ASCII 13 - "возврат каретки"), который требуется для очистки предыдущего содержимого строки комментария. Для этой цели можно также использовать код 0Ah (код ASCII 10 - "новая строка"). Заканчиваться строка должна кодом 00h или FFh. Кодировка русских букв в строке соответствует альтернативной русской кодовой таблице, которая использовалась в MS DOS (таблица 866). Программа, разумеется, не является идеальной. Одно из возможных улучшений - после ввода кода выводить подсказку, из какой шкалы в какую будет выполняться перевод. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |