зультат формируется в двоичном формате и требуется его коррекция для восстановления исходного bed-формата. Диапазон чисел для однобайтово го bed-формата О - 99.
Для кодирования чисел со знаком применяются стандартные арифмети ческие коды. Старший разряд байта D7 становится битом знака числа, а ве личина числа определяется оставшимися 7 битами D0-D6.B дополнитель ном коде знак "+" соответствует нулевому знаковому биту, а знак "-" соот ветствует единичному знаковому биту. Величина числа в дополнительном коде для положительного и отрицательного числа формируется различны ми способами.
Для положительных чисел применяют обычное двоичное кодирование величины. Для отрицательных чисел формируют дополнение, т.е. инвер сию двоичного кода величины с прибавлением 1 младшего разряда (//VF(D6D5D4D3D2D1Do)+l) . Восстановление двоичного кода величины от рицательного числа также требует инверсии с прибавлением 1 младшего разряда. Диапазон однобайтовых чисел для дополнительного кода (-128) - (+127). Применение дополнительного кода позволяет использовать одни и те же арифметические операции для чисел без знака и чисел со знаком, так как знаковый бит преобразуется в этих операциях вместе с другими битами
чисел. |
|
|
|
|
Примеры однобайтового кодирования |
чисел приведены в табл. 1. |
|||
|
|
|
|
Таблица 1 |
двоичный код |
десятичный |
hex- |
bcd-формат |
десятичный |
байта дан |
формат |
формат |
(число без зна |
формат (чис |
ных |
(число без зна (число без |
ка) |
ло со знаком) |
|
|
ка) |
знака) |
|
|
ObOlOllOQl |
89 |
0x59 |
59 |
+ 89 |
ОЫ1011001 |
217 |
0xd9 |
недопустимый |
-39 |
|
|
|
символ в стар |
|
|
|
|
шей тетраде |
|
ОЬО1001011 |
75 |
0x4b |
недопустимый |
+ 75 |
|
|
|
символ в млад |
|
|
|
|
шей тетраде |
|
ОЫ00000И |
131 |
0x83 |
83 |
-125 |
В первом столбце примеров приведен двоичный код байта данных, в ос тальных столбцах - интерпретация этого байта для разных способов ко дирования.
20
При выполнении в микропроцессоре операции сложения байтов 1 и 2 получим:
01011001+11011001=00110010 с флагами Z=0, S=0, C=l, АС=1, Р=0.
•Для чисел без знака (89+217 или 0x59+0xd9) байт результата: 50
(0x32), а флаг переноса С=1 означает, что результат суммирования вышел за пределы однобайтового формата и этот флаг должен ин терпретироваться, как бит 9 (2s=256) суммы.
•Для чисел со знаком ((+89)+(-39)) байт результата положительный: +50, флаг переноса должен игнорироваться, как не имеющий значения
вэтом случае.
При выполнении в микропроцессоре операции сложения байтов 3 и 4 по лучим
01001011 + 10000011=11001 ПО с флагами Z=0, S=l, С=0, АС=0, Р=0.
•Для чисел без знака (75+131 или 0х4Ь+0х83) байт результата: 206
(Охсе), флаг переноса С=0 означает, что результат суммирования не вышел за пределы однобайтового формата, а флаг знака 5=/ просто повторяет значение старшего бита результата D7.
• Для чисел со знаком ((+75)+(-125)) байт результата отрицательный: - 50, флаг знака 5=7, повторяя значение D7, также является призна ком отрицательной суммы.
Конечно, однобайтовый формат дает весьма ограниченный диапазон из менения чисел. Если требуется расширить этот диапазон, необходимо пе реходить к двухбайтовому (многобайтовому) формату. Для преобразования многобайтовых чисел в системе команд микропроцессора существуют ко манды операций, которые учитывают при выполнении значение флага пе реноса С. Например, команда сложения add В производит суммирование байта аккумулятора (А8) и байта регистра В (А8=А8+В8) с формированием всех флагов. Модификация команды сложения adc В при суммировании добавляет сформированное ранее значение флага переноса С (А8=А8+В8+С) и формирует новые значения флагов.
В операциях над многобайтовыми числами преобразование всех млад ших байтов должно интерпретироваться, как операция над числами без знака, но с учетом значения флага переноса. Знак числа может присутство вать только в старшем бите самого старшего байта. Рассмотрим програм мную реализацию суммирования двухбайтовых чисел, интерпретация ре зультата, как было показано для однобайтового формата, зависит только от кодирования исходных данных.
21
Пусть двухбайтовые слагаемые находятся в регистровых парах ВС, DE (первый регистр каждой пары содержит старший байт); результат суммирования должен быть помещен в регистровую пару HL.
ml: |
mov |
А, С ; пересылка младшего байта слагаемого 1 |
|
|
|
; |
в аккумулятор (А8-=С8), |
т2: |
add |
E |
; суммирование младших байтов (А8=А8+Е8) |
|
|
; |
и формирование флагов, |
тЗ: mov |
L, А |
; пересылка младшего байта суммы |
|
|
|
; в регистр L (L8-A8), |
|
т4: |
mov |
А, В ; пересылка старшего байта слагаемого 1 |
|
;в аккумулятор (А8~В8), {примечание: команды пересылки значения сформированных ранее ; флагов не изменяют,
т5: |
adc |
D ; суммирование старших байтов и флага переноса, |
|
|
; сформированного при суммировании младших |
|
|
; байтов, (A8^A8+D8+C), |
тб: |
mov |
H, А ; пересылка старшего байта суммы |
; в регистр Н (В8=А8).
Как видно из примера, переход к двухбайтовому формату увеличивает объем программы, как минимум в два раза.
Для логических операций байт данных D должен интерпретироваться как однобайтовая логическая переменная, в которой каждый бит D, являет ся независимым элементом. Как правило, логические операции выполня ются побитно и также побитно формируют байт результата. Например, операция "логическое И" ana В выполняет побитную конъюнкцию содер жимого аккумулятора А и регистра В (А7=А7&В7, А6=А6&В6, . . .
А0=А0&В0), флаги S, Z, Р соответствуют байту результата в аккумуляторе, а флаги переноса - нулевые (С=АС==0), так как перенос не производится.
Операции логического сдвига могут выполнять побитовое смещение байта данных аккумулятора и в направлении старших разрядов (сдвиг вле во), и в направлении младших разрядов (сдвиг вправо). Значение флага пе реноса в операциях сдвига зависит от направления: при сдвиге влево - С=А7, при сдвиге вправо - ОА 0 . Использование флага переноса позволяет выполнять сдвиг многобайтовых переменных по алгоритмам, аналогичным алгоритмам арифметических операций над многобайтовыми числами.
Если байт данных при сдвиге интерпретировать как число без знака, сдвиг вправо эквивалентен делению числа на 2, а сдвиг влево - умножению на 2. Для чисел со знаком, так называемый арифметический сдвиг, при сдвиге необходимо обеспечить сохранение знака, т.е. старший (знаковый) бит числа при сдвиге должен быть неизменным.
22
Символьный формат данных в основном предназначен для текстовых сообщений. Специальных команд обработки символьных данных нет, они могут преобразоваться как числовые или логические переменные. Так как для ввода текстов или их отображения используются компьютерные сред ства, кодирование в символьном формате обычно производят стандартны ми компьютерными кодами. Таким стандартным символьным кодом одно байтового формата является, например, код ASCII. ASCII предназначен для кодирования всех символов, используемых на клавиатуре персонального компьютера. Например, символьной переменной 'А1 соответствует одно байтовый ASCII-код 0x41, символьной переменной 'к' - ASCII-код 0x6b, символьной переменной '2* - ASCII-код 0x32 и т.п. Полную таблицу кода ASCII можно найти в любой литературе, описывающей форматы компью терного кодирования данных.
Данные других форматов, кроме рассмотренных в данном разделе, также можно обрабатывать в микропроцессорной системе. При выборе алгорит мов преобразования необходимо учитывать, что система команд микро процессора содержит операции над числовыми и логическими переменны ми. Следовательно, операции преобразования данных других форматов не обходимо приводить к эквивалентным операциям, реализуемым в системе команд.
В целом, система команд и форматы данных микропроцессора являются универсальными средствами преобразования. Очевидно, что эффектив ность работы микропроцессорной системы в силу ограниченного набора команд различна для различных форматов данных. Поэтому применяемые форматы данных - весьма важный компонент реализуемых алгоритмов преобразования. Следующий важный элемент в организации работы мик ропроцессорной системы - процедуры адресации данных, именно адреса ция обеспечивает доступ к данным для алгоритмов преобразования.
1.3. Организация памяти и адресация данных
Запоминающие устройства (память) микропроцессорной системы по вы полняемым функциям и свойствам можно разделить на две области: опера тивное запоминающее устройство (RAM) и постоянное запоминающее уст ройство (ROM). В рассматриваемой структуре (рис. 2) эти области образу ют единое адресное пространство, и для них используется общая система адресации с 16 битами ША. В других вариантах микропроцессорных сис тем разные области памяти могут иметь самостоятельные системы адреса ции.
Для единого адресного пространства нет какого-либо начального разде ления функционального назначения областей памяти. Так называемая клас сическая архитектура компьютера предполагает возможность хранения и кодов программ, и данных для преобразования по любым адресам запоми нающих устройств. Запоминающие устройства в этом случае могут рас-
23
сматриваться как набор типовых ячеек памяти, каждая из которых позволя ет хранить один байт данных и имеет уникальный 16-битовый адрес, пере даваемый в микропроцессорной системе по ША. Уникальный адрес позво ляет выбрать для обмена данными одну ячейку памяти из всего множества ячеек запоминающих устройств и обеспечить доступ только к выбранному байту данных. Максимальный объем адресного пространства 216 ячеек па мяти (64 кбайт).
Оперативное запоминающее устройство (RAM) позволяет записывать однобайтовые данные для хранения и считывать записанные ранее данные. Направление передачи данных (микропроцессор —* RAM или RAM —> микропроцессор) определяется микропроцессором с помощью сигналов ШУ. Вместе с сигналами управления микропроцессор должен передать ад рес выбранной ячейки памяти по ША. Ячейки RAM должны обеспечивать запись данных, хранение данных и считывание хранящихся данных.
При работе микропроцессорной системы RAM позволяет выполнять все необходимые функции по хранению информации и, следовательно, являет ся обязательным элементом. Однако RAM производит хранение данных только при включенном питающем напряжении. При выключении питания все записанные данные будут потеряны и не могут быть восстановлены по вторным включением питания, т.е. RAM - память энергозависимая.
Как было показано ранее, в микропроцессорной системе все операции, в том числе и загрузка данных в память, выполняются программно. При от сутствии программы в памяти реализация каких-либо функций невозмож на. Эта особенность работы микропроцессорной системы требует постоян ного наличия программы в памяти, даже при отключении питания. RAM, как известно, такую возможность не обеспечивает, поэтому микропроцес сорная система обязательно содержит и постоянное запоминающее устрой ство - ROM.
ROM - память энергонезависимая, т.е. сохраняет записанные данные и при отключении питания. Другой ее особенностью является возможность только считывать данные при работе микропроцессорной системы. Стан дартные процедуры и сигналы управления не позволяют выполнять запись новых данных в ROM. Запись данных ROM выполняется специальными средствами и обычно называется программированием. Существуют ROM с однократным программированием данных, позволяющие выполнять запись только один раз, и репрограммируемые ROM, с возможностью многократ ной перезаписи данных (обычно с ограниченным количеством циклов пе резаписи).
Таким образом, данные в ROM должны быть записаны до начала работы микропроцессорной системы, а при включении - обеспечивать выполнение необходимых алгоритмов работы в соответствии с записанными кодами программы. ROM называют также памятью программ и констант, так как и
24