Программные средства

February 6, 2012 by admin Комментировать »

Последовательность команд

МикроЭВМ — это мощное и гибкое устройство, но его исключительная гибкость означает, что оно ничего не может сделать без списка инструкций (команд). Каждый пользователь компьютера быстро понимает, что сама аппаратура — это только отправная точка при создании полезной системы, без программы она так же бесполезна, как самолет без пилота и без маршрута. В знак признания равной важности аппаратного обеспечения и компьютерных программ последние называют обычно программным обеспечением.

Изучение программирования в полном объеме выходит за рамки этой книги, но краткое введение поможет читателю разобраться с программами, используемыми далее в этой главе в компьютерных экспериментах.

Машинный код

Компьютерные программы могут иметь различную форму, но в любом случае они должны быть представлены на определенном языке. К этому моменту мы познакомились со структурой микропроцессора, поэтому для нас естественно начать с рассмотрения того языка, который понятен центральному процессору. Этот язык называют машинным кодом, и в нем, как и следовало ожидать, используются двоичные числа, которые мы, как обычно, будем ради удобства записывать в дальнейшем в шестнадцатеричной форме. Программа в машинном коде представляет собой простую последовательность закодированных команд для центрального процессора вперемешку с соответствующими адресами в памяти или данными. Центральному процессору бывает известно заранее, что за определенными кодами команд всегда следуют данные или адреса. Например, процессор 6502 знает, что код &А5 является командой загрузки аккумулятора содержимым ячейки памяти, адрес которой непосредственно следует за кодом команды. Кроме того, код &А5 указывает, что соответствующая ячейка находится в «нулевой странице» памяти (то есть среди ячеек с адресами &00—&FF), поэтому процессор ждет однобайтовый адрес вслед за кодом команды. С другой стороны, код &AD также велит процессору загрузить аккумулятор, но одновременно он указывает на то, что адрес ячейки будет состоять из двух байтов, что позволяет обратиться к любой из 64К ячеек памяти. В некоторых командах не требуется, чтобы после кода команды была указана ячейка памяти (например, код &18, «сбросить в 0 признак переноса»), и процессор знает, что следующий байт он должен рассматривать как код очередной команды. Таким образом, процессор проходит программу по определенному пути, делая различие между числами, которые следует считать кодами команд, и числами, которые являются данными или адресами. Числа, имеющие характер инструкции, называют кодами операций, а данные или адреса, следующие за кодом операции, — операндами.

В табл. 14.2 приведен простой пример программы в машинном коде; она написана на языке процессора 6502 и в ней осуществляется сложение двух чисел. Все цифры являются шестнадцатеричными. В левом столбце указаны адреса ячеек памяти, которые мы выбрали, чтобы поместить в них нашу программу; в каждой следующей ячейке содержится код операции или операнд.

Таблица 14.2.

Ячейка

Код

Значение памяти

70

А5

Код операции:

загрузка аккумулятора содержимым ячейки памяти, адрес которой указан следующим байтом

71

80

Операнд:

адрес ячейки с первым слагаемым в сумме

72

18

Код операции:

сбросить в 0 признак переноса

73

65

Код операции:

сложить содержимое аккумулятора с содержимым ячейки памяти, адрес которой указан следующим байтом

74

81

Операнд:

адрес ячейки памяти, содержимое которой мы хотим сложить с первым числом

75

85

Код операции:

сохранить содержимое аккумулятора в ячейке памяти, адрес которой указан следующим байтом

76

82

Операнд:

адрес ячейки памяти, в которую должен быть помещен ответ

77

60

Код операции:

конец этой часта программы

Запуск программы

Если бы мы имели дело с «голым» микропроцессором, нам следовало бы непосредственно ввести в память программу в машинном коде, вручную устанавливая с помощью переключателей соответствующие двоичные числа на шине адреса и на шине данных. Затем для запуска программы нужно подать импульс сброса (обычно О В) на вывод сброса RST микропроцессора. Внутренняя структура процессора предусматривает пребывание всей системы в нерабочем состоянии, пока на входе RST удерживается низкий уровень. Когда потенциал на входе RST возвращается к значению +5 В, процессор автоматически загружает программный счетчик содержимым определенных ячеек памяти (в случае процессора 6502 — содержимым ячеек &FFFC и &FFFD). С этого места программный счетчик начинает шагать по памяти, обеспечивая выполнение программы. Поэтому, программируя систему на основе микропроцессора 6502, вы должны поместить адрес начала вашей программы в ячейки &FFFC (младший байт) и &FFFD (старший байт) в качестве указателя, чтобы процессор мог найти вашу программу. Обычно сигнал сброса на входе RST формируется при включении системы, и программа запускается автоматически, хотя иногда у компьютера бывает кнопка ручного сброса (перезапуска) RESET. Как правило, ячейки с адресами &FFFC и &FFFD располагаются в ПЗУ или в стираемом ППЗУ, и делается это по очевидной причине: в противном случае адрес начала программы пропадал бы при выключении питания в результате удаления жизненно важного указателя на первую строку программы.

Хотя и полезно знать, как именно процессор начинает работать, все же совсем немногим читателям придется в действительности иметь дело с голым процессором. Потому что самый быстрый путь изучения этой новейшей области электроники состоит в использовании персонального компьютера (ПК) в комплексе с уже встроенной в ПЗУ операционной системой. Операционная система — это развитая совокупность программных средств, обеспечивающая выполнение процессором всех рутинных заданий, какие требуются в системе. Например, сразу после запуска все регистры необходимо очистить от случайных данных. Если в машине имеется встроенный Бейсик, то процессор должен обратиться к первой свободной ячейке в области памяти, отведенной для программ на Бейсике, подготовиться к чтению с клавиатуры и показу на экране вводимых инструкций Бейсика. Без операционной системы все эти действия, которые мы воспринимаем как само собой разумеющиеся, были бы невозможны и введение программы стало бы утомительной последовательностью управления многими переключателями для задания в двоичном виде всех кодов, адресов и данных. Большая часть экспериментов, о которых пойдет речь, рассчитана на применение микроЭВМ Acorn/BBC на основе уже рассмотренного нами процессора 6502. Хотя эти машины и выглядят устаревшими по сравнению с сегодняшними стандартами для персональных компьютеров и «Архимедов», все же микроЭВМ фирмы ВВС Micro еще используются в большинстве колледжей и школ в Великобритании. С точки зрения наших целей достоинство такой микроЭВМ заключается в легкости доступа к ее параллельным портам ввода и вывода. Идеальной для наших экспериментов является возможность программирования напрямую на языке ассемблера: такая возможность имеется также на теперешних «Архимедах», снабженных эмулятором ВВС Micr<£

Разбираемые ниже примеры дешифрирования сигналов, возникающих на шине, можно с пользой применить для организации ввода/вывода на персональных компьютерах фирмы IBM и на совместимых с ними компьютерах.

Если компьютер находится под управлением операционной системы, то это означает, что он, как правило, не начинает исполнять хранящуюся в памяти программу пользователя сразу после перезапуска, а подготавливает себя к приему с клавиатуры указаний о начале действий. В Бейсике все, что требуется, это набрать слово «RUN».

Запустить программу, записанную в машинном коде, тоже очень легко: так же, как и во многих других компьютерах, на микроЭВМ ВВС Micro требуется набрать команду CALL адрес начала, в результате чего начнется исполнение программы, хранящейся в машинном коде, начиная с этого адреса. Довольно интересно, что в случае, когда начальный адрес указан неправильно и машине велено начать исполнять программу с места, где записано что-то еще например, данные, у процессора нет возможности сообщить, что это не программа, и он начинает «вкалывать» в предположении, что встречающиеся числа являются кодами операций, давая лишенные какого-либо смысла результаты (обычно гаснет экран и нет отклика на нажатие клавиш). Такой фатальный сбой (аварийный отказ) в системе часто требует выключения питания, для того чтобы восстановить ситуацию, и, хотя никакого вреда при этом машине не наносится, работа, на которую было потрачено много времени, может пропасть. Мудрый программист всегда записывает на диск резервную копию введенной программы перед тем, как попытаться ее запустить.

Непосредственный ввод в машинном коде и запуск

Нашу простую программу сложения из табл. 14.2, написанную в машинном коде, можно ввести прямо в память с помощью операций РОКЕ языка Бейсик (в случае микроЭВМ ВВС Micro этой команде эквивалентна инструкция ?адрес). Хотя это и нудное занятие, но оно дает возможность почувствовать работу микропроцессора в вашем компьютере. Чтобы испытать программу сложения, написанную в машинном коде, введите следующие строки в микроЭВМ ВВС Micro; строки нумеровать не нужно:

?&76 = &82

?&77 = &60

Введя программу, мы должны записать два числа, которые хотим сложить, в зарезервированные нами для этих целей ячейки с адресами &80 и &81 соответственно. Эти числа могут иметь любое значение от 0 до 255 (от &00 до &FF) и могут быть десятичными или шестнадцатеричными. Например, если наши числа 13 и 19, то следует ввести

?&80 =13 или в шестнадцатеричной записи ?&80 = &D

?&81 = 19 или в шестнадцатеричной записи ?&81 = &13

Чтобы запустить нашу простенькую программу, мы воспользуемся операционной системой, которая воспринимает инструкции Бейсика:

CALL &70

Эта инструкция поместит в программный счетчик адрес &70 и начнет исполнение с этого места в сторону больших адресов. Наша программа будет выполнена за несколько микросекунд, однако мы не увидим ответ на экране. Это произойдет потому, что результат останется в ячейке памяти с адресом &82, куда мы велели процессору поместить его. Команда Бейсика РЕЕК адрес (эквивалентна ?адрес на микроЭВМ ВВС Micro) предоставляет прямой доступ к содержимому ячейки, так что мы можем увидеть наш результат, набрав

PRINT7&82

Компьютер после нажатия <return> откликнется выводом на экран содержимого ячейки с адресом &82, которое в нашем случае есть сумма 13 и 19, то есть 32. Для получения ответа в шестнадцатеричной форме нужно набрать

PRINT7&82

На экране появится ответ: 20.

Литература: М.Х.Джонс, Электроника — практический курс Москва: Техносфера, 2006. – 512с. ISBN 5-94836-086-5

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты