PIC-микроконтроллеры. Все, что вам необходимо знать | страница 40



Раз уж мы все равно собираемся использовать компьютер для перевода нашей программы, называемой также исходным кодом, в двоичный машинный код, называемый объектным кодом, то имеет смысл не мелочиться и записать ее полностью в символическом виде. При этом различные команды будут представлены их мнемоническими обозначениями, а адреса переменных — своими именами. В результате наша программа примет вид:

movf NUM_1,w; Копируем содержимое NUM_1 в W

addlw 4; Прибавляем к нему число 4

movwf NUM_2; Копируем NUM_1 + 4 в NUM_2

Текст после символов «;» называется комментариями, которые используются для облегчения понимания программы.

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

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

* * *

В основе работы любого вычислительного устройства лежит периодическое выполнение цикла выборкаисполнение. При этом каждая команда поочередно выбирается из памяти программ, интерпретируется и исполняется. Поскольку память, к которой обращается программа в процессе выполнения, является памятью данных, а каждое устройство памяти имеет собственные шины, операции выборки и исполнения могут осуществляться параллельно. Таким образом, во время выборки n-й команды исполняется команда n — 1. На Рис. 3.4 показано, что коды обеих команд, как следующей, так и текущей, хранятся в двух внутренних регистрах команд — IR1 и IR2 соответственно. Команды, считанные из памяти программ, загружаются в начало этого конвейера и «выталкиваются» в дешифратор команд с конца конвейера. На Рис. 3.7 изображен развернутый во времени процесс выполнения нашей команды, разбитый на машинные циклы. Во время каждого цикла, за исключением самого первого, выборка новой команды и исполнение предыдущей осуществляются одновременно.



Рис. 3.7.Параллельные потоки выборки и исполнения команд


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

* * *

Выборка (Рис. 3.4)