Выбрать главу
Арифметико-логическое устройство

АЛУ выполняет арифметические и логические операции, определяемые значением кода режима (см. Рис. 2.10 на стр. 39), который извлекается из кода команды дешифратором команд.

Регистр состояния

Этот регистр содержит флаги нуля Z и переноса С, которые устанавливаются соответственно, если результат операции равен нулю и если в результате сложения возник перенос.

Рабочий регистр

В рабочем регистре АЛУ (W) обычно находится один из операндов команды — либо источник, либо адресат. Например, команда addwf h’20’,w складывает содержимое рабочего регистра с содержимым регистра h’20’ и помещает сумму обратно в рабочий регистр W. В некоторых компьютерах этот регистр называется также аккумулятором.

* * *

Помимо ЦПУ, в нашем компьютере имеется две области памяти, предназначенные для хранения кода программы и данных.

Память программ

Каждая позиция (или ячейка) памяти программ может содержать одну команду, которая кодируется 14-битным словом. Из Рис. 3.4 видно, что каждая из этих ячеек имеет свой адрес, выставляемый счетчиком команд на шину адреса памяти программ. На этом рисунке содержимое PC равно h’001’ (или Ь’0000000000000’), что приводит к выдаче содержимого ячейки h’001’ на шину данных памяти программ и, следовательно, загрузке его в начало конвейера. В рассматриваемом примере считанное значение равно h’3E04’ (или b’11111000000100’), что является машинным кодом команды addlw 04. В конечном счете дешифратор команд интерпретирует этот код как операцию сложения константы «4» с рабочим регистром.

Память данных

Каждая ячейка (или регистр) памяти данных содержит один байт (восемь битов) данных. Адрес регистра формируется исполнительным блоком в регистре адреса FAR и выставляется на шину адреса памяти данных. Содержимое адресованного регистра либо считывается в регистр данных FDR, либо перезаписывается находящимся в нем значением.

Шины адреса и данных памяти данных совершенно независимы от одноименных шин памяти программ, что позволяет одновременно обращаться к обеим областям памяти. Таким образом, адреса памяти программ и памяти данных имеют различный смысл, т. е. адрес h’25’ в памяти программ совсем не то же самое, что адрес h’25’ в памяти данных, который соответствует регистру h’25’.

* * *

Теперь, когда у нашего ЦПУ появилась память программ и память данных, рассмотрим более подробно саму программу. Наша иллюстративная программа состоит всего из трех команд и, как уже упоминалось, предназначена для копирования увеличенного на 4 значения однобайтной переменной, расположенной по адресу NUM_1, в ячейку с адресом NUM_2. Из Рис. 3.4 видно, что переменная NUM_1 представляет собой псевдоним для обозначения содержимого регистра данных h’25’. Аналогично, имя NUM_2 является символическим выражением для указания содержимого регистра данных h’26’.

А теперь рассмотрим используемые в программе команды.

∙ movf

Эта команда (MOVe File) копирует содержимое заданного регистра данных в рабочий регистр (как правило) или же обратно в тот же регистр данных (см. стр. 141). Таким образом, команда movf num_1,w загружает байт, расположенный по адресу h’25’ памяти данных, в рабочий регистр. Если содержимое указанного регистра равно нулю, то при выполнении команды устанавливается флаг Z, в противном случае этот флаг будет сброшен.

∙ addlw

Эта команда (ADD Literal to Working register) прибавляет однобайтную константу к содержимому рабочего регистра. Таким образом, команда addlw 04 прибавляет число 4 к содержимому рабочего регистра и записывает результат обратно в этот же регистр. Если возникает переполнение, то устанавливается флаг С, а если результат равен нулю — флаг Z.

∙ movwf

Эта команда (MOVe Working register to File) копирует содержимое рабочего регистра в заданный регистр данных. Таким образом, команда movwf NUM_2 сохраняет содержимое рабочего регистра по адресу h’26’ памяти данных. На состояние флагов данная команда не влияет.

Описывая команды, мы использовали мнемонические обозначения, такие как addlw. Разумеется, реальные логические схемы, декодирующие эти команды, работают исключительно с двоичными кодами. Мнемонические обозначения просто играют роль своеобразных «памяток» для программиста. Хотя крайне маловероятно, что кто-либо станет писать программы в машинных кодах, двоичный формат всех команд имеет логическую основу, и его знание будет полезно для понимания недостатков и ограничений набора команд и реальных аппаратных средств, которые мы будем обсуждать в следующих двух главах.