В транзакции типа "Чтение" по шине сначала посылается в память адрес вместе с соответствующими сигналами управления, иницирующими чтение. Память отвечает, возвращая на шину данные с соответствующими сигналами управления. Транзакция типа "Запись" требует, чтобы ЦП или ВУ послало в память адрес и данные и не ожидает возврата данных. Обычно ЦП вынужден простаивать во время интервала между посылкой адреса и получением данных при выполнении чтения, но часто он не ожидает завершения операции при записи данных в память.
Используется единое адресное пространство ячеек памяти и внешних устройств; следовательно, все команды обработки данных процессора могут быть применены и к внешним устройствам. Общая шина является «узким местом» и снижает производительность и надежность машины.
4. Структура ВМ с шинной организацией показана на рис. 1.5.
Данная организация ВМ предложена для разгрузки шины, связывающей процессор с памятью, и как следствие – повышения производительности и надежности работы ВМ.
Рис.1.5
При такой организации используются различные магистрали для связи ЦП с памятью и с внешними устройствами. Соответственно, используются различные адресные пространства для обращения к памяти и ВУ. Это требует выделения специальной группы команд ввода- вывода в системе команд процессора:
ADD AX, 100 ; адресуется ячейка памяти 100
IN AX, 100 ; адресуется внешнее устройство с номером 100
Шина прямого доступа к памяти (ПДП) используется для связи ВУ и памяти без участия процессора.
Положительные числа во всех 3-х формах представляются одинаково «0&информационные разряды числа», где &-конкатенация (присоединение). Так, для 4-х -битных ЦЧ с диапазоном изменения [-8,7] число 5 будет иметь двоичное представление 0101. Представления отрицательных чисел различны.
Прямой код (ПК) отрицательного ЦЧ имеет вид «1&информационные разряды числа». Соответственно, число [-5] в ПК будет иметь вид [-5]пк = 1101.
Замечание: В прямом коде существуют: положительный ноль, равный 0000 и отрицательный ноль, равный 1000.
Обратный код (ОК) отрицательного ЦЧ имеет вид «1&инверсные значения информационных разрядов числа». Соответственно, число [-5] в ОК будет иметь вид [-5]ок = 1010. В ОК существуют: положительный ноль, равный 0000 и отрицательный ноль, равный 1111.
При работе с 16-ричными числами следует учитывать, что инверсные значения 16-ричных цифр имеют вид:
|
16-ричная цифра |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
инверсная цифра |
F |
E |
D |
C |
B |
A |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Дополнительный код (ДК) отрицательного ЦЧ имеет вид «обратный код числа +1». Соответственно, число [-5] в ДК будет иметь вид [-5]дк = 1011. В ДК существует только один ноль, равный 0000.
В настоящее время при алгебраическом сложении целых чисел доминирует использование ДК по следующим причинам:
ДК имеет единственное изображение нуля: +0 и 0 имеют вид 0…000;
При возникновении переноса из старшего разряда результата алгебраического сложения ЦЧ в ДК перенос просто отбрасывается, а для ОК он должен циклически прибавляться к младшему разряду результата, что увеличивает время выполнения операции;
Для преобразования числа длиной n разрядов в число с большей разрядностью в ДК достаточно выполнить распространение знака в новые разряды:
+5 для n = 4 в ДК имеет вид 0101, а для n = 8 имеет вид 00000101;
-5 для n = 4 в ДК имеет вид 1011, а для n = 8 имеет вид 11111011.
При выполнении сложения ЦЧ переполнение возникает только тогда, когда операнды имеют одинаковые знаки, а знак результата противоположный.
При выполнении операций умножения и деления используется представление ЦЧ в прямом коде.
Знак результата формируется как «исключающее ИЛИ» или «сумма по mod2» знаков операндов. Умножение выполняется следующим образом An * Bn = C2n . При этом переполнение не возникает. Деление выполняется следующим образом A2n / Bn = {C1n (n-битное частное) и C2n (n-битный остаток)}. Знак частного вычисляется как «сумма по mod2» знаков делимого и делителя, знак остатка равен знаку делимого. Переполнение фиксируется, если частное не размещается в n – разрядах при делении на 0 или если A > 2n * B.
При решении экономических задач часто возникает потребность в обработке десятичных чисел. Для этого используется их двоично-десятичное представление, при котором каждый десятичный разряд числа представляется двоичной тетрадой (4 битами) цифр с весами 8421. Значения тетрады 1010 ÷ 1111, соответсвующие 16-ричным цифрам A ÷ F, считаются запрещенными и их получение при сложении данных требует коррекции результата. Коррекция выполняется путем прибавления к результату так называемого «десятичного заполнителя» 610 = 01102 . Например, при сложении десятичных чисел 8 + 5 =13, представленных в двоично-десятичном формате имеем
1000 + 0101 = 1101 (запрещенный код) +0110 = 0001 0011 = 1310
Для выполнения такой коррекции в ВМ с архитектурой Intel X86 предусмотрены специальные команды типа DAA, исполняемые после обычной команды сложения ADD. Аналогичные корректирующие операции и команды предусмотрены для выполнения вычитания.
Вещественные числа (ВЧ) в компьютерах обычно представляются в форме с плавающей точкой в виде
N = m * S P , где S – основание СС, m – мантисса, P – порядок.
Такая форма позволяет, задавая различные значения m и P, получить разные представления одного и того же числа
N = 5.41 *100 = 0.541*101 = 541*10-2 = 0.00541*103
Для повышения точности ВЧ обычно используют их нормализованное представление, при котором на мантиссу накладывается ограничение 1/S ≤ m < 1 (представление N = 0.541*101 - нормализованное) .
Основные форматы представления ВЧ имеют следующие распределения двоичных разрядов (1 – 8 – 23) - короткий формат и (1 – 11–52) – длинный формат. Короткий формат поясняется ниже рисунком.
|
0 |
1 2 8 |
9 31 |
|||
|
Sm |
Sp |
P |
m |
||
|
|
порядок |
Мантисса |
|||
Здесь Sm – знак мантиссы или знак числа, Sp – знак порядка.
При использовании короткого формата имеем диапазон изменения ВЧ [ - Nmax, Nmax] , где
Nmax = 1* 2Pmax = 2128 = ( 210 )12.8 ( 103 )12.8 1038
При этом ошибка представления ВЧ, определяемая весом младшего разряда мантиссы, будет равна
= 2 -23 = ( 210 ) -2.3 ( 103 ) -2.3 10 -7 ,
то есть обеспечивается точность на уровне 7 десятичных разрядов.
Для длинного формата ВЧ соответственно получим диапазон [- 10308 , 10308 ] и точность - 17 десятичных разрядов.
В целом следует отметить, что форма представления ВЧ с плавающей точкой позволяет значительно увеличить диапазон обрабатываемых ВЧ за счет некоторой потери точности из-за того, что часть разрядов числа отводится под порядок.
Короткий формат при невысокой точности значений позволяет размещать в памяти большее число операндов и выполнять операции с небольшими затратами времени, а длинный формат обеспечивает возможность вычислений с повышенной точностью.
Выполнение операций алгебраического сложения над ВЧ состоит из трех этапов:
Выравнивание порядков операндов – выпоняется в сторону большего порядка: увеличение на 1 меньшего порядка сопровождается сдвигом на 1 раздряд вправо мантиссы числа с меньшим порядком; этот процесс продолжается пока порядки операндов не станут равны.
Суммирование мантисс – выполняется по правилам сложения целых чисел.
Нормализация результата.
При суммировании мантисс может произойти выход суммы за диапазон разрядной сетки, но это не переполнение, а нарушение нормализации влево. Оно происходит только на 1 разряд и исправляется сдвигом мантиссы на 1 разряд вправо и увеличением порядка на 1. Переполнение возникает только в случае, если перед этим Р = Рmax .
Нарушение нормализации вправо возникает при сложении близких по абсолютной величине чисел с разными знаками. При этом часть старших разрядов суммы принимает значения 0 (для положительной суммы) или 1 (для отрицательной суммы в ДК). Исправляется последовательным сдвигом мантиссы суммы на нужное число разрядов влево, сопровождающееся вычитанием 1 из порядка. Если при этом потребуется вычесть 1 из Р = ‒ Рmax , то возникает отрицательное переполнение, называемое «потерей значимости» и результат приравнивается к нулю.
При выполнении операций умножение или деление порядки операндов участвуют в алгебраическом сложении как целые числа (суммируются при умножении или вычитаются при делении), а мантиссы перемножаются или делятся также как целые числа. Считаем, что исходные операнды представлены в нормализованной форме. Тогда при умножении может возникнуть нарушение номализации вправо на 1 разряд, которое исправляется сдвигом мантиссы результата на 1 разряд влево и вычитанием 1 из порядка. Также при умножении может возикнуть переполнение, если Р1 + Р2 > Рmax или потеря значимости, если Р1 + Р2 < ‒ Рmax . При делении может возникнуть переполнение при нулевой мантиссе делителя или, если Р1 - Р2 > Рmax , а также потеря значимости при исправлении нарушения номализации влево или, если Р1 - Р2 < ‒ Рmax .