М.Х. Джонс - Электроника практический курс (1055364), страница 82
Текст из файла (страница 82)
Например, сразу после запуска все регистры необходимо очистить от случайных данных. Если в машине имеется встроенный Бейсик, то процессор должен обратиться к первой свободной ячейке в области памяти, отведенной для программ на Бейсике, подготовиться к чтению с клавиатуры и показу на экране вводимых инструкций Бейсика.
Без операционной системы все эти действия, которые мы воспринимаем как само собой разумеющиеся, были бы невозможны и введение программы стало бы утомительной последовательностью управления многими переключателями для задания в двоичном виде всех кодов, адресов и данных. Большая часть экспериментов, о которых пойдет речь, рассчитана на применение микро- Нрограмнные средства 451 ЭВМ Асогп1ВВС на основе уже рассмотренного нами процессора 6502.
Хотя эти машины и выглядят устаревшими по сравнению с сегодняшними стандартами для персональных компьютеров и «Архимедов», все же микроЭВМ фирмы ВВС Мгсго еше используются в большинстве колледжей и школ в Великобритании. С точки зрения наших целей достоинство такой микро- ЭВМ заключается в легкости доступа к ее параллельным портам ввода и вывода. Идеальной для наших экспериментов является возможность программирования напрямую на языке ассемблера: такая возможность имеется также на теперешних «Архимедах», снабженных эмулятором ВВС М)его.
Разбираемые ниже примеры дешифрирования сигналов, возникаюших на шине, можно с пользой применить для организации ввода/вывода на персональных компьютерах фирмы 1ВМ и на совместимых с ними компьютерах. Если компьютер находится под управлением операционной системы, то это означает, что он, как правило, не начинает исполнять хранящуюся в памяти программу пользователя сразу после перезапуска, а подготавливает себя к приему с клавиатуры указаний о начале действий.
В Бейсике все, что требуется, это набрать слово «КЫ)Ч». Запустить программу, записанную в машинном коде, тоже очень легко; так же, как и во многих других компьютерах, на микроЭВМ ВВС Много требуется набрать команду САЬЬ адрес начала, в результате чего начнется исполнение программы, храняшейся в машинном коде, начиная с этого адреса. Довольно интересно, что в случае, когда начальный адрес указан неправильно и машине велено начать исполнять программу с места, где записано что-то еше, например, данные, у процессора нет возможности сообшить, что это не программа, и он начинает «вкалывать» в предположении, что встречаюшиеся числа являются кодами операций, давая лишенные какого-либо смысла результаты (обычно гаснет экран и нет отклика на нажатие клавиш).
Такой фатоланый сбой (аварийный отказ) в системе часто требует выключения питания, для того чтобы восстановить ситуацию, и хотя никакого вреда при этом машине не наносится, работа, на которую было потрачено много времени, может пропасть. Мудрый программист все . гда записывает на диск резервную копию введенной программы перед тем, как попытаться ее запустить. 14.74 Непосредственный ввод в машинном коде и запуск Нашу простую программу сложения из табл. 14.2, написанную в машинном коде, можно ввести прямо в память с помошью операций РОКЕ языка Бейсик (в случае микроЭВМ ВВС Мгсго этой команде эквивалентна инструкция?адрес ). Хотя зто и нудное занятие, но оно дает возможность почувствовать работу микропроцессора в вашем компьютере.
Чтобы испытать программу сложения, написанную в машинном коде, введите следующие строки в микроЭВМ ВВС М(сто; строки нумеровать не нужно: ?Й70 = йА5 452 МикроЭВМ и их лримененил ?Й?1 = дг80 ?сг72 = сг18 ?аг73 = аг65 ?й?4 = ег81 ?дг75 = аг85 ?й76 = й82 '.й?7 = аг60 Введя программу, мы должны записать два числа, которые хотим сложить, в зарезервированные нами для этих целей ячейки с адресами аг80 и аг81 соответственно. Эти числа могут иметь любое значение от 0 до 255 (от аг00 до есгЕР) и могут быть десятичными или шестнадцатеричными.
Например, если наши числа 13 и 19, то следует ввести ?й80 = 13 или в шестнадцатеричной записи?Вс80 = ась) ?й81 = 19 или в шестнадцатеричной записи?й81 = дг13 Чтобы запустить нашу простенькую программу, мы воспользуемся операционной системой, которая воспринимает инструкции Бейсика: САУЛ. аг70 Эта инструкция поместит в программный счетчик адрес аг70 и начнет исполнение с этого места в сторону ббльших адресов. Наша программа будет выполнена за несколько микросекунл, однако мы не увидим ответ на экране.
Это произойдет потому, что результат останется в ячейке памяти с адресом аг82, куда мы велели процессору поместить его. Команда Бейсика РЕЕК адрес (эквивалентна ?адрес на микроЭВМ ВВС М)его) предоставляет прямой доступ к содержимому ячейки, так что мы можем увнаеть наш результат, набрав РК1ХТ?й82 Компьютер, после нажатия сгегцгп>, откликнется выводом на экран содержимого ячейки с адресом аг82, которое в нашем случае есть сумма 13 и 19, то есть 32. Для получения ответа в шестнадцатеричной форме нужно набрать РК1ХТ ?аг82 На экране появится ответ: 20.
14. 7. 5 Язык ассемблера Введенную в компьютер программу в машинном коде, лишенную пояснительных замечаний, сделанных ранее, фактически невозможно понять. Программные средства 453 Табл. 14.3 Код операции Операнд Комментарий .АРРЕК 1.РА / метка, задающая начало подпрограммы ВОХОНЕ / загрузить первое число в аккумулятор из ячейки памяти ВОХОНЕ / сбросить признак переноса в ноль ВОХТУУО / прибавить второе число из ячейки памяти ВОХТ%0 к содержимому аккумулятора ЯЗМВОХ / сохранить эту сумму чисел в ячейке памяти 5ЫМВОХ / конец этой части программы СЬС АРС 5ТА КТЯ Двоичные коды, используемые процессором, очень далеки от человеческого языка, и любому программисту трудно и утомительно работать с машинным кодом. Эта проблема решается с помощью языка ассемблера, в котором машинный код преобразуется в буквенные аббревиатуры, выбранные так, чтобы напоминать программисту функцию каждой команды.
Например, наша команда «загрузить аккумулятор» (ЬоаР Ассшпц1агог), которая в машинном коде записывается как яА5, преобразуется в ЬРА, что является разумной аббревиатурой данной функции. Имея в виду, что запись на языке ассемблера осушествляет напоминание, ее называют мнемонической. На языке ассемблера так же легко обрашаться и с адресами ячеек памяти: программист может называть их, указывая метки, вместо того, чтобы обозначать их шестнадцатеричными числами. Поскольку положение каждой метки относительно начала программы является вполне определенным, абсолютные значения адресов ячеек, занимаемых программой, более не сушественны, и программа становится перемещаемой — это важное свойство для подпрограмм, которые могли бы применяться в множестве различных программ.
Метки могут применяться не только для обозначения операндов, но также и в качестве заголовков отдельных частей программы. Такое присвоение меток полезно не только лля программиста, чтобы напоминать ему, что делает его программа, но также и в качестве разметки„позволяюшей осуществлять ветвление и переходы в самой программе. Например, команда условного перехода ВСС БМАЬЬ отправит процессор к подпрограмме, помеченной меткой БМАЬЬ, если признак переноса в слове состояния окажется равным нулю.
Третье полезное свойство языка ассемблера состоит в том, что программист имеет возможность вносить замечания и пояснительный комментарий в каждую строку программы. Вставление такого рода документации является жизненно необходимым для любой программы. Без нее даже сам составитель программы может забьпь доводы и аргументацию в пользу различных подпрограмм и структур. Ценность языка ассемблера иллюстрируется на примере программы, приведенной в табл. 14.3, где наша программа сложения, написанная ранее в машинном коде, теперь выражена посредством мнемоники и меток. 454 МикроЭВМ и их нрименения Чтобы запустить программу, написанную на языке ассемблера, необходимо сначала запустить «дешифруюшее» программное средство, называемое ассемблером, для преобразования мнемоники и меток в двоичный машинный код и удаления полей комментария.
Затем оттранслированная программа в машинном коде запускается обычной инструкцией САУЛ, в которой теперь удобно сослаться на начальную метку программы, а именно: САУЛ АРРЕК. МикроЭВМ ВВС М!сто содержит полезный ассемблер как часть встроенной операционной системы. В частности, ассемблер хорошо сопрягается со средствами языка Бейсик, так что части программы, написанные на языке ассемблера, могут быть вставлены в программу, написанную на Бейсике, только они должны быть заключены в пару квадратных скобок: [ [.
Обычно участку программы на языке ассемблера предшествуют одна или две строки на Бейсике. Прежде всего необходимо сообщить программному счетчику, откуда начинать, для чего переменной Р% присваивается номер ячейки памяти; затем мы определяем ячейки памяти для используемых меток.