Выбрать главу

А теперь научимся работать с двоичными числами: суммировать их, вычитать, работать со знаком и с дробными числами. Кроме того, пора бы научиться работать и с обычными текстами!

Глава 4

Принципы работы микропроцессора

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

Виды двоичных кодов

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

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

Беззнаковые двоичные коды

Первый вид двоичных кодов, который мы рассмотрим, используется для представления целых беззнаковых чисел. В нем каждый двоичный разряд представляет собой степень цифры 2. Формат 8-разрядного беззнакового двоичного кода приведен на рис. 4.1.

Рис. 4.1. Формат 8-разрядного беззнакового двоичного кода

При этом минимально возможное число, которое можно записать таким двоичным кодом, равно 0. Максимально возможное число, которое можно представить этим кодом, можно определить как

М = 2n — 1

где n — разрядность двоичного числа. Разрядность числа обычно выбирают кратной разрядности микропроцессора.

Эти два числа полностью определяют диапазон значений чисел, которые можно представить двоичным кодом. В случае двоичного 8-разрядного беззнакового двоичного кода целые числа, которые можно записать с его помощью, находятся в диапазоне от 0 до 255. Восьмиразрядное двоичное число обычно называют байтом.

Для беззнакового двоичного 16-разрядного кода диапазон представляемых значений будет от 0 до 65535. В микропроцессорной системе, построенной на 8-разрядном процессоре, для хранения 16-разрядного числа используется две ячейки памяти, расположенные в соседних адресах. Для работы с числами, занимающими несколько ячеек памяти, используются специальные команды микропроцессора, позволяющие учитывать перенос между младшими и старшими байтами.

Прямые знаковые двоичные коды

Второй вид двоичных кодов, который мы рассмотрим, — это прямые целые знаковые коды. В этих кодах старший разряд в слове используется для представления знака числа. В прямом знаковом коде нулем обозначается знак «+», а единицей — знак «-». В результате введения знакового разряда диапазон чисел, представляемых двоичным кодом, смещается в сторону отрицательных чисел. Формат 8-разрядного прямого знакового двоичного кода приведен на рис. 4.2. На рисунке приведено шесть различных чисел, записанных в этом коде.

Рис. 4.2. Формат 8-разрядного прямого знакового двоичного кода

Диапазон 8-разрядных целых чисел, которые можно записать, пользуясь таким кодом, простирается от -127 до +127. Для 16-разрядного числа этот диапазон составит от -32767 до +32767. В 8-разрядном процессоре для хранения такого числа используются две ячейки памяти, расположенные в соседних адресах.

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