Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1560

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

Последний элемент микропроцессора, который не был рассмотрен, - ре­ гистр указатель стека (рис. 2). Указатель стека - специальный адресный ре­ гистр с форматом, соответствующим формату ША (16 бит), он использует­ ся для специального способа адресации памяти микропроцессорной систе­ мы. При стековой организации хранения данных всегда используется ад­ рес, содержащийся в указателе стека. Поэтому в явном виде в операциях со стеком адрес не указывается. Более подробно использование стека будет рассмотрено позднее.

1.2.Форматы данных микропроцессорной системы

Вмикропроцессорной системе (рис. 2) разрядность ШД и регистров данных - 8, поэтому способы кодирования данных будем рассматривать применительно к однобайтовому формату. Этот формат данных является достаточно типичным для микропроцессорных средств. Байт данных D обозначим, начиная со старших разрядов, следующим образом:

D=D7D6D5D4D3D2D,Do .

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

Для целых чисел без знака каждый бит D, имеет вес 2х в соответствии со стандартным двоичным кодированием, диапазон изменения чисел 0 - 255 (28-1). В текстах программ числа без знака можно указывать в десятичном формате (0 - 255), в двоичном формате (ОЬОООООООО - 0Ы1111111, Ob - стандартный признак двоичного формата) и шестнадцатеричном (hex) фор­ мате (0x00 - Oxff, Ox - стандартный признак hex-формата). В hex-формате для основания системы счисления 16 в дополнение к десятичным символам используют первые 6 букв латинского алфавита а, Ь, с, d, e, f. Наиболее функционален hex-формат, так как он лучше соответствует исходному дво­ ичному кодированию байта данных. Для hex-формата байт условно разби­ вается на две тетрады, а каждая тетрада записывается как отдельный hexсимвол.

Иногда применяют двоично-десятичное кодирование (упакованный bedформат) с кодированием двух десятичных символов в каждой тетраде. Для выполнения арифметических операций bed-формат неудобен, так как ре-

19


зультат формируется в двоичном формате и требуется его коррекция для восстановления исходного 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