3.2. Запись программы

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

Этапы развития программы могут быть представлены следующим образом:

1. Определить и проанализировать задачу.

2. Начертить структурную схему решения.

3. Записать программу на ассемблере.

4. Записать или генерировать программу в кодах машины.

5. Запустить программу на решение.

6. Документировать программу.

Рассмотрим задачу записи программы, целью которой является сложение содержимого трех последовательных ячеек памяти и размещение суммы памяти. На рис. 3.15, а, представлена функциональная структурная схема решения этой задачи. Она не содержит адекватных деталей, которые позволяют перевести ее прямо в сегмент программы на ассемблере или машинном языке.   

На рис. 3.15, б  показана подробная функциональная схема организации решения, которая в ходе программирования зависит от системы, в то время как функциональная схема может быть использована для любого МП.

Таблица 3.9 Программа сложения в машинном коде и на ассемблере

Затем следует записать версию подробной структурной схемы организации решения на ассемблере (такой сегмент программы приведен в табл. 3.8) в четыре типовых поля: метка, мнемоника, операнд, комментарий. Метки нас пока не интересуют. Комментарии оказывают большую помощь в понимании действия каждой команды программы. Сравнивая подробную функциональную схему организации решения на рис.

3.15, б и список команд на ассемблере в табл. 3.8, мы установим, что каждая рамка схемы соответ­ствует одной эквивалентной команде. Возьмем, например, первую прямоугольную рамку на рис. 3.15, б: команда загрузить 2010Н в пару HL эквивалентна команде на ассемблере.

LXI H2010Н, т.е. загрузить адрес 2010Н в пару HL в табл. 3.8.

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

1. Найти КОП каждой мнемоники в таблице состава команд.

2. Определить операнды (данные и адреса), когда это необходимо, передать командами из нескольких байт.

3. Установить адреса памяти в последовательности каждой команды и операнда.

Выполним наш пример сложения содержимых трех последовательных ячеек памяти и размещения их суммы в четвертой. Версия на ассемблере представлена в табл. 3.8. Две левые колонки содержат установленные адреса памяти и шестнадцатеричный КОП (или операнд). Содержимое соответствует 8-разрядным словам, помещенным в память.

Мнемоникой и операндом первой строки команды на машинном языке являются LXI H, 2010Н, для которых должен быть установлен КОП и в этом случае два операнда. Необходимая информация для этого типа команд (передать данные) находится в таблице команд. Мнемоника LXI H в середине таблицы и ее КОП 21Н то, что упоминается в колонке «содержимое» в табл. 3.8. Отметим, что эта команда требует два дополнительных байта данных.

Младший (10Н в этом примере) занесен первым по адресу 2021H, а старший (здесь 20H) занесен по адресу 2022H. Другие мнемоники в табл. 3.8 соответствуют однобайтовым командам. Шестнадцатеричные КОП находятся в соответствующей таблице и переносятся в колонку «содержимое». Программа в левых колонках записана в машинном коде и может быть введена в систему.

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

Последним этапом программирования является документирование. Документировать программу – значит дать ее описание, указывающее, в какой последовательности должны выполняться операции. Сюда входят схемы вычислений, списки, данные, адреса, используемые подпрограммы и комментарии. Сильно развитые программы требуют тщательно разработанной документации.

Рассмотрим пример, представленн