Машинный язык и ассемблер
На своем рабочем уровне микропроцессор реагирует на список операций, называемый машинной программой. На рис. 7.1, а приведено содержимое памяти, являющееся программой на машинном языке. Эта программа начинается с адреса 2000Н с содержимым КОП 0011 11102 и оканчивается адресом 2006Н с содержимым 0111 01102. Человеку практически невозможно понять программу, представленную в такой форме.
Рис. 7.1. Программы:
a —в двоичном машинном коде; б — в шестнадцатеричном машинном коде
Программа на машинном языке на рис. 7.1, а становится несколько проще для восприятия, когда она представлена в шестнадцатеричном коде (Н-коде), как показано на рис. 7.1,6. Однако, хотя двоичные данные приведены в шестнадцатеричном коде, эта часть программы всегда рассматривается как заданная на машинном языке и оказывается трудной для понимания.
В более приемлемой форме записанная на машинном языке она могла бы выглядеть так:
1. Загрузить двоичное число (1011 0100) в аккумулятор.
2. Инвертировать каждый двоичный бит содержимого аккумулятора.
3. Поместить результаты инверсии в ячейку памяти данных 2100Н.
В этой части осуществляется перевод двоичного 8-разрядного числа в его эквивалент в инверсной форме.
Рис. 7.2. Трансляция мнемоники ассемблера в машинный код программы
Возникает вопрос: как перейти от этой формы человеческого языка, иногда длинной и сложной, к машинному языку? Ответ состоит в использовании языка простого программирования — от самого высокого уровня до машинного, представленного на рис. 7.1.
Ассемблер использует слова и фразы, преобразуя их в машинный код микропроцессора.
Обычно фраза или заданная величина на ассемблере будет соответствовать выражению длиной от одного до трех байт машинного языка.
Суть и процедура ассемблирования показаны на рис. 7.2, где, например, вторая команда программы представлена единственной мнемоникой из трех букв СМА (инвертировать содержимое аккумулятора - СМА от Complement Accumulator (англ.) — дополнить аккумулятор. Имеется в виду дополнение до 1, т. е. инвертирование или формирование обратного кода числа, содержащегося в аккумуляторе.).
Сначала три буквы переведены в их эквивалент в коде ASCII, затем три кода ASCII преобразованы в определенный порядок специальной программой ассемблера, которая выдает код инверсии содержимого аккумулятора на машинном языке, т.е. 0010 11112 в данном случае или 2FH. Мнемоника преобразована в один единственный байт машинного языка.
Программа на языке ассемблер, записанная человеком, могла бы быть представлена в виде табл. 7.1.
Обычным является деление объявлений на машинном языке на четыре поля: метка; мнемоника; операнд и комментарий.
Таблица 7.1. Программа на языке ассемблер
Метка | Мнемоника | Операнд | Комментарий |
MVI СМА STA HLT | А, В4Н 2100Н | Загрузить в аккумулятор данные, следующие непосредственно: В4Н Инвертировать содержимое аккумулятора Разместить содержимое аккумулятора Остановить МП |
Поле метки используется не всегда и в этой программе остается пустым.
Поле мнемоники содержит точную мнемонику, установленную разработчиком, которая обычно указывает программе ассемблера операцию для выполнения.
Поле операнда содержит информацию о регистрах, данных и адресах, объединенных соответствующей операцией. Используя информацию только полей мнемоники и операнда, ассемблер может выдать соответствующий код на машинном языке. Можно также назначить ячейки памяти списку команд. Поле комментариев не учитывается ассемблером и ограничивается его перепечаткой. Это поле очень важно, поскольку позволяет понять события в программе.
Как только программа составлена (см. табл. 7.1), она представляется затем в виде табл. 7.2. Таким образом, задача ассемблирования (или составление программы на ассемблере) состоит из этапов: 1) перевод мнемоники и операндов на машинный язык;
2) назначение последовательно ячейки памяти каждому КОП и операнду. Переход от версии табл. 7.1 к ассемблированной версии табл. 7.2 может быть выполнен либо вручную, либо на машине при помощи специальной программы ассемблера.
Таблица 7.2. Программа в машинных кодах и на языке ассемблер
Адрес, Н-код | Содержимое, Н-код | Метка | Мнемоника | Операнд | Комментарий |
2004 2005 2006 | ЗЕ В4 2F | MV1 CMA STA HLT | А, В4Н 21 ООН | Загрузить аккумулятор данными, следующими непосредственно за КОП, В4Н Инвертировать содержимое аккумулятора Поместить содержимое аккумулятора в ячейку памяти 2100Н Остановить МП |
Программа, состоящая из символических команд (фрагмент показан в табл. 7.1), иногда называется исходной программой, а переведенная однажды на машинный язык — уже объектной программой.
Программирование на языке ассемблер является способом «очеловечивания» действий микропроцессора. Языки высокого уровня (C, С+ и т. д.) при их использовании делают программирование более удобным.
Например, одна команда на C или С+ может соответствовать 20 или 30 машинным командам. Название этой главы относится к программированию микропроцессора (в противоположность программированию микро-ЭВМ), потому что везде мы будем использовать его состав команд. Будет использовано программирование на языке ассемблер, помогающее пониманию состава команд микропроцессора и его действий.
Упражнения
7.1. Два сегмента программы, приведенные на рис. 7.1, написаны на (ассемблере, машинном языке).
7.2. Для формулировки команды микропроцессору язык (машинный, ассемблер) использует слова и фразы.
7.3. _________ (Ассемблер, Монитор) является специальной программой ЭВМ, позволяющей перевести программу пользователя на машинный язык.
7.4. Перечислить четыре поля программ на языке ассемблер.
7.5. Составленная на языке ассемблер программа будет содержать адреса ячеек памяти и (машинные, С) коды для каждой команды на языке ассемблер.
7.6. Программа, составленная из символических команд, называется (объектной, исходной).
Решения
7.1. Машинном языке. 7.2. Ассемблер. 7.3. Ассемблер. 7.4. См. обозначения в табл. 7.1, а именно четыре поля: метка, мнемоника, операнд и комментарий. 7.5. Машинные. 7.6. Исходной.
Лекция 33
Дата добавления: 2016-07-05; просмотров: 5476;