На своем рабочем уровне микропроцессор реагирует на список операций, называемый машинной программой. На рис. 3.1, а приведено содержимое памяти, являющееся программой на машинном языке. Эта программа начинается с адреса 2000Н с содержимым КОП ОО11 11102 и оканчивается адресом 2006Н с содержимым 0111 01102. Человеку практически невозможно понять программу, представленную в такой форме.
Программа на машинном языке на рис. 3.1, а становится несколько проще для восприятия, когда она представлена в шестнадцатеричном коде (Н-коде), как показано на рис. 3.1, б. Однако, хотя двоичные данные приведены в шестнадцатеричном коде, эта часть программы всегда рассматривается как заданная на машинном языке и оказывается трудной для понимания.
В более приемлемой форме записанная на машинном языке она могла бы выглядеть так:
1. Загрузить двоичное число (1011 0100) в аккумулятор.
Инвертировать каждый двоичный бит содержимого аккумулятора.
Поместить результаты инверсии в ячейку памяти данных 2100Н.
В этой части осуществляется перевод двоичного 8-разрядного числа в его эквивалент в инверсной форме.
Возникает вопрос: как перейти от этой формы человеческого языка, иногда длинной и сложной, к машинному языку? Ответ состоит в использовании языка простого программирования – от самого высокого уровня до машинного, представленного на рис. 3.1. Ассемблер использует слова и фразы, преобразуя их в машинный код микропроцессора.
Обычно фраза или заданная величина на ассемблере будет соответствовать выражению длиной от одного до трех байт машинного языка. Суть и процедура ассемблирования показаны на рис. 3.2, где, например, вторая команда программы представлена единственной мнемоникой из трех букв СМА (инвертировать содержимое аккумулятора). Сначала три буквы переведены в их эквивалент в коде ASCI , затем три кода AS СI преобразованы в определенный порядок специальной программой ассемблера, которая выдает код инверсии содержимого аккумулятора на машинном языке, т.е. 0010 11112 в данном случае или 2FH. Мнемоника преобразована в один единственный байт машинного языка.
Программа на языке ассемблер, записанная человеком, могла бы быть представлена в виде табл. 3.1.
Число различных команд микропроцессора равно 78 и для них предложено 78 имен команд. Многие базовые команды порождают несколько различных кодов операций, поэтому общее число кодов команд равно 244.
Запомнить 244 восьмиразрядных двоичных кода очень трудно, и поэтому каждому коду ставится в соответствие мнемоническое название (мнемоника) команды, которое является сокращением от английских слов, описывающих ее действие. Например, IN 25 – input data at accumulator from port 25. На русский язык переводится так – ввести данные в аккумулятор из порта с адресом 25.
Мнемонический код команд позволяет легче запомнить их функции и значительно упрощает написание программ.
Такой язык написания программ называется языком ассемблера.
А затем эту программу на ассемблере надо перевести на язык, понятный микропроцессору, в последовательность двоичных восьмиразрядных чисел.
Перевод может происходить автоматически с помощью специальных программ-трансляторов (кросс-ассемблеров или ассемблеров) или вручную с помощью таблицы кодов команд.
При работе микропроцессор реагирует на список команд, называемый машинной программой. На рис. 3.1 показаны программы: а) в двоичном машинном коде; б) в шестнадцатеричном машинном коде.
Программа на рис. 3.1, а начинается с адреса 2000Н с содержимым КОП 001111100 и оканчивается адресом 2006 с содержимым 01110110. Человеку практически невозможно понять программу, представленную в таком виде. Хотя любая микропроцессорная система будет работать только с такой программой.
Программа, представленная на рис. 3.1, б, несколько проще для восприятия, так как она представлена в шестнадцатеричном коде, но все равно она трудна для понимания. Обе эти программы написаны на машинном языке.
А как программа, записанная на машинном языке, могла быть описана человеком?
1 – загрузить двоичное число 10110100 в аккумулятор;
2 – инвертировать каждый дв
оичный бит содержимого аккумулятора;
3 – поместить результат инверсии в ячейку памяти данных 2100Н;
4 – остановить микропроцессор.
Здесь осуществляется инвертирование двоичного восьмиразрядного числа.
Возникает вопрос: как перейти от этой формы человеческого языка, иногда длинной и сложной, к машинному языку.
Язык ассемблер использует слова и фразы, преобразуя их в машинный код микропроцессора.
Суть и процедура ассемблирования показаны на рис. 3.2, где вторая команда программы представлена единственной мнемоникой из трех букв CMA – complement accumulator – инвертировать содержимое аккумулятора.
Ход ассемблирования. Сначала три буквы переведены в их эквивалент в коде АСКИ, затем эти три кода АСКИ преобразованы в определенный порядок специальной программой ассемблера, которая выдает код инверсии содержимого аккумулятора на машинном языке – 2FH.
Программа, записанная человеком на языке ассемблера, выглядит следующим образом:
Программа разделена на 4 поля:
1 – поле метки; используется не всегда;
2 – поле мнемоники, содержит точную мнемонику, установленную разработчиком. Указывает программе ассемблера операцию для выполнения;
3 – поле операнда, содержит информацию о регистрах, данных и адресах, объединенных соответствующей операцией;
4 – поле комментариев, не учитывается ассемблером и ограничивается его перепечаткой. Очень важно, так как позволяет понять события в программе.
Таблица 3.1 Программа на языке ассемблер
Метка |
Мнемоника |
Операнд |
Комментарий |
MVI CMA STA HLT |
A, B4H 2100H |
Загрузить в аккумулятор данные, следующие непосредственно: В4 Инвертировать содержимое аккумулятора Разместить содержимое аккумулятора в ячейке памяти с адресом 2100 Остановить МП |
Но для того чтобы загрузить программу в машину и выполнить ее, необходимо дать адреса и их содержимое.
Тогда наиболее полная программа в машинных кодах и на языке ассемблера выглядит так, как показано в табл. 3.2.
Таблица 3.2
Адрес, Н-код |
Содержимое, Н-код |
Метка |
Мнемоника |
Операнд |
Комментарий |
2000 2001 2002 2003 2004 2005 2006 |
3E B4 2F 32 00 21 76 |
MVI CMA STA HLT |
Загрузить аккумулятор данными, следующими непосредственно за КОП, В4Н Инвертировать содержимое аккумулятора Поместить содержимое аккумулятора в ячейку памяти 2100Н Остановить МП |
Состав команд микропроцессора включает следующие группы: 1 – операций передачи данных, 2 – арифметических действий, 3 – логических операций, 4 – операций ветвления, 5 – вызова подпрограмм и возврата в основную программу, 6 – прочих операций.