3.1. Машинный язык и ассемблер

На своем рабочем уровне микропроцессор реагирует на список операций, называемый машинной программой. На рис. 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

A, B4H

2100H

Загрузить аккумулятор данными, следующими непосредственно за КОП, В4Н

Инвертировать содержимое аккумулятора

Поместить содержимое аккумулятора в ячейку памяти 2100Н

Остановить МП

Состав команд микропроцессора включает следующие группы: 1 операций передачи данных, 2 арифметических действий, 3 логических операций, 4 операций ветвления, 5 вызова подпрограмм и возврата в основную программу, 6 прочих операций.