На своем рабочем уровне МП реагирует на список операций, называемых машинной программой. На рис. 1.1,а приведено содержимое памяти, являющееся программой на машинном языке. Эта программа начинается с адреса 2000Н с содержимым 00111110В и заканчивается адресом 2006H с содержимым 01110110В Человеку практически невозможно понять программу, представленную в такой форме.
Программа на машинном языке на рис. 1.1,а становится несколько проще для восприятия, когда она представлена в шестнадцатеричном коде (Н-коде), как показано на рис. 1.1,б. Однако, хотя двоичные данные приведены в шестнадцатеричном коде, эта часть программы всегда рассматривается как заданная на машинном языке и оказывается трудной для понимания.
В более приемлемой форме рассматриваемая программа могла бы выглядеть так:
1.загрузить двоичное число (10110100) в аккумулятор;
2.инвертировать каждый двоичный бит содержимого аккумулятора;
3.поместить результаты инверсии в ячейку памяти данных 2100Н.
Возникает вопрос: как перейти от этой формы человеческого языка, иногда длинной и сложной, к машинному языку? Ответ состоит в использовании простого языка программирования – Ассемблер, который использует слова и фразы, преобразуя их в машинный код МП.
Обычно фраза или заданная величина на ассемблере будет соответствовать выражению длиной от одного до трех байтов машинного языка. Суть и процедура ассемблирования показаны на рис. 1.2, где вторая команда программы представлена единственной мнемоникой из трех букв СМА (инвертировать содержимое аккумулятора). Сначала три буквы переведены в их эквиваленты в коде АSCII, затем три кода ASCII преобразованы в определенный порядок специальной программой Ассемблера, которая выдает уже код команды инверсии содержимого аккумулятора на машинном языке, т.е. 00101111В в данном случае или 2FH (в Н-коде). Таким образом, мнемоника преобразована в один единственный байт машинного языка.
Программа на языке Ассемблер, записанная человеком, может быть представлена в виде следующей таблицы (в двоичном или в шестнадцатеричном машинном коде):
Адрес
Н-код
Двоичное
содержимое
Адрес
Н-код
Шестнадцат.
содержимое
Н-код
- начало программы
3Е
- начало программы
ВЧ
2F
- конец программы
- конец программы
Обычным является деление строк на четыре поля: метка, мнемоника, операнд и комментарий.
Мнемоника Код Транслятор Ассемблера Машинный
команды ASCII в машинный код код
С
М
А
Рис. 1.2. Трансляция мнемоники Ассемблера в машинный код команды
Поле метки используется не всегда и в этой программе остается пустым. Поле мнемоники содержит точную мнемонику согласно системе команд данного МП, которая указывает операцию для выполнения. Поле операнда содержит информацию о регистрах, данных и адресах, объединенных соответствующей операцией. Поле комментария позволяет сделать программу более понятной при ее рассмотрении.
После того как программа на языке Ассемблер составлена (табл. 1.1), производится перевод мнемоник и операндов в машинные коды, и списку команд назначаются соответствующие ячейки памяти.
Таблица 1.1
Метка
Мнемоника
Операнд
Комментарий
MVI
A, ВЧН
Загрузить в аккумулятор данные ВЧН
СМА
Инвертировать содержимое аккумулятора
STA
2100Н
Переслать содержимое аккумулятора в память по адресу 2100Н
HLT
Остановить МП
Переход от версии табл.1.1 к ассемблированной версии табл.1.2 может быть выполнен либо вручную, либо на машине при помощи операционной программы Ассемблера.
Таблица 1.2
Адрес
Н – код
Метка
Мнемоника
Операнд
Машинный код
Комментарий
MVI
А, ВЧН
3Е
ВЧ
Загрузить в аккумулятор данные ВЧН
СМА
2F
Инвертировать содержимое аккумулятора
STA
2100Н
Переслать содержимое аккумулятора в память по адресу 2100Н
HLT
Остановить МП
Запись программы удобно проводить в более компактной форме. Для этого в таблице указывается только начальный адрес каждой команды, при этом имеется в виду, что в зависимости от данной команды она будет занимать одну, две или три последовательные ячейки памяти. Записанная таким образом программа представлена в виде табл.1.3.
Таблица 1.3
Адрес
Н-код
Метка
Мнемоника
Операнд
Машинный код
Комментарий
MVI
А, ВЧН
3Е ВЧ
СМА
2F
STA
2100H
32 00 21
HLT
Программирование на языке Ассемблер является способом "очеловечивания" действий МП. Языки высокого уровня (Бейсик, Паскаль, Фортран и т.д.) при их использовании делают программирование более удобным.
Например, одна команда (оператор) на Бейсике или Паскале может соответствовать 20 или 30 машинным командам. Цель данных методических указаний состоит в получении навыков программирования МП (в противоположность программированию микро-ЭВМ), потому что мы будем использовать его состав команд. Будем выполнять программирование на языке Ассемблер, помогающее пониманию состава команд МП и его действий.
Для программиста МП-система, построенная на базе МП КР580ВМ80А, представлена составом команд, памятью, регистрами общего назначения, счетчиком команд, портами ввода-вывода, флажками (триггерами регистра признаков), указателем стека и стеком. Все эти элементы, за исключением памяти и портов ввода-вывода, составляют часть МП.
В дальнейшем мы будем использовать состав команд МП КР580ВН80А, приведенный в табл.5.1 и 5.2[1].