Вычислительные машины и системы

Вычислительные машины и системы

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

Пример непозиционной системы - римская система счисления. В вычислительной технике непозиционные системы не применяются.

Систему счисления называют позиционной , если одна и та же цифра может принимать различные численные значения в зависимости от номера разряда этой цифры в совокупности цифр, представляющих заданное число.

Пример такой системы - арабская десятичная система счисления. В позиционной системе счисления любое число записывается в виде последовательности цифр : A = + a m-1 a m-2 ... a k ... a 0 , a -1 ... a -l (I) Позиции, пронумерованные индексами k (-l ются разрядами числа. Сумма m+l соответствует количеству разрядов числа (m - число разрядов целой части числа, l - дробной части). Каждая цифра a k в записываемой последовательности может принимать одно из N возможных значений.

Количество различных цифр (N), используемых для изображения чисел в позиционной системе счисления, называется основанием системы счисления.

Основание N указывает, во сколько раз единица k+1 -го разряда больше единицы k -го разряда, а цифра a k соответствует количеству единиц k -го разряда, содержащихся в числе. Таким образом, число может быть представлено в виде суммы: (A) N = + (a m-1 N m-1 + a m-2 N m-2 +...+ a 0 + a -1 N -1 +...+ a -l N -l ) (II) Основание позиционной системы счисления определяет ее название. В вычислительной технике применяются двоичная, восьмеричная, десятичная и шестнадцатеричная системы. В дальнейшем, чтобы явно указать используемую систему счисления, будем заключать число в скобки и в индексе указывать основание системы счисления. - 2 - В двоичной системе счисления используются только две цифры: 0 и 1. Любое двоичное число может быть представлено в следующей форме : (A) 2 = + (a m-1 2 m-1 + a m-2 2 m-2 + ... + a 0 + a -1 2 -1 + ... + a -l 2 -l ) Например, двоичное число (10101,101) 2 = 1*2 4 +0*2 3 +1*2 2 +0*2+1+1*2 -1 +0*2 -2 +1*2 -3 = (21,625) 10 В восьмеричной системе счисления для записи чисел используется восемь цифр (0,1,2,3,4,5,6,7), а в шестнадцатеричной - шестнадцать (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). Таблица для перевода чисел из одной системы счисления в другую.

Двоичные Восьмеричные Десятичные Шестнадцатечисла числа числа ричные числа 0,0001 0,04 0,0625 0,1 0,001 0,1 0,125 0,2 0,01 0,2 0,25 0,4 0,1 0,4 0,5 0.8 1 1 1 1 10 2 2 2 11 3 3 3 100 4 4 4 101 5 5 5 110 6 6 6 111 7 7 7 1000 10 8 8 1001 11 9 9 1010 12 10 A 1011 13 11 B 1100 14 12 C 1101 15 13 D 1110 16 14 E 1111 17 15 F 10000 20 16 10 Для хранения и обработки данных в ЭВМ используется двоичная система, так как она требует наименьшего количества аппаратуры по сравнению с другими системами. Все остальные системы счисления применяются только для удобства пользователей. В двоичной системе очень просто выполняются арифметические и логические операции над числами. - 3 - Таблица сложения: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Таблица умножения: 0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1 Многоразрядные числа складываются, вычитаются, умножаются и делятся по тем же правилам, что и в десятичной системе счисления.

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

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

Значение первой целой части является первой цифрой после запятой переведенного числа. . - 4 - Пример перевода числа 30,6 из десятичной системы в двоичную: Перевод целой части Перевод дробной части Последовательное Остатки Целые части - Последовательное деление разряды переумножение веденной дроби 0, 6 X 2 30 / 2 0 15 / 2 1 1, 2 7 / 2 1 X 3 / 2 1 2 1 / 2 1 0 0, 4 X 2 0, 8 X 2 1, 6 Результат: 11110,1001 Если при переводе дробной части получается периодическая дробь, то производят округление, руководствуясь заданной точностью вычислений.

Пример перевода числа 111110,01 из двоичной системы в десятичную.

Перевод целой части Перевод дробной части 0, 0100 X 1010 _111110| _1010 . _1010 . |110 10, 1000 1011 X _1010 . 1010 10 101, 0000 Результат: 62,25 - 5 - Примечание 1: 1010 - основание десятичной системы счисления в двоичной записи.

Примечание 2: десятичные эквиваленты разрядов искомого числа находим по таблице. При переводе чисел из любой системы счисления в десятичную удобнее пользоваться непосредственно формулой (II): (775) 8 = 7*8 2 + 7*8 + 5 = (509) 10 Для осуществления автоматического перевода десятичных чисел в двоичную систему счисления необходимо вначале каким-то образом ввести их в машину, Для этой цели обычно используется двоично-десятичная запись чисел или представление этих чисел в кодах ASCII. При двоично-десятичной записи каждая цифра десятичного числа заменяется четырехзначным двоичным числом (тетрадой): (983,65) 10 = (1001 1000 0011, 0110 0101) 2-10 При записи чисел в кодах ASCII цифрам от 0 до 9 поставлены в соответствие восьмиразрядные двоичные коды от 00110000 до 00111001. ЭВМ, предназначенные для обработки экономической информации, например IBM AT, позволяют производить арифметические операции в десятичной системе счисления над числами, представленными в двоично-десятичных кодах и кодах ASCII. Шестнадцатеричная и восьмеричная системы счисления используются только программистами и операторами ЭВМ, так как представление чисел в этих системах более компактное, чем в двоичной, и перевод из этих систем в двоичную и обратно выполняется очень просто (основания этих систем представляют собой целую степень числа 2). Для перевода восьмеричного числа в двоичное достаточно каждый восьмеричный разряд представить тремя двоичными (триадой), а для перевода шестнадцатиричного числа - четырьмя (тетрадой): (376,51) 8 = (011 111 110, 101 001) 2 (1AF8) 16 = (0001 1010 1111 1000) 2 ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 2 ОСНОВЫ МАШИННОЙ АРИФМЕТИКИ Формы представления чисел в ЭВМ. Разряд двоичного числа представляется в ЭВМ некоторым техническим устройством, например, триггером, двум различным состояниям которого приписываются значения 0 и 1. Группа таких устройств, предназначенная для представления в машине многоразрядного числа, называется регистром.

Структура двоичного регистра, представляющего в машине n-разрядное слово: n-1 n-2 ... 1 0 Отдельные запоминающие элементы пронумерованы от 0 до n-1. Количество разрядов регистра определяет точность представления чисел. Путем соответствующего увеличения числа разрядов регистра может быть получена любая точность вычислений, однако это сопряжено с увеличением количества аппаратуры (в лучшем случае зависимость линейная, в худшем - квадратичная). В ЭВМ применяются две основные формы представления чисел: полулогарифмическая с плавающей запятой и естественная с фиксированным положением запятой. При представлении чисел с фиксированной запятой положение запятой закрепляется в определенном месте относительно разрядов числа и сохраняется неизменным для всех чисел, изображаемых в данной разрядной сетке.

Обычно запятая фиксируется перед старшим разрядом или после младшего. В первом случае в разрядной сетке могут быть представлены только числа, которые по модулю меньше 1, во втором - только целые числа. Для кодирования знака числа используется старший ('знаковый') разряд. При выполнении арифметических действий над правильными дробями могут получаться двоичные числа, по абсолютной величине больше или равные единице, что называется переполнением разрядной сетки. Для исключения возможности переполнения приходится масштабировать величины, участвующие в вычислениях.

Диапазон представления правильных двоичных дробей: 2 -(n-1) , (A) , 1 - 2 -(n-1) . . - 2 - Числа, которые по абсолютной величине меньше единицы младшего разряда разрядной сетки, называются машинным нулем . Диапазон представления целых двоичных чисел со знаком в n-разрядной сетке: 0 , (A) , 2 n-1 - 1 . Использование представления чисел с фиксированной запятой позволяет упростить схемы машины, повысить ее быстродействие, но представляет определенные трудности при программировании. В настоящее время представление чисел с фиксированной запятой используется как основное только в микроконтроллерах. В универсальных ЭВМ основным является представление чисел с плавающей запятой.

Представление числа с плавающей запятой в общем случае имеет вид: A = + m * N +p , где N - основание системы счисления, p - целое число, называемое порядком числа A, m - мантисса числа A ( m Так как в ЭВМ применяется двоичная система счисления, то A = + m * 2 +p ,. причем порядок и мантисса представлены в двоичной форме.

Двоичное число называется нормализованным, если его мантисса удовлетворяет неравенству 1/2 , m Неравенство показывает, что двоичное число является нормализованным, если в старшем разряде мантиссы стоит единица.

Например, число 0,110100*10 100 - нормализованное, а 0,001101*10 110 - ненормализованное.

Ситуация, когда в процессе вычислений получено число с m . 1 называется переполнением разрядной сетки.

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

Однако современные ЭВМ позволяют, при необходимости, выполнять операции также и над ненормализованными числами. . - 3 - Диапазон представления нормализованных двоичных чисел, взятых по абсолютному значению, удовлетворяет неравенству: 2 -1 * 2 -(2k-1) , (A) , (1 - 2 -l ) * 2 2k-1 , где l - число разрядов мантиссы; k - число разрядов порядка; 2 -1 - наименьшее значение нормализованной мантиссы; 1-2 -l - наибольшее значение нормализованной мантиссы.

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

Представление отрицательных чисел в ЭВМ. Для кодирования знака двоичного числа используется старший ('знаковый') разряд (ноль соответствует плюсу, единица - минусу). Такая форма представления числа называется прямым кодом . Формула для образования прямого кода правильной дроби имеет вид: 7( 2 A, если A . 0, [A] пр = * 2 1-A, если A 9 Примеры : A = 0,110111 --> [A] пр = 0,110111 A = -0,110111 --> [A] пр = 1 - (-0,110111) = 1,110111 Прямой код целого числа получается по формуле: 7( 2 A, если A . 0, [A] пр = * 2 10 n-1 - A, если A 79 где 10 - число 2 в двоичной системе счисления, n - количество позиций в разрядной сетке.

Например, при n=8 A = 110111 --> [A] пр = 00110111 A = -110111 --> [A] пр = 10000000 - (-110111) = 10110111 В ЭВМ прямой код применяется только для представления положительных двоичных чисел. Для представления отрицательных чисел. применяется либо дополнительный, либо обратный код, так как над - 4 - отрицательными числами в прямом коде неудобно выполнять арифметические операции.

Формула для образования дополнительного кода дроби: [A] доп = 10 + A. Формула для образования обратного кода дроби: [A] обр = 10 - 10 -(n-1) + A. Например, при n = 8, для A = -0,1100001 [A] доп = 10 + (-0,1100001) = 1,0011111 [A] обр = 10-10 -7 +(-0,1100001) = 1,1111111-0,1100001 = 1,0011110. Формула для образования дополнительного кода целого числа: [A] доп = 10 n + A. Формула для образования обратного кода целого числа: [A] обр = 10 n - 1 + A. Например, при n = 8, для A = -1100001 [A] доп = 100000000 + (-1100001) = 10011111 [A] обр = 100000000-1+(-1100001) = 11111111-1100001 = 10011110. Таким образом, правила для образования дополнительного и обратного кода состоят в следующем: - для образования дополнительного кода отрицательного числа необходимо в знаковом разряде поставить единицу, а все цифровые разряды инвертировать (заменить 1 на 0, а 0 - на 1), после чего прибавить 1 к младшему разряду; - для образования обратного кода отрицательного числа необходимо в знаковом разряде поставить единицу, а все цифровые разряды инвертировать.

Примечание: при данных преобразованиях нужно учитывать размер разрядной сетки.

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

Замена вычитания двоичных чисел A 1 - A 2 сложением с дополнениями [A 1 ] пр + [-A 2 ] доп или [A 1 ] пр + [-A 2 ] обр позволяет оперировать со знаковыми разрядами так же, как и с цифровыми. При этом перенос из старшего знакового разряда, если он возникает, учитывается по разному для обратного и дополнительного кодов: - при использовании дополнительного кода единица переноса из - 5 - знакового разряда отбрасывается; - при использовании обратного кода единица переноса из знакового разряда прибавляется к младшему разряду суммы (осуществляется так называемый циклический перенос). Пример: складываем числа A 1 =0,10010001 и A 2 =-0,01100110 При использовании обратного кода получим: [A 1 ] пр = 0,10010001 + [A 2 ] обр = 1,10011001 10,00101010 +1 Результат: 0,00101011 При использовании дополнительного кода получим: [A 1 ] пр = 0,10010001 + [A 2 ] доп = 1,10011010 Результат: 0,00101011 Если знаковый разряд результата равен нулю, то в получено положительное число, которое представлено в прямом коде. Если в знаковом разряде единица, то результат отрицательный и представлен в обратном или дополнительном коде. Для того, чтобы избежать ошибок при выполнении бинарных операций, перед переводом чисел в обратные и дополнительные коды необходимо выравнивать количество разрядов прямого кода операндов. При сложении чисел, меньших единицы, в машине быть получены числа, по абсолютной величине большие единицы. Для обнаружения переполнения разрядной сетки в ЭВМ применяются модифицированные прямой, обратный и дополнительный коды. В этих кодах знак кодируется двумя разрядами, причем знаку 'плюс' соответствует комбинация 00, а знаку 'минус' - комбинация 11. Правила сложения для модифицированных кодов те же, что и для обычных.

Единица переноса из старшего знакового разряда в модифицированном дополнительном коде отбрасывается, а в модифицированном обратном коде передается в младший цифровой разряд.

Признаком переполнения служит появление в знаковом разряде суммы комбинации 01 при сложении положительных чисел (положительное переполнение) или 10 при сложении отрицательных чисел (отрицательное переполнение). Старший знаковый разряд в этих случаях - 6 - содержит истинное значение знака суммы, а младший является старшей значащей цифрой числа. Для коррекции переполнения число нужно сдвинуть в разрядной сетке на один разряд вправо, а в освободившийся старший знаковый разряд поместить цифру, равную новому значению младшего знакового разряда. После корректировки переполнения мантиссы результата необходимо увеличить на единицу порядок результата. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 3 ОСНОВЫ МАШИННОЙ АРИФМЕТИКИ Формы представления чисел в ЭВМ (продолжение) Система вещественных чисел, применяемая при ручных вычислениях, предполагается бесконечной и непрерывной, т.е. не существует никаких ограничений на диапазон используемых чисел и точность их представления.

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

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

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

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

Операции над данными любого формата, который не поддерживается аппаратурой, выполняются очень медленно. Любой формат данных, который превышает размер регистров процессора, не пригоден для быстрых вычислений. Для представления целых чисел в ЭВМ обычно применяются 8-, 16-, 32- и 64-битовый стандартные форматы, причем интерпретация чисел как знаковых или беззнаковых обычно возлагается на программиста или на компиллятор с языка высокого уровня. . - 2 - Для представления чисел с плавающей запятой также существует несколько стандартных форматов, различающихся по точности, но имеющих одинаковую структуру следующего вида: n-1 n-2 0 ... ... смещенный модуль знак порядок мантиссы мантиссы Порядок p задается в так называемой смещенной форме: если для задания порядка выделено k разрядов, то к истинному значению порядка прибавляют смещение, равное (2 k-1 - 1). Использование смещенной формы позволяет производить операции над порядками, как над беззнаковыми числами, что упрощает операции сравнения, сложения и вычитания порядков. Кроме того, использование смещенного порядка упрощает операцию сравнения нормализованных чисел с плавающей запятой, сводя ее к операции сравнения целых чисел.

Следует отметить, что вещественный формат с m-разрядной мантиссой позволяет абсолютно точно представлять m-разрядные целые числа, т.е. любое двоичное целое число, содержащее не более m разрядов, может быть без искажений преобразовано в вещественный формат.

Форматы представления чисел в ПЭВМ IBM AT Рассмотрим стандартные и нестандартные форматы, используемые для представления чисел в ПЭВМ IBM AT. В дальнейшем будем использовать на диаграммах следующие обозначения: S - знаковый разряд; E - поле порядка; M - поле мантиссы; X - неиспользуемая область; D - цифра упакованного десятичного целого числа, представленная в двоично-десятичном коде.

Примечание: основной процессор эффективен только при операциях с целыми числами, разрядность которых не превышает разрядности его внутренних регистров; в остальных случаях более эффективен математический сопроцессор. . - 3 - Форматы представления двоичных целых чисел 1) 8-разрядное целое число без знака (поддерживается всеми процессорами серии 80x86) 7 0 2) 7-разрядное целое число со знаком (поддерживается всеми процессорами серии 80x86) 7 6 0 S 3) 16-разрядное целое число без знака (поддерживается всеми процессорами серии 80x86) 15 0 4) Word Integer (целое слово) - 15-разрядное целое число со знаком (поддерживается всеми процессорами серии 80x86 и математическим сопроцессором) 15 0 S 5) 32-разрядное целое число без знака (поддерживается всеми процессорами серии 80x86, но операции с этим форматом выполняются эффективно только 32-разрядными микропроцессорами, т.е. начиная с i386SX) 31 0 6) Short Integer (короткое целое) - 31-разрядное целое число со знаком (поддерживается всеми процессорами серии 80x86 и математическим сопроцессором, но операции с этим форматом выполняются эффективно только 32-разрядными микропроцессорами) . - 4 - 31 0 S 7) 64-разрядное целое число без знака (частично поддерживается 32-разрядными микропроцессорами) 64 0 8) Long Integer (длинное целое) - 63-разрядное целое число со знаком (поддерживается математическим сопроцессором и частично поддерживается 32-разрядными микропроцессорами) 64 0 S Форматы представления десятичных целых чисел 1) Неупакованное 1-разрядное десятичное целое число без знака в двоично-десятичном коде (поддерживается всеми процессорами серии 80x86) 7 4 3 0 0 0 0 0 D 2) 1-разрядное десятичное целое число без знака в коде ASCII (поддерживается всеми процессорами серии 80x86) 7 4 3 0 0 0 1 1 D 3) Packed Decimal - упакованное 2-разрядное десятичное целое без знака (поддерживается всеми процессорами серии 80x86) 7 4 3 0 D 1 D 0 4) Packed Binary Coded Decimal - упакованное 18-разрядное десятичное целое число со знаком (поддерживается математическим сопроцессором) - 5 - 79 0 S X D 17 D 16 ... D 1 D 0 Форматы представления вещественных чисел 1) Single Format (обычный формат) или Short Real (короткое вещественное) - короткое вещественное нормализованное число со знаком, 8-разрядным смещенным порядком и 24-разрядной мантиссой (так как старший бит мантиссы нормализованного числа всегда равен 1, то он не хранится в памяти, и размер поля, выделенного для хранения мантиссы, составляет только 23 разряда). 31 30 23 22 0 S E M 2) Double Format(двойной формат) или Long Real (длинное вещественное) - длинное вещественное нормализованное число со знаком, 11-разрядным смещенным порядком и 53-разрядной мантиссой (так как старший бит мантиссы нормализованного числа всегда равен 1, то он не хранится в памяти, и размер поля, выделенного для хранения мантиссы, составляет только 52 разряда). 63 62 52 51 0 S E M 3) Extended Format (расширенный формат) или Single Extended (обычный расширенный формат) - вещественное число в расширенном формате со знаком, 15-разрядным смещенным порядком и 64-разрядной мантиссой. Этот формат позволяет хранить ненормализованные числа и соответствует стандарту IEEE 754. 79 78 64 63 0 S E M ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 4 ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ПОСТРОЕНИЯ УЗЛОВ ЭВМ Физические формы представления информации Вся информация в ЭВМ кодируется совокупностью цифр. В свою очередь цифры отображаются квантованными по двум уровням сигналами.

Следует отметить, что в цифровых устройствах сигналы изменяются не непрерывно, а в дискретные моменты времени, обозначаемые целыми числами (t = 0, 1, ... n). Временной интервал между соседними моментами дискретного времени называется тактом . Эти интервалы являются одинаковыми для синхронных устройств и неодинаковыми для асинхронных устройств. На физическом уровне сигналы могут быть представлены одним из трех основных способов: потенциальным, импульсным или динамическим. При потенциальном способе 0 соответствует низкий уровень напряжения, а 1 - высокий.

Потенциальный сигнал характеризуется амплитудами низкого (U 0 ) и высокого (U 1 ) уровней напряжения, а также временами нарастания и спада сигнала, которые именуются передним (t п ) и задним (t з ) фронтами соответственно. При импульсном способе 0 и 1 соответствуют импульсы различной полярности, либо 0 соответствует отсутствие, а 1 - наличие импульса.

Импульсный сигнал характеризуется амплитудой импульса U m , шириной (продолжительностью импульса по основанию) t и , и передним t п и задним t з фронтами импульса. В идеальном случае импульсные сигналы должны появляться в тактовые моменты. В действительности имеет место запаздывание импульсного сигнала относительно тактового момента на время t . При динамическом способе представления информации двум возможным значениям переменной соответствует наличие либо отсутствие серии импульсов. В электронных схемах и устройствах, входящих в состав ЭВМ, применяется потенциальный способ представления информации, а для передачи информации между ЭВМ, а также при работе с магнитными носителями информации применяются импульсный и динамический способы.

Математические модели схем ЭВМ Наиболее общей моделью любой схемы, узла или устройства ЭВМ является многополюсный черный ящик с l входами и m выходами. На входы модели поступают, а на выходах появляются сигналы, квантованные по двум уровням. . - 2 - x 1 y 1 x 2 y 2 . Черный . . ящик . . . x l y m где x i (i = 1, 2, ..., l) - входные сигналы, y j (j = 1, 2, ..., m) - выходные сигналы.

Множество значений, которые может принимать переменная x i , называют алфавитом переменной x i . В современных ЭВМ алфавит входных и выходных сигналов состоит из двух букв: 0 и 1. На входы модели поступают в каждый тактовый момент упорядоченные наборы букв, называемые словами . Множество всех допустимых наборов слов называется входным алфавитом X данной схемы.

Аналогично множество всех допустимых комбинаций, образуемых выходными сигналами, называется выходным алфавитом Y. Математические модели отражают зависимость между входными и выходными переменными схемы посредством системы уравнений: y j (t) = f{x 1 (t),x 2 (t)...,x l (t), q 1 (t),q 2 (t),,...,q s (t)} (I) где j = 1,2,...,m, а переменные q 1 ,q 2 ,...,q s отражают внутренние состояния схемы. Если переменные y i не зависят от внутреннего состояния схемы, то одинаковым наборам входных переменных соответствует один и тот же набор выходных переменных. Такие схемы называются комбинационными . При этом система уравнений может быть записана в виде: y j (t) = f{x 1 (t),x 2 (t)...,x l (t)}, где j = 1,2,...,m. (II) Функции такого вида могут принимать только конечное число значений, и зависят от аргументов, также принимающих конечное число значений. Такие функции называются переключательными . В дальнейшем мы будем рассматривать переключательные функции, которые могут принимать только два значения - 0 и 1, и аргументы которых также могут принимать только одно из этих двух значений. Такие переключательные функции получили название булевых функций . Если выходные переменные y i (t) зависят не только от входных переменных, но и от внутреннего состояния схемы, то для полного ее описания необходимо указать еще одну систему уравнений: - 3 - q n (t+1) = f {x 1 (t),x 2 (t)...,x l (t), q 1 (t),q 2 (t),,...,q s (t)}, (III) где n = 1,2,...,s. Эта система отражает зависимость внутреннего состояния схемы в (t+1) такте от ее состояния и входных сигналов в такте t. Схемы, описываемые уравнениями I и III, получили название цифровых автоматов . Для задания цифрового автомата должны быть указаны: 1) входной алфавит слов X; 2) выходной алфавит слов Y; 3) алфавит внутренних состояний Q; 4) начальное состояние автомата q 0 ; 5) функция переходов A(q,x); 6) функция выходов B(q,x). Функция переходов определяет зависимость состояния автомата q(t+1) в момент времени t+1 от состояния автомата q(t) и входного сигнала x(t) в момент t. Функция выходов определяет зависимость выходного сигнала y(t) от состояния автомата q(t) и входного сигнала x(t). Автомат, описываемый системой уравнений ( 2 q(t+1) = A{q(t),x(t)}, * 2 y(t) = B{q(t),x(t)} 9 называется автоматом Мили . Автомат, выходной сигнал которого y(t) в тактовый момент t зависит только от состояния автомата q(t) и не зависит от входного сигнала, называется автоматом Мура и описывается системой: ( 2 q(t+1) = A{q(t),x(t)}, * 2 y(t) = B{q(t)}. 9 ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 5 ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ПОСТРОЕНИЯ УЗЛОВ ЭВМ Если для двух любых состояний q i и q j автомата имеется входной сигнал, переводящий автомат из состояния q i в q j , то такой автомат называется автоматом с полной системой переходов . Автомат Мура имеет полную систему выходов , если выходные сигналы различны для всех его состояний. При построении схем ЭВМ в качестве элементов памяти используются элементарные автоматы.

Элементарный автомат - это автомат Мура с двумя внутренними состояниями, двумя различными выходными сигналами и несколькими входами, обладающий полными системами переходов и выходов. ТЕОРИЯ БУЛЕВЫХ ФУНКЦИЙ Булевыми функциями называют переключательные функции, которые так же, как и их аргументы, принимают только два значения: 0 и 1. Булевы функции могут быть заданы в виде формул или таблиц.

Формулы позволяют представлять функции в более компактном виде, чем таблицы, так как таблица для функции от n аргументов будет содержать 2 n строк (или столбцов, в зависимости от формы таблицы). С другой стороны, таблицы дают наглядное представление для простых функций.

Приведем в качестве примера наиболее часто встречающиеся функции от одной и двух переменных: 1) Переменная x: f(x) = x 2) Инверсия переменной x (функция НЕ): _ f(x) = x 3) Константа нуля: f(x) = 0 4) Константа единицы: f(x) = 1 . - 2 - 5) Дизъюнкция (функция ИЛИ): f(x 1 ,x 2 ) = x 1 V x 2 Может встречаться другое обозначение: f(x 1 ,x 2 ) = x 1 | x 2 . Таблица истинности (соответствия) для этой функции имеет вид: x 1 x 2 x 1 V x 2 0 0 0 0 1 1 1 0 1 1 1 1 6) Конъюнкция (функция И): f(x 1 ,x 2 ) = x 1 . x 2 Может встречаться другое обозначение: f(x 1 ,x 2 ) = x 1 & x 2 . Таблица истинности для этой функции имеет вид: x 1 x 2 x 1 . x 2 0 0 0 0 1 0 1 0 0 1 1 1 7) Функция ИЛИ-НЕ: _______ f(x 1 ,x 2 ) = x 1 V x 2 Таблица истинности для этой функции имеет вид: x 1 x 2 x 1 V x 2 0 0 1 0 1 0 1 0 0 1 1 0 . - 3 - 8) Функция И-НЕ: _______ f(x 1 ,x 2 ) = x 1 . x 2 Таблица истинности для этой функции имеет вид: x 1 x 2 x 1 V x 2 0 0 0 0 1 1 1 0 1 1 1 1 9) Функция ИСКЛЮЧАЮЩЕЕ ИЛИ (сумма по модулю 2): f(x 1 ,x 2 ) = mod2(x 1 ,x 2 ) Таблица истинности для этой функции имеет вид: x 1 x 2 mod2(x1,x2) 0 0 0 0 1 1 1 0 1 1 1 0 Аксиомы алгебры логики В алгебре логики определено отношение эквивалентности (=) и три операции: дизъюнкция, конъюнкция и отрицание.

Отношение эквивалентности удовлетворяет следующим свойствам: x=x - рефлексивность; если x=y, то y=x - симметричность; если x=y и y=z, то x=z - транзитивность. Из отношения эквивалентности следует принцип подстановки : если x=y, то в любой формуле, содержащей x, вместо x можно подставить y, и будет получена эквивалентная формула.

Алгебра логики определяется следующей системой аксиом: x = 0, если x - 1 ) 8 (1) x = 1, если x - 0 0 1 V 1 = 1 ) 8 (2) 0 . 0 = 0 0 - 4 - 0 V 0 = 0 ) 8 (3) 1 . 1 = 1 0 0 V 1 = 1 V 0 = 1 ) 8 (4) 0 . 1 = 1 . 0 = 0 0 _ 0 = 1 ) _ 8 (5) 1 = 0 0 Аксиома (1) утверждает, что в алгебре логики рассматриваются только двоичные переменные, аксиомы (2)-(4) определяют операции конъюнкции и дизъюнкции, а аксиома 5 - операцию отрицания. Если в аксиомах (2)-(5), заданных парами утверждений, произвести взаимную замену операций дизъюнкции и конъюнкции, а также элементов 0 и 1, то из одного утверждения пары будет получено другое. Это свойство называется принципом двойственности.

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

Методом перебора можно убедиться в справедливости следующих теорем: идемпотентные законы x V x = x ) 8 x . x = x 0 коммутативные законы x V y = y V x ) 8 x . y = y . x 0 ассоциативные законы (x V y) V z = x V (y V z) ) 8 (x . y) . z = x . (y . z) 0 . - 5 - дистрибутивные законы x . (y V z) = x . y V x . z ) 8 x V y . 0 z = (x V y) . (x V z) 0 законы отрицания _ x V x = 1 ) _ 8 x . x = 0 0 0 V x = x ) 8 1 . x = x 0 1 V x = 1 ) 8 0 . x = 0 0 законы двойственности (теоремы де Моргана) 4_____ _ _ x V y = x . y ) _____ _ _ 8 x . y = x V y 0 закон двойного отрицания _____ ( _ ) 2 x 2 = x 9 0 законы поглощения x V x . y = x ) 8 x . (x V y) = x 0 операции склеивания _ x . y V x . y = x ) _ 8 (x V y) . (x V y) = x 0 операции обобщенного склеивания _ _ x . y V x . 0z V y . z = x . y V x . z ) _ _ 8 (x V y) . (x V z) . (y V z) = (x V y) . (x V z) 0 _ x V x . y = x V y ) _ 8 x . (x V y) = x . 0 y 0 ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 6 МЕТОДЫ УПРОЩЕНИЯ (МИНИМИЗАЦИИ) БУЛЕВЫХ ФУНКЦИЙ Сложные булевы функции могут быть построены из более простых.

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

Система элементарных функций f 1 , ..., f k называется функционально полной, если любую сложную булеву функцию можно записать в виде формулы через функции f 1 , ..., f k . Так, любую функцию можно представить с помощью одних только операций И-НЕ или только операций ИЛИ-НЕ. В цифровых устройствах часто применяется в качестве базовой система из трех функций: И, ИЛИ и НЕ. Используя законы алгебры логики, можно упрощать сложные логические выражения.

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

Рассмотрим функцию _________ ( _ ) _ f(a,b.c) = a . 2 b V a . c 2 V a . b 9 0 Используя законы алгебры логики, можно привести эту функцию к виду : _ _ _ _ __ _ _ _ f(a,b.c) = a . (b . (a V c)) V a . b = ab V abc V ab = ab V ab 4применяем применяем законы де Моргана закон поглощения Одной и той же логической функции может быть поставлено в соответствие неограниченное количество различных эквивалентных формул.

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

Элементарной конъюнкцией Q называется логическое произведение переменных и их отрицаний, причем каждая переменная должна встречаться в произведении только один раз. . - 2 - _ _ Пример элементарной конъюнкции: Q = x 1 x 2 x 3 x 4 x 6 . Аналогично элементарной дизъюнкцией В называется логическая сумма переменных и их отрицаний, причем каждая переменная должна встречаться в сумме только один раз. _ Пример элементарной дизъюнкции: D = x 1 V x 3 V x 4 . Формула, эквивалентная заданной и представляющая собой логическую сумму элементарных конъюнкций, называется дизъюнктивной нормальной формой (ДНФ) заданной формулы.

Дизъюнктивная нормальная форма существует для любой логической функции.

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

Например, для функции _________ ( _ ) _ f(a,b.c) = a . 2 b V a . c 2 V a . b 9 0 ДНФ будет иметь вид _ _ f(a,b.c) = ab V ab, КНФ будет иметь вид 4_ _ f(a,b.c) = (a V b)(b V c). Одна и та же функция путем эквивалентных преобразований может быть представлена различными КНФ и ДНФ. Из всей совокупности нормальных форм, представляющих данную функцию, выделяют одну КНФ и одну ДНФ, именуемые совершенными.

Минтермом (m) n аргументов называется логическое произведение этих аргументов, причем каждый аргумент может входить в произведение в прямой или инверсной форме.

Минтермы могут быть пронумерованы, причем номер минтерма определяется как десятичный эквивалент двоичного числа, образованного из значений переменных, входящих в данный набор: если переменная входит в прямой форме, то ей соответствует единица, если в инверсной - ноль.

Макстермом (M) n аргументов называется логическая сумма этих аргументов, причем каждый аргумент может входить в сумму в прямой или инверсной форме. Номер макстерма задается аналогично номеру минтерма. . - 3 - Рассмотрим в качестве примера случай двух аргументов: a b минтерм макстерм _ _ _ _ 0 0 m 0 = a . 0b M 0 = a V b _ _ 0 1 m 1 = a . b M 1 = a V b _ _ 1 0 m 2 = a . b M 2 = a V b 1 1 m 3 = a . b M 3 = a V b Минтермы и макстермы можно геометрически представить на картах (диаграммах) Вейча. Так, для двух переменных карта Вейча будет представлять собой квадрат, причем левая половина квадрата определяется переменной a, а верхняя половина квадрата - переменной b. Это означает, что левая _ половина квадрата соответствует значению переменной a, правая - a, верхняя половина соответствует _ b, нижняя b. Карта Вейча для двух переменных: _ a a _ b a . b a . b _ _ _ _ b a . b a . b . - 4 - Карта Вейча для трех переменных: _ a a _ _ _ _ b a . b . c a . b . c a . b . c a . b . c _ _ _ _ _ _ _ _ _ b a . b . c a . b . c a . b . c a . b . c _ _ c c c Свойства минтермов и макстермов: 1) Минтерм является инверсией некоторого макстерма и наоборот : _ m i = M 2 n -1-i _ M i = m 2 n -1-i _ Пример: m 1 = M 2 (заштрихованная площадь соответствует макстерму, незаштрихованная - минтерму). 2) Логическая сумма всех минтермов для любого заданного числа переменных равна 1. 2 n -1 V m i = 1. i=0 3) Логическое произведение всех макстермов для любого заданного числа переменных равно 0. 2 n -1 L M i = 0. i=0 - 5 - 4) Два неодинаковых минтерма или макстерма имеют хотя бы одну переменную, входящую в один из них в прямой, а в другой - в инверсной форме, следовательно m i . m j = 0, если i - j; M i V M j = 1, если i - j. 2Основная теорема алгебры логики : любую булеву функцию от n переменных можно выразить логической суммой минтермов, которая называется совершенной нормальной дизъюнктивной формой , или логическим произведением макстермов, которое называется совершенной нормальной конъюнктивной формой . Логические функции отражают не только принцип работы некоторых частей ЭВМ, но и их состав, если каждой элементарной функции соответствует реальный физический элемент. Любая сложная логическая функция может быть реализована некоторой частью ЭВМ, если эта часть построена с помощью такого набора элементов, который реализует все функции одной из функционально полных систем. Такой набор называется функционально полным набором логических элементов Поскольку каждая функция может быть представлена в виде различных логических уравнений, каждая функция может быть реализована при помощи различных логических схем.

Очевидно, что более простому логическому уравнению соответствует более простая схема.

Упрощение (минимизация) функции сводится к получению ее минимальной дизъюнктивной или конъюнктивной нормальной формы, т.е. такой формы, при которой функция содержит наименьшее число переменных и знаков логических операций.

Существует несколько методов минимизации. В дальнейшем мы рассмотрим метод непосредственных преобразований и метод диаграмм Вейча. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 7 МЕТОДЫ МИНИМИЗАЦИИ БУЛЕВЫХ ФУНКЦИЙ Метод непосредственных преобразований Суть данного метода заключается в том, что минимизация исходной логической функции производится путем применения к отдельным членам или группам членов формулы, выражающей данную логическую функцию, основных законов алгебры логики с целью получения минимальной формы функции, т.е. такой, которая не содержит лишних переменных или членов.

Лишними переменными или членами являются те, которые не влияют на значение преобразуемой формулы.

Пример: _ _ x 1 . x 2 . x 3 V x 1 . x 2 . x 3 = x 2 . x 3 . (x 1 V x 1 ) = x 2 . x 3 . 1 = x 2 . x 3 т.е. в исходной формуле лишней являлась двоичная переменная x 1 . Примечание: произведенная операция называется 'склеиванием' членов формулы.

Действия, отвечающие методу непосредственных преобразований, обычно проводятся в следующем порядке: 1) Выявляются группы двоичных переменных исходной формулы, к которым можно применить операцию склеивания или другие законы алгебры логики, приводящие выражение к более простой форме. 2) Упрощение исходной формулы путем применения к выявленным группам соответствующих законов. 3) Преобразование промежуточной логической формулы с целью образования таких групп переменных, к которым можно применить упрощающие законы алгебры логики. Здесь могут проводиться: - группирование членов; - действия по раскрытию скобок и выносу за скобки; - добавление фиктивных членов, т.е. таких, совокупность которых тождественно равна нулю; - логическое умножение одного или нескольких членов на логическую сумму переменной и ее отрицания. 4) Упрощение преобразованной промежуточной логической формулы с получением формы, близкой к минимальной, в виде некоторой ДНФ. 5) Выявление и удаление из полученной предварительной формы лишних членов, что дает минимальную форму исходной логической функции. В качестве примера рассмотрим минимизацию следующей функции: 4_ _ _ _ f(a,b,c) = ab V bc V bc V ab = - 2 - (используем метод умножения всех членов формулы на сумму тех переменных и их отрицаний, которые отсутствуют в данном члене;) 4_ _ _ _ _ _ _ _ = ab(cVc) V bc(aVa) V bc(aVa) V ab(cVc) = (в результате, отбросив повторяющиеся члены, получаем СДНФ функции;) _ __ _ _ _ _ __ _ _ _ = abc V abc V abc V abc V abc V abc V abc V abc = _ __ _ _ _ __ _ = abc V abc V abc V abc V abc V abc = (перегруппировываем члены с целью их упрощения) 4_ _ _ _ _ _ = b c (aVa) V ab(cVc) V ac(bVb) = (окончательно получим) _ _ _ = bc V ab V ac. Однако группирование членов после умножения можно провести и несколько иначе: _ _ _ _ _ _ _ _ _ f(a,b,c) = ab(cVc) V bc(aVa) V ac(bVb) = ab V bc V ac. Следовательно, данная функция имеет две минимальные формы.

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

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

Однако метод удобен для упрощения функций, зависящих от небольшого числа переменных (до 8). Преимущество этого метода состоит в том, что нет необходимости приводить функцию к СДНФ. Рассмотрим изображение на карте Вейча функции 4__ _ _ _ __ _ __ _ f(a,b,c,d) = cd V abd V abc V abcd V abcd V bcd - 3 - При нанесении заданной функции на карту никаких предварительных преобразований не проводится.

Каждый дизъюнктивный член рассматривается в отдельности, и в соответствующие ему квадратики вписывается 1 (т.е. дизъюнктивный член развертывается до минтермов). Например, нанесение на карту вейча заданной функции выполняется в следующей последовательности: a _1 . _1 . _1 . _1 . 1 1 1 _1 . b _1 . d _1 . _1 . 1 1 1 1 __ c __ _ __ _ _ _ cd cd V abd cd V abd V abc 1 1 1 1 1 1 1 1 1 1 1 1 _1 . 1 _1 . _1 . 1 _1 . 1 1 1 1 1 1 1 __ _ _ _ __ _ _ _ __ _ _ _ cd V abd V abc V cd V abd V abc V cd V abd V abc V __ _ __ _ __ __ _ __ V abcd V abcd V abcd V abcd V abcd V bcd Следующий шаг заключается в нахождении на карте простых импликант, т.е. в склеивании минтермов.

Нахождение простых импликант является результатом последовательного применения теоремы: 4_ x 1 x 2 x 3 ...x n V x 1 x 2 x 3 ...x n = x 2 x 3 ...x n Нахождение простых импликант производится на картах путем группировки минтермов, отмеченных единицей.

Рассмотрим правила группировки на диаграмме для четырех переменных, учитывая, что их легко обобщить на случай для любого - 4 - числа переменных.

Группирование выполняется в следующем порядке: а) группа из восьми членов может быть представлена одной переменной, если две смежные строки, либо два смежных столбца, либо две крайние строки, либо два крайних столбца, соответствующих этой переменной, заполнены единицами; б) группа из четырех членов может быть представлена посредством двух переменных всякий раз, когда единицами заполнены: - строка диаграммы, - столбец диаграммы, - квадрат из двух строк и двух столбцов, - концы двух смежных строк, - концы двух смежных столбцов, - четыре угла диаграммы; в) группа из двух членов может быть представлена посредством трех переменных всякий раз, когда единицами заполнены: - два смежных квадратика, - два противоположных конца одной строки, - два противоположных конца одного столбца. При группировке единиц на диаграмме необходимо попытаться сначала образовать члены, содержащие одну переменную, затем члены, содержащие две переменные, и, наконец, члены, содержащие три переменные. Один и тот же минтерм может входить несколько раз в выражение функции, не изменяя ее значения.

Поэтому единицу или группу единиц можно несколько раз включать в различные комбинации. В нашем случае минимизированная функция будет иметь вид: 4__ _ _ _ _ _ ___ f(a,b,c,d) = cd V abd V abc V abd V bcd V abd. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 8 МЕТОДЫ МИНИМИЗАЦИИ БУЛЕВЫХ ФУНКЦИЙ (окончание) Обычно для проверки правильности результата, полученного с помощью одного из методов минимизации, либо используют другой метод (хотя при наличии у функции нескольких минимальных форм могут быть получены несовпадающие результаты), либо проверяют на тождественность исходную и минимальную формы методом перебора всех возможных комбинаций значений переменных (однако уже для 20 переменных число возможных комбинаций превышает миллион). В качестве примера проведем минимизацию рассматривавшейся ранее функции _ _ _ _ f(a,b,c) = ab V bc V bc V ab с помощью карты Вейча. Как видно из диаграммы, возможны две минимальные дизъюнктивные формы: a b 1 _1 . _1 . 1 1 1 c _ _ _ f(a,b,c) = ac V ab V bc a b _1 . 1 _1 . 1 1 1 c _ _ _ f(a,b,c) = bc V ac V ab . - 2 - ЭЛЕМЕНТЫ И УЗЛЫ ЭВМ ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ Системой элементов ЭВМ называется функционально полный набор логических элементов, использующий одинаковый способ представления информации и одинаковый тип межэлементных связей.

Система элементов чаще всего избыточна по своему составу, что позволяет строить схемы с более простой топологией межэлементных связей и более экономные по количеству используемых элементов.

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

Примечание: в современных ЭВМ применяются потенциальные и динамические элементы. 2) По функциональному назначению элементы принято разделять на типовые и элементы специального назначения . К типовым относятся логические, запоминающие и формирующие элементы.

Логические элементы предназначены для преобразования информации, запоминающие - для ее хранения, а формирующие элементы - для восстановления стандартизированных значений физических параметров сигналов, изменяющихся во время прохождения сигналов по электрическим цепям. К элементам специального назначения относятся усилители слабых сигналов, генераторы токов и напряжений специальной формы и другие элементы, не изменяющие информационного содержания сигналов. 3) В зависимости от используемых физических явлений логические элементы подразделяются на полупроводниковые, магнитополупроводниковые, электромагнитные и др.

Основные характеристики логических элементов Общие технические характеристики: - температурный диапазон, - надежность, - стоимость.

Специфические характеристики: - функциональные возможности элемента, - нагрузочная способность, - быстродействие, - 3 - - помехоустойчивость, - потребляемая мощность.

Функциональные возможности логического элемента характеризуются выполняемой им операцией и коэффициентами разветвления и объединения, т.е. факторами, влияющими на структуры более сложных схем, построенных с применением данного элемента. При этом под коэффициентом разветвления n понимают число входов последующих ячеек, которые могут управляться от выхода данной ячейки, а под коэффициентом объединения m - число входов, которое может иметь ячейка.

Величины m и n ограничиваются условиями сохранения нормального электрического режима ячейки.

Нагрузочная способность в общем случае определяется током, который может быть отдан ячейкой во внешние цепи (нагрузку). В случае однородных нагрузок, создаваемых входами идентичных ячеек, нагрузочная способность оценивается коэффициентом разветвления n. Быстродействие логического элемента определяется скоростями его перехода из состояния '0' в состояние '1' и обратно.

Переходные процессы изменения состояния элемента состоят из двух этапов: задержки и формирования фронта или спада сигнала.

Длительность задержек и фронтов зависит от динамических свойств логического элемента.

Однако для оценки быстродействия часто используют обобщенную характеристику - среднее время задержки . В этом случае моментом поступления сигнала на ячейку считают момент достижения входным сигналом некоторого определенного уровня (например, 0,5 от установившегося значения). Моментом появления сигнала на выходе также считают момент достижения выходным сигналом этого уровня. Так как длительности переходных процессов при включении и выключении транзистора в общем случае не равны, то проводят обобщение и говорят о среднем времени задержки сигнала на ячейку. Время задержки при формировании спада t сп t ' з = t з.сп + , 2 а время задержки при формировании фронта t фр t ' з = t з.фр + . 2 Среднее время задержки на один каскад схемы t ' з + t ' з t з.ср = . 2 - 4 - Одна из важнейших характеристик элемента - его помехоустойчивость . Различают статическую и динамическую помехоустойчивость. При определении статической помехоустойчивости помеха рассматривается как длительно действующий уровень потенциала, а при определении динамической помехоустойчивости - как импульс определенной длительности.

Устойчивость элемента к воздействию длительной помехи меньше, чем к воздействию кратковременной помехи при одинаковых амплитудах.

Устойчивость к воздействию динамической помехи тем ниже, чем выше быстродействие элемента. С увеличением степени интеграции элементов ЭВМ все большую роль начинает играть такой параметр, как рассеиваемая мощность . Следует отметить, что закрытому состоянию соответствует один уровень рассеивания мощности (P з ), а открытому - другой (P о ). Обычно предполагают, что схема половину времени находится в открытом состоянии, а половину - в закрытом, и определяют среднюю рассеиваемую мощность следующим образом: P з + P о P ср = . 2 Рассеиваемая мощность может зависеть как от нагрузки, так и от схем, включенных на входе.

Классификация логических элементов по типу радиокомпонентов, на которых реализуются логические функции . Можно выделить следующие наиболее часто употребляемые на данный момент типы логических элементов: - транзисторно-транзисторная логика с диодами Шотки (ТТЛШ); - КМОП-логика (логика на базе комплементарных полевых транзисторов со структурой металл-окисел-полупроводник); - КМДП-логика (логика на базе комплементарных полевых транзисторов со структурой металл-диэлектрик-полупроводник); - интегральная инжекционная логика (ИИЛ, И 2 Л, I 2 L). Следует отметить также некоторые типы элементов, которые в данный момент уже не применяются в новых разработках вследствие низкого быстродействия или большой рассеиваемой мощности. - резисторно-транзисторная логика (РТЛ, RTL); - резисторно - конденсаторная транзисторная логика (РКТЛ, RCTL); - диодно-транзисторная логика (ДТЛ, DTL); - транзисторно-транзисторная логика (ТТЛ, TTL); - транзисторная логика с эмиттерными связями (ЭСЛ, TECL). - транзисторная логика с непосредственными связями (DCTL). - МОП-логика; - МДП-логика (MDS). ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 9 ЭЛЕМЕНТЫ И УЗЛЫ ЭВМ ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ Электронную схему, выполняющую какие либо операции над одним машинным словом, называют узлом ЭВМ. Многие узлы ЭВМ строятся на базе логических элементов. Общие требования к проектируемому устройству: - устройство должно полностью соответствовать своему функциональному назначению, т.е. выполнять заданные в ТЗ функции; - быстродействие, энергопотребление, надежность, устойчивость к вредному воздействию окружающей среды (температура, влажность, давление, вибрация, удары, статическое электричество, внешние магнитные поля, электромагнитные помехи и пр.) должны соответствовать заданным в ТЗ параметрам; - устройство должно быть максимально простым, чтобы обеспечить высокое быстродействие и надежность, а также низкую себестоимость. Если устройство проектируется на базе нескольких различных наборов логических элементов, особенно в случае различной технологии изготовления (ТТЛ и ТТЛШ, ТТЛ и КМОП, ТТЛ и ЭСЛ и т.п.), необходимо тщательно проверить эти наборы на совместимость во всем рабочем диапазоне температур и на отсутствие состязаний в спроектированной схеме.

Требуется проверить: - соответствие по номинальному напряжению питания; - соответствие по входным и выходным характеристикам логических элементов, особенно по уровням 0 и 1; - соответствие элементов по быстродействию; - соответствие по переходным процессам.

Основные характеристики логических элементов Амплитудная передаточная характеристика U вых = f(U вх ) определяет формирующие свойства логического элемента, его помехоустойчивость, амплитуду и уровни стандартного сигнала. Вид характеристики зависит от типа логического элемента (ЭСЛ, ТТЛ и т.д.) и может изменяться в определенных пределах в зависимости от разброса параметров схем, изменений напряжения питания, нагрузки и температуры окружающей среды.

Входная характеристика I вх = f(U вх ) и выходная характеристика U вых = f(I вых ) позволяют определить нагрузочную способность элемента, режим его работы и способ согласования переходных про- - 2 - цессов в линиях связи.

Импульсная (динамическая) помехоустойчивость - это зависимость допустимой амплитуды импульсной помехи от ее длительности U пом = f(t пом ). ТРИГГЕРЫ Практически все устройства ЭВМ совмещают функции переработки и хранения информации.

Неотъемлемая часть таких устройств - элемент памяти. В арифметических и логических устройствах для хранения информации чаще всего используют элемент с двумя устойчивыми состояниями - триггер . Структуру триггера можно представить в виде запоминающей ячейки и схему управления: S E 1 Схема ЗапомиQ C управR нающая _ E 2 ления ячейка Q _ Запоминающая ячейка - это схема, которая имеет два выхода Q и Q , сигналы на которых всегда противоположны (если на одном 0, то на другом 1), и два входа - вход установки S (set) и вход сброса R (reset). Переключающий сигнал по входу S устанавливает запоминающую ячейку в состояние '1', а по входу R - в состояние '0'. В зависимости от типа элементов, из которых построена запоминающая ячейка, переключающим сигналом может являться либо '0', либо '1'. Запоминающую ячейку называют также асинхронным RS-триггером . Схема управления преобразует информацию, поступающую на входы E 1 и E 2 в сигналы, которые подаются на установочные входы запоминающей ячейки. В некоторых схемах выходные сигналы триггерра поступают на вход схемы управления - на рисунке эти соединения показаны пунктиром. Как правило, триггеры, применяемые в потенциальной системе элементов, имеют еще один вход - вход для синхронизирующих сигналов C. Импульсы, поступающие на вход C, не несут логической информации, но определяют момент приема триггером входной информации. . - 3 - Классификация триггеров В основу классификации триггерных устройств положены два основных признака: функциональный признак и способ записи информации в триггер.

Функциональная классификация - это классификация триггеров по типам схем управления. По функциональному признаку различают RS, S, R, E, T, D, TV, DV, RST и JK триггеры . Классификация по способу записи информации характеризует временную диаграмму работы триггера, т.е. определяет ход процесса записи информации в триггер: Потенциальные триггеры Асинхронные Синхронные С внутренней Управляемые С внутренней Управляемые задержкой уровнем задержкой уровнем входного синхроимсигнала пульса ОдноМноготактные тактные Временная диаграмма - это диаграмма, отображающая зависимость внутреннего состояния устройства, сигналов на его выходах и протекающих в нем переходных процессов от времени и сигналов на входах этого устройства.

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

Запись информации в синхронные тактируемые триггеры осуществляется только при подаче разрешающего импульса ( синхроимпульса ) на синхронный вход C. Синхронные триггеры подразделяются на две категории: триггеры, срабатывающие по переднему фронту синхроимпульса (' по уровню '), и триггеры, срабатывающие по заднему фронту - 4 - синхроимпульса (' по спаду '). Синхронные триггеры могут быть однотактными и многотактными.

Многотактные триггеры характеризуются тем, что формирование нового состояния триггера завершается с поступлением n-го синхроимпульса.

Наибольшее распространение получили двухтактные синхронные триггеры.

Законы функционирования триггеров задаются таблицами переходов или составленными в соответствии с этими таблицами логическими уравнениями. Входы триггеров обозначаются следующим образом: C - вход синхронизации; S (set) - вход установки триггера в 1; R (reset) - вход сброса триггера в 0; D (delay) - ' задержка '; T (trigger) - ' защелка '; J - вход установки JK-триггера в 1; K - вход установки JK-триггера в 0; V - управляющий вход DV-триггера. _ Выходы триггеров: Q - прямой выход, Q - инверсный выход. _Асинхронные триггеры Асинхронные триггеры редко непосредственно используются в цифровых схемах, однако на базе асинхронных триггеров строятся все триггерные схемы.

Асинхронный RS-триггер RS-триггер имеет два информационных входа R и S. При поступлении на эти входы сигналов S=1 и R=0 триггер принимает состояние Q=1, при S=0 и R=1 состояние Q=0, а при S=0 и R=0 триггер сохраняет то состояние, в котором он находился до поступления на его входы нулевых сигналов.

Подача единичных сигналов на оба входа R и S запрещена. . - 5 - Полная таблица переходов RS-триггера: Q(t) R(t) S(t) Q(t+1) 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 X 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 X Минимизированная таблица переходов RS-триггера: R(t) S(t) Q(t+1) 0 0 Q(t) 0 1 1 1 0 0 1 1 X Логические уравнения RS-триггера имеют вид: 7( ____ 2 Q(t+1) = S(t) V R(t) . Q(t) * 2 R(t) . 0S(t) = 0 9 Асинхронный RS-триггер на элементах ИЛИ-НЕ: R 1 @ Q 1 _ @ Q S . - 6 - Условное графическое изображение такого триггера: S T R @ Асинхронный RS-триггер на элементах И-НЕ: _ S & @ Q & _ _ @ Q R Условное графическое изображение такого триггера: @ S T @ R @ или _ S T _ R @ ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 10 ТРИГГЕРЫ Синхронный однотактный RS-триггер Синхронные RS-триггеры имеет на каждом входе дополнительные схемы совпадения: _ S S & @ & @ Q C & _ & _ R @ Q R @ Если на входе C 'ноль', то на выходах схемы совпадения также будут нулевые значения при любых сигналах на входах R и S. При поступлении синхроимпульса на вход схемы совпадения информация с входов R и S инвертируется и передается на входы асинхронного триггера.

Графическое обозначение синхронного однотактного RS-триггера: S T Q C _ R @ Q . - 2 - Синхронный триггер может иметь дополнительные асинхронные входы R а и S а : _ S а _ S & S & @ @ Q C & _ R & _ R @ @ Q _ R а Графическое обозначение синхронного однотактного RS-триггера с асинхронными входами: _ S а @ S T Q S C R _ _ R а @ R @ Q Синхронные двухтактные триггеры Синхронные двухступенчатые (двухтактные) триггеры построены по принципу 'master-slave' (ведущий-ведомый). Триггерная схема состоит из двух частей-триггеров, одновременный прием информации в которые запрещен. Для построения первой и второй ступеней используют однотактные синхронные триггеры.

Информация передается во вторую ступень только после ее приема в первую ступень и окончания синхроимпульса, разрешающего запись информации в первую ступень. Такая последовательность приема информации достигается включением инвертора в цепь синхронизации для второй ступени. . - 3 - Все двухтактные триггеры имеют следующую общую структуру: E 1 E 1 T S T Q C C C _ E 2 E 2 R Q 1 @ Наиболее широкое применение в устройствах вычислительной техники находят двухтактные триггеры типов RS, T, D и JK. Рассмотрим в качестве приера схему двухтактного RS-триггера: Q' S & @ & @ & @ & @ Q 1 4 6 8 C _ & & Q' & & _ R 2 @ 5 @ 7 @ 9 @ Q _ C & @ 3 Рассмотрим идеализированную временную диаграмму работы двухтактного RS-триггера (предполагаем форрму импульсов прямоугольной и не учитываем разброс времени задержки элементов схемы): . - 4 - C t S t R t 1 t 2 t Q' t _ Q' t _ C t 6 t 7 t Q t ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 11 ТРИГГЕРЫ T-триггеры T-триггер (триггер со счетным входом) изменяет свое состояние на противоположное каждый раз при подаче на вход T единичного сигнала.

Таблица переходов асинхронного T-триггера: Т(t) Q(t+1) 0 Q(t) _ 1 Q(t) Схема асинхронного T-триггера: S T S T Q T C C _ R @ R @ Q 1 @ Графическое изображение асинхронного T-триггера: TT T @ . - 2 - Схема синхронного T-триггера: & @ & @ & @ & @ Q 1 4 6 8 T & & & & _ @ 5 @ 7 @ 9 @ Q 2 C & @ 3 Графическое изображение синхронного T-триггера: TT T C @ Синхронный T-триггер с цепями сброса и установки: @ S TT T C @ R @ . - 3 - D-триггеры Триггер D-типа - это триггер задержки. Он описывается логическим уравнением Q(t+1)=D(t), т.е. состояние D-триггера в момент времени t+1 совпадает с кодом входного сигнала, действовавшего в момент времени t. Схема D-триггера: D & @ & @ & @ & @ Q 1 4 6 8 C & & & & _ 2 @ 5 @ 7 @ 9 @ Q & @ 3 Временная диаграмма работы D-триггера: T C t D t 2 t 3 t Q t . - 4 - D-триггер с цепями сброса и установки: @ S TT D C @ R @ JK-триггеры JK-триггер имеет обычно не менее 5 входов: входы асинхронный установки S и сброса R, вход тактовых импульсов C и управляющие входы J и K. При подаче единиц на входы J и K JK-триггер работает как триггер со счетным входом: при поступлении каждого импульса на вход C (точнее, после спада импульса) состояние триггера изменяется на противоположное. Если на входах J и K установлены нулевые уровени, то состояние триггера при подаче импульсов на вход C не меняется. Если на входе J единица , а на входе K ноль , то после спада синхроимпульса на входе C JK-триггер устанавливается в состояние единица (Q=1). Если на входе J ноль , а на входе K единица , то после спада синхроимпульса на входе C JK-триггер устанавливается в состояние ноль (Q=0). Если на входе C низкий уровень, то изменение сигналов на входах J и K не влияет на состояние тиггеров.

Следует различать 'универсальные' и 'синхронные' JK-триггеры.

Универсальный триггер при наличии высокого уровня ( единицы ) на входе C и спаде сигнала (переходе из 1 в 0) на входе J переходит в состояние единица . При наличии единицы на входе C и спаде сигнала на входе K универсальный триггер переходит в состояние ноль . Этот режим работы универсальных триггеров позволяет в некоторых случаях упростить построение различных счетчиков.

Основным отличием синхронных триггеров от универсальных является то, что изменение состояния синхронных триггеров может происходить только по спаду импульсов на входе C или по поступлению сигналов сброса и установки на асинхронные входы R и S. Если во время действия высокого уровня на входе C триггер находится в нулевом состоянии и на входе J появляется (хотя бы кратковременно) единица, то после спада сигнала на входе C триггер переключится в состтояние 1, причем это произойдет независимо от состояний сигналов на входах J и K в момент спада сигнала на входе C. Аналогично, если во время действия высокого уровня на входе C триггер находится в состоянии 1 и на входе K появляется - 5 - (хотя бы кратковременно) единица, то по спаду сигнала на входе C триггер переключится в состтояние 0, т.е. триггер запоминает импульсы, приходящие на входы J и K. Определить разновидность триггера можно по его принципиальной схеме. Если вход C образован соединением двух входов, каждый из которых эквивалентен входам J и K, то это - универсальный триггер. Если для получения входа C используются еще и другие цепи триггера, то триггер синхронный. К сожалению, технические условия на большинство JK-триггеров не определяют их принципиальных схем. В результате, например, триггеры типов К130ТВ1, К131ТВ1, К133ТВ1, К155ТВ1, впускаемые раличными изготовителями, могли быть как универсальными, так и синхронными, что сильно осложняло работу проектировщиков электронных схем. Чтобы избежать недоразумений, рекомендуется использовать только такие схемы включения триггеров, в которых сигналы на входах J и K не меняются при наличии высокого уровня на входе C. Схема 'синхронного' JK-триггера: & J @ & @ & @ & @ Q 1 4 6 8 & & & & _ K @ 5 @ 7 @ 9 @ Q 2 C & @ 3 . - 6 - JK-триггер с цепями сброса и установки: @ S TT J C K @ R @ ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 12 РЕГИСТРЫ Электронную схему, выполняющую операции над одним машинным словом, называют узлом ЭВМ. Регистр - это узел ЭВМ, который состоит из системы запоминающих элементов и управляющей этой системой логической схемы и предназначен для выполнения следующих операций: 1) сброс регистра в ноль; 2) прием n-разрядного кода числа из другого узла ЭВМ; 3) передача кода числа в другой узел; 4) хранение кода числа; 5) преобразование прямого кода числа в обратный или дополнительный и наоборот; 6) сдвиг влево или вправо кода числа на требуемое число разрядов; 7) преобразование последовательного кода в параллельный и наоборот; 8) поразрядное логическое сложение двух чисел; 9) поразрядное логическое умножение двух чисел; 10) поразрядное сложение двух чисел по модулю 2. Конкретные регистры обычно являются специализированными и реализуют лишь некоторые из перечисленных операций.

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

Сдвигающие регистры классифицируются по способу приема и передачи информации: а) последовательные (прием и передача кода слова производятся последовательно, разряд за разрядом); б) параллельные (с одновременным приемом или передачей кодов всех разрядов слова); в) последовательно параллельные (прием и передача слова производятся группами по несколько разрядов, например, байтами). . - 2 - Рассмотрим в качестве примера структуру четырехразрядного запоминающего регистра, работающего в парафазном коде: D 1 S TT Q 1 _ C _ D 1 R @ Q 1 D 2 S TT Q 2 _ C _ D 2 R @ Q 2 D 3 S TT Q 3 _ C _ D 3 R @ Q 3 D 4 S TT Q 4 _ C _ D 4 R @ Q 4 C На принципиальной схеме данный регистр изображается следующим образом: S 1 RG R 1 @ S 2 R 2 @ S 3 R 3 @ S 4 R 4 @ C . - 3 - Регистры сдвига строятся на базе двухтактных триггеров RS, D или JK. Рассмотрим в качестве примера реверсивный сдвигающий регистр, построенный на базе D-триггеров с коммутаторами на базе логических элементов И-ИЛИ-НЕ: D 1 Q 1 D 2 Q 2 D n Q n & 1 & 1 & 1 & @ @ D TT & @ @ D TT & @ @ D TT C C C & @ R & @ R & @ R V DR DL _ R C Обозначения: D 1 -D n - информационные входы; Q 1 -Q n - информационные выходы; C - вход синхронизации; R - вход сброса; V - разрешение записи информации (параллельного кода); DR - сдвиг вправо; DL - сдвиг влево; . - 4 - На принципиальной схеме данный регистр изображается следующим образом: D 1 RG Q 1 D 2 D 3 Q 2 D 4 Q 3 DR DL Q 4 V C @ R ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 13 СЧЕТЧИКИ Счетчиком называется схема, выполняющая функции подсчета количества единичных сигналов, поступивших на ее вход, а также функции формирования и запоминания некоторого кода, соответствующего этому количеству.

Счетчики также иногда могут выполнять функции приема и выдачи кода. Схемы счетчиков можно классифицировать по следующим признакам: 1) Основание системы счисления. В вычислительных системах используются двоичные и десятичные счетчики.

Двоичные счетчики в свою очередь подразделяются на счетчики с модулем пересчета, равным 2 n , и модулем пересчета, не равным 2 n , где n - разрядность счетчика. 2) Направление переходов счетчика.

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

Различают счетчики с последовательным, сквозным, параллельным и групповым переносом. 4) Способ организации счета.

Счетчики могут быть асинхронными и синхронными. В асинхронных счетчиках изменение состояния счетчика осуществляется с поступлением информации только на вход первого каскада. В синхронных счетчиках информационный сигнал поступает одновременно на синхронные входы всех разрядов. 5) Тип элементов, используемых для построения счетчика.

Различают счетчики на импульсных, импульсно-потенциальных и потенциальных элементах. Хотя в современной электронной аппаратуре используются все эти три типа, в дальнейшем мы будем рассматривать только счетчики на потенциальных элементах, так как это основной тип счетчиков, используемых в ЭВМ. 6) Тип организации счетного элемента.

Счетчики могут быть построены на триггерах со счетным входом и на запоминающих элементах с использованием логических суммирующих схем.

Особую группу составляют счетчики, работающие по принципу циклического сдвигающего регистра (ккольцевые счетчики). Однако эти счетчики отличаются низкой устойчивостью к помехам и сбоям и в ЭВМ практически не применяются.

Двоичные счетчики Схемы счетчиков могут быть построены на базе триггеров. Число триггеров, необходимых для построения счетчика, определяется по формуле: - 2 - n = ceil(log 2 k) где k - коэффициент (модуль) пересчета - максимальное число внутренних состояний, которое может иметь счетчик, ceil - функция округления сверху до целого числа.

Другой важной характеристикой является быстродействие.

Быстродействие счетчика в значительной мере определяется построением цепей переноса.

Быстродействие характеризуется временем установления кода на выходе счетчика T уст , то есть интервалом времени между моментом поступления входного импульса и моментом окончания самого длительного переходного процесса в счетчике. Если не приняты никакие меры к ускорению переносов, то T уст счетчика определяется временем срабатывания триггеров счетчика t тр и числом разрядов счетчика n: T уст = t тр . n Введение цепи сквозного переноса позволяет сократить время установления кода до величины T' уст = (n-1) . t & + t тр где t & - время срабатывания схемы И в цепи сквозного переноса.

Дальнейшее повышение быстродействия счетчиков достигается использованием цепей параллельного переноса (T' уст = t тр ) и группового переноса. В случае использования группового переноса учитывается время распространения сигнала между m группами, входящими в состав счетчика: T гр уст = mt & + t тр Разрешающая способность счетчика определяется минимальным временем t р между двумя счетными импульсами, при котором счетчик работает надежно.

Максимальная частота поступления счетных импульсов f сч в общем случае определяется как f сч = 1/t тр Асинхронные счетчики Простейшие схемы двоичных счетчиков выполняются путем последовательного соединения триггеров со счетными входами. T-триггер является счетчиком с K=2. Для построения счетчика с K = 2 n требуется n таких триггеров.

Рассмотрим в качестве примера схему асинхронного двоичного триггера с последовательным переносом: - 3 - Q 1 Q 2 Q 3 TT TT TT T T T T @ R @ @ R @ @ R @ _ R Временная диаграмма работы счетчика будет иметь следующий вид: T t Q 1 t тр t Q 2 2t тр t Q 3 3t тр t Основным недостатком счетчиков с последовательным переносом является низкое быстродействие.

Синхронные счетчики со сквозным, параллельным и групповым переносом Быстродействие счетных схем можно повысить благодаря специальной организации цепей переноса и подаче счетных импульсов на все разряды счетчика одновременно. Как правило, в таких схемах счетные импульсы выполняют роль импульсов синхронизации, поэтому рассматриваемые ниже счетчики относятся к классу синхронных. В схеме со сквозным переносом переключение каждого j-го разряда JK-триггера возможно в том случае, если на его информационных входах J и K присутствует 1. В противном случае j-й триггер находится в режиме запоминания. . - 4 - Q 1 Q 2 Q 3 Q 4 & & '1' J TT J TT J TT J TT C C C C '1' K K K K @ R @ @ R @ @ R @ @ R @ T _ R На входы J и K младшего разряда счетчика подана константа '1', поэтому он постоянно работает в режиме асинхронного T-триггера, то есть изменяет свое состояние на противоположное под воздействием каждого счетного импульса.

Изменение состояния старших разрядов счетчика возможно только в том случае, если все предшествующие триггеры младших разрядов находятся в единичном состоянии.

Отличительной особенностью схемы счетчика с параллельным переносом является то, что выходы всех предшествующих i-му триггеру разрядов подаются на вход данного триггера. Q 1 Q 2 Q 3 Q 4 '1' & '1' & '1' & & '1' J TT J TT J TT J TT '1' '1' C C C C '1' & '1' & '1' & & '1' K K K K '1' '1' @ R @ @ R @ @ R @ @ R @ T _ R Для построения данного счетчика использовались многовходовые - 5 - JK-триггеры. Из схемы видно, что с возрастанием порядкового номера триггера увеличивается число входов J и К, необходимых для организации схемы. Так как число входов триггера и его нагрузочная способность ограничены, то разрядность счетчика с параллельным переносом обычно не превышает четырех. При построении счетчиков большей разрядности разряды счетчика разбивают на группы по четыре триггера, и внутри каждой группы строят цепи параллельного переноса.

Перенос между группами организуется, например, методом сквозного переноса. Такой способ образования сигналов переноса называется групповым . Счетчики с K - 2 n Для многих электронных устройств необходимы счетчики с модулем пересчета, отличным от целой степени двойки. Для электроныых часов, например, могут потребоваться счетчики с коэффициентами пересчета 3,6,7,10,24 и т.д. В ЭВМ счетчики применяются для задания сетки тактовых частот машины.

Принцип построения счетчиков с K - 2 n заключается в исключении лишних устойчивых состояний у двоичного счетчика с K = 2 n . Для реализации данного принципа используются следующие основные методы: 1) метод блокирования переноса; 2) принудительный порядок счета; 3) начальная установка кода. Идея способа блокирования переноса заключается в том, что при подаче импульса с номером, несколько меньшим коэффициента пересчета, блокируется поступление счетных импульсов в разряды, находящиеся в нулевом состоянии, а последующие импульсы обнуляют триггеры, оставшиеся в единичном состоянии, так, что с приходом K-го импульса все триггеры счетчика оказываются в нулевом состоянии.

Рассмотрим в качестве примера троичный счетчик: Q 1 Q 2 J TT J TT C C '1' K '1' K @ R @ @ R @ T _ R - 6 - Временная диаграмма работы счетчика будет иметь следующий вид: T t Q 1 t Q 2 t В счетчиках с принудительным порядком счета исключение запрещенных состояний достигается за счет принудительной установки отдельных разрядов в состояние 1 в процессе счета. Для этого в схему счетчика вводятся обратные связи. В счетчике с начальной установкой кода необходимое число запрещенных состояний устанавливается перед началом счета по сигналу 'Начальная установка кода'. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 14 ДЕШИФРАТОРЫ Дешифратором называтся комбинационная схема с несколькими входами и выходами, преобразующая код, подаваемый на входы, в сигнал на одном из выходов. В общем случае дешифратор с n входами имеет 2 n выходов, так как n-разрядный код входного слова может принимать 2 n различных значений.

Рассмотрим в качестве примера следующую схему: & y 1 1 @ x 1 & y 2 1 @ & y 3 x 2 & y 4 Условное обозначение дешифратора: D DC 0 0 1 1 2 3 МУЛЬТИПЛЕКСОРЫ Мультиплексором называется схема, осуществляющая передачу сигналов с одной из входных линий на выходную. Выбор входной (информационной) линии производится с помощью кода, подаваемого на управляющие входы мультиплексора.

Мультиплексор с k управляющими входами имеет 2 k информационными входов. - 2 - Рассмотрим в качестве примера следующую схему: D 0 & D 1 & 1 y D 2 & D 3 & DC 0 x 0 0 1 x 1 1 2 3 Условное обозначение мультиплексора: D1 MS D2 D3 D4 Q A1 A2 _ ПРОЦЕССОРЫ И МИКРОПРОЦЕССОРЫ ОСНОВНЫЕ ПРИНЦИПЫ ПОСТРОЕНИЯ УСТРОЙСТВ ОБРАБОТКИ ЦИФРОВОЙ ИНФОРМАЦИИ Принцип академика В.М. Глушкова гласит, что в любом устройстве обработки цифровой информации можно выделить операционный и - 3 - управляющий блоки. Такой подход упрощает проектирование, а также облегчает понимание процесса функционирования вычислительного устройства.

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

Процесс функционирования во времени устройства обработки состоит из последовательности тактовых интервалов, в которых операционный блок производит элементарные преобразования кодов (передачу кода из одного регистра в другой, взятие обратного кода, сдвиг и т.д.). Элементарная функциональная операция, выполняемая за один тактовый интервал и приводимая в действие одним управляющим сигналом называется микрооперацией.

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

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

Существует два основных типа управляющих автоматов: 1) Управляющий автомат с жесткой логикой. Для каждой операции, задаваемой кодом операции команды, строится набор комбинационных схем, которые в нужных тактах возбуждают соответствующие управляющие сигналы. 2) Управляющий автомат с хранимой в памяти логикой.

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

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

Функционирование вычислительного устройства может быть описано совокупностью реализуемых в нем микропрограмм. Это в ряде случаев удобный, хотя и не единственно возможный способ описания цифровых устройств. ПРИНЦИПЫ ОРГАНИЗАЦИИ АРИФМЕТИКО-ЛОГИЧЕСКИХ УСТРОЙСТВ Арифметико-логические устройства (АЛУ) служат для выполнения арифметических и логических преобразований над словами, называемыми в этом случае операндами. АЛУ служит основной частью операционного блока ЭВМ. - 4 - Выполняемые АЛУ операции можно разделить на следующие группы: - операции двоичной арифметики для чисел с фиксированной запятой; - операции двоичной арифметики для чисел с плавающей запятой; - операции десятичной арифметики; - операции индексной арифметики; - операции специальной арифметики; - операции над логическими кодами; - операции над алфавитно-цифровыми полями.

Современные ЭВМ общего назначения обычно реализуют операции всех приведенных выше групп, а малые и микроЭВМ часто не имеют аппаратуры арифметики чисел с плавающей запятой, десятичной арифметики и операций над алфавитно-цифровыми полями. В этом случае недостающие операции реализуются специальными программами. К арифметическим операциям относятся сложение, вычитание, взятие модулей ('короткие операции'), и умножение и деление ('длинные операции'). Группу логических операций составляют операции дизъюнкция (логическое ИЛИ) и конъюнкция (логическое И) над многоразрядными двоичными словами, а также операция сравнения кодов на равенство.

Специальные арифметические операции включают в себя нормализацию, арифметический сдвиг (сдвигаются только цифровые разряды, а знаковый остается на месте), логический сдвиг (знаковый разряд сдвигается вместе с цифровыми). Классификация АЛУ По способу действия над операндами АЛУ делятся на последовательные и параллельные. В последовательных АЛУ операнды представляются в последовательном коде, а операции производятся последовательно во времени над их отдельными разрядами. В настоящее время АЛУ этого типа нигде не применяются. В параллельных АЛУ операнды представляются параллельным кодом и операции совершаются параллельно во времени над всеми разрядами операндов. По способу представления чисел различают АЛУ: 1) для чисел с фиксированной запятой; 2) для чисел с плавающей запятой; 3) для десятичных чисел. По характеру использования элементов и узлов АЛУ делятся на блочные и многофункциональные. В блочном АЛУ операции над числами с фиксированной и плавающей запятой, десятичными числами и алфавитно-цифровыми полями выполняются в отдельных блоках, при этом повышается скорость работы, так как блоки могут параллельно выполнять соответствующие операции, но значительно возрастают - 5 - затраты оборудования. В многофункциональных АЛУ операции для всех форм представления чисел выполняются одними и теми же схемами, которые коммутируются нужным образом в зависимости от требуемого режима работы. СТРУКТУРА И ФОРМАТ КОМАНД. КОДИРОВАНИЕ КОМАНД. Все возможные преобразования дискретной информации могут быть сведены к четырем основным видам: 1) передача информации в пространстиве; 2) хранение информации; 3) логические операции; 4) арифметические операции. ЭВМ, являющаяся универсальным преобразователем дискретной информации, выполняет все указанные виды преобразований.

Обработка информации в ЭВМ осуществляется автоматически путем программного управления.

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

Команда представляет собой код, определяющий операцию вычислительной машины и данные, участвующие в операции.

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

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

Содержанием машинной операции могут быть запоминание в памяти, передача, арифметическое или логическое преобразование машинных слов, а также некоторые вспомогательные процедуры. По характеру выполняемых операций различают следующие основные группы команд: 1) команды арифметических операций для чисел с фиксированной и плавающей запятой; 2) команды десятичной арифметики; 3) команды логических операций; 4) команды передачи кодов; 5) команды ввода-вывода; 6) команды передачи управления; 7) команды задания режима работы машины. В команде, как правило, содержатся не сами операнды, а информация об адресах ячеек памяти или регистрах, в которых они находятся. Код команды можно представить состоящим из нескольких частей или полей, имеющих определенное функциональное назначение при кодировании командной информации.

Команда в общем случае состоит из операционной и адресной частей. В свою очередь, эти части - 6 - могут состоять из нескольких полей.

Операционная часть содержит код операции, который задает вид операции.

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

Структура команды определяется составом, назначением и расположением полей в команде.

Форматом команды называют ее структуру с разметкой номеров разрядов (бит), определяющих границы отдельных полей команды, или с указанием числа бит в определенных полях. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 15 СПОСОБЫ АДРЕСАЦИИ Адресный код - это информация об адресе операнда, содержащаяся в команде.

Исполнительный адрес - это номер ячейки памяти, к которой производится фактическое обращение. В современных ЭВМ адресный код, как правило, не совпадает с исполнительным адресом. Выбор способов адресации, формирования исполнительного адреса и преобразования адресов является одним из важнейших вопросов разработки ЭВМ. Рассмотрим способы адресации, используемые в современных ЭВМ: 1) Подразумеваемый операнд . В команде может не содержаться явных указаний об операнде; в этом случае операнд подразумевается и фактически задается кодом операции команды. 2) Подразумеваемый адрес . В команде может не содержаться явных указаний об адресе участвующего в операции операнда или адресе, по которому должен быть размещен результат операции, но этот адрес подразумевается. 3) Непосредственная адресация . В команде содержится не адрес операнда, а непосредственно сам операнд. При непосредственной адресации не требуется обращения к памяти для выборки операнда и ячейки памяти для его хранения. Это способствует уменьшению времени выполнения программы и занимаемого ею объема памяти.

Непосредственная адресация удобна для хранения различного рода констант. 4) Прямая адресация . В адресной части команды может быть непосредственно указан исполнительный адрес. 5) Относительная (базовая) адресация . При этом способе адресации исполнительный адрес определяется как сумма адресного кода команды и базового адреса, как правило хранящегося в специальном регистре - регистре базы.

Относительная адресация позволяет при меньшей длине адресного кода команды обеспечить доступ к любой ячейке памяти. Для этого число разрядов в базовом регистре выбирают таким, чтобы можно было адресовать любую ячейку оперативной памяти, а адресный код команды используют для представления лишь сравнительно короткого 'смещения'. Смещение определяет положение операнда относительно начала массива, задаваемого базовым адресом. 6) Укороченная адресация . Для уменьшения длины кода команды часто применяется так называемая укороченная адресация. Суть ее сводится к тому, что в команде задаются только младшие разряды адресов, а старшие разряды при этом подразумеваются нулевыми. Такая адресация позволяет использовать только небольшую часть фиксированных ячеек в начале всей адресуемой области памяти, и поэтому применяется лишь совместно с другими способами адресации.

Регистровая адресация является частным случаем укороченной, когда в качестве фиксированных ячеек с короткими адресами используются регистры (ячейки сверхоперативной или местной памяти) процессора.

Например, если таких регистров 16, то для адреса достаточно четырех двоичных разрядов.

Регистровая адресация наряду с сокращением длины адресов операндов позволяет увеличить скорость выполнения операций, так как уменьшается число обрашений к оперативной памяти. 7) Косвенная адресация . Адресный код команды в этом случае указывает адрес ячейки памяти, в которой находится адрес операнда или команды.

Косвенная адресация широко используется в малых и микроЭВМ, имеющих короткое машинное слово, для преодоления ограничений короткого формата команды (совместно используются регистровая и косвенная адресация). 8) Адресация слов переменной длины . Эффективность вычислительных систем, предназначенных для обработки данных, повышается, если имеется возможность выполнять операции со словами переменной длины. В этом случае в машине может быть предусмотрена адресация слов переменной длины, которая обычно реализуется путем указания в команде местоположения в памяти начала слова и его длины. 9) Стековая адресация . Стековая память, реализующая безадресное задание операндов, особенно широко используется в микропроцессорах и миниЭВМ. Стек представляет собой группу последовательно пронумерованных регистров или ячеек памяти, снабженных указателем стека, в котором автоматически при записи и считывании устанавливается номер (адрес) последней занятой ячейки стека (вершины стека). При операции записи заносимое в стек слово помещается в следующую по порядку свободную ячейку стека, а при считывании из стека извлекается последнее поступившее в него слово. 10) Автоинкрементная и автодекрементная адресации . Поскольку регистровая косвенная адресация требует предварительной загрузки регистра косвенным адресом из оперативной памяти, что связано с потерей времени, такой тип адресации особенно эффективен при обработке массива данных, если имеется механизм автоматического приращения или уменьшения содержимого регистра при каждом обращении к нему. Такой механизм называется соответственно автоинкрементной и автодекрементной адресацией. В этом случае достаточно один раз загрузить в регистр адрес первого обрабатываемого элемента массива, а затем при каждом обращении к регистру в нем будет формироваться адрес следующего элемента массива. При автоинкрементной адресации сначала содержимое регистра используется как адрес операнда, а затем получает приращение, равное числу байт в элементе массива. При автодекрементной адресации сначала содержимое указанного в команде регистра уменьшается на число байт в элементе массива, а затем используется как адрес операнда.

Автоинкрементная и автодекрементная адресации могут рассматриваться как упращенный вариант индексации - весьма важного механизма преобразования адресных частей команд и организации вычислительных циклов, поэтому их часто называют автоиндексацией. 11) Индексация . Для реализуемых на ЭВМ методов решения математических задач и обработки данных характерна цикличность вычислительных процессов, когда одни и те же процедуры выполняются над различными операндами, упорядоченно расположенными в памяти.

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

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

Управление вычислительным циклом должно обеспечивать повторение цикла нужное число раз, а затем выход из него.

Автоматическая модификация команд и управление вычислительными циклами в современных ЭВМ обеспечиваются механизмом индексации. Это понятие включает в себя специальный способ кодирования команд, командные и аппаратурные средства задания и выполнения модификации команд и управления вычислительными циклами.

Упомянутые средства часто называют индексной арифметикой. Для выполнения индексации в машину вводятся так называемые индексные регистры.

Исполнительный адрес при индексации формируется путем сложения адресного кода команды (смещения) с содержимым индексного регистра (индексом), а при наличии базирования - и с базовым адресом. Для управления индексацией используются команды, задающие операции над содержимым индексных регистров - команды индексной арифметики. Можно отметить основные виды индексных операций: - засылка в соответствующий индексный регистр начального значения индекса; - изменение индекса; - проверка окончания циклических вычислений. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 16-17 _ МИКРОПРОЦЕССОР INTEL 8086 Структуру команд и методы адресации мы далее будем рассматривать на примере широко распространенного микропроцессора Intel 8086. Рассмотрим аппаратную модель этого микропроцессора. АППАРАТНАЯ МОДЕЛЬ ПРОЦЕССОРА 8086 Выполнение программы в ЭВМ представляет собой циклическую последовательность приведенных ниже действий, образующих цикл команды: 1) выборка команды из памяти и формирование адреса следующей по порядку команды; 2) считывание операнда из памяти, если это требуется по смыслу команды; 3) собственно выполнение команды; 4) запись результата в память, если это указано в команде, и переход к новому циклу команды.

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

Операционное устройство выполняет команды, а устройство шинного интерфейса выбирает команды, считывает операнды и записывает результаты. Оба устройства могут работать параллельно и в большинстве случаев обеспечивают значительное совмещение выборки и выполнения команд. В результате этого время выборки команды как-бы 'исчезает' из цикла команды, так как операционное устройство выполняет команды, уже выбранные шинным интерфейсом.

Операционное устройство содержит группу общих регистров, арифметико-логическое устройство (АЛУ), основу которого составляет комбинированный 16-разрядный сумматор с последовательно-параллельным переносом, регистр флажков и несколько регистров для временного хранения операндов и результата операции. Оно выполняет команды, обменивается данными и адресами с шинным интерфейсом, оперирует общими регистрами и флажками. В его составе имеется блок микропрограммного управления, который дешифрует команды и формирует необходимые управляющие сигналы.

Операционное устройство изолированно от внешней шины, за исключением нескольких внешних сигналов.

Шинный интерфейс выполняет для операционного устройства все операции обмена.

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

Команды хранятся во внутренней регистровой - 2 - памяти, называемой очередью (буфером) команд.

Очередь команд выполняет по существу функции регистра команды процессора. Длина очереди составляет 6 байт.

Очередь команд работает по принципу FIFO ('первым пришел, первым вышел'), который сохраняет на выходе порядок поступления команд.

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

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

Шинный интерфейс приостанавливает выборку команд, когда операционное устройство запрашивает операцию считывания или записи в память или порт ввода-вывода. В состав шинного интерфейса входят несколько регистров и сумматор, которые формируют 20-разрядный физический адрес памяти из двух 16-разрядных логических адресов: сегмента (базы) и смещения. При готовности операционного устройства выполнять команду оно считывает из очереди байт, а затем выполняет предписанную командой операцию. При многобайтных командах из очереди считываются и другие байты команды. Когда операционное устройство готово считать командный байт, а очередь команд пуста, оно ожидает выборки командного слова из памяти программ, которую производит шинный интерфейс. Если команда требует обращения к памяти или порту ввода-вывода, операционное устройство запрашивает шинный интерфейс на выполнение необходимого цикла шины. Когда шинный интерфейс не занят выборкой команды, он удовлетворяет запрос немедленно; в противном случае операционное устройство ожидает завершения текущего цикла шины. ПРОГРАММНАЯ МОДЕЛЬ ПРОЦЕССОРА 8086 Программная модель процессора - это функциональная модель, используемая программистом при разработке программ в кодах ЭВМ или на языке ассемблера. В такой модели игнорируются многие аппаратные особенности в работе процессора. В процессоре 8086 имеется несколько быстрых элементов памяти, которые называются регистрами.

Каждый из регистров имеет уникальную природу и предоставляет определенные возможности, которые другими регистрами или ячейками памяти не поддерживаются. - 3 - Регистры разбиваются на четыре категории: регистры общего назначения, регистр флагов, указатель команд и сегментные регистры. Все регистры 16-разрядные.

Формат регистров общего назначения: 15 0 AX AH AL BX BH BL CX CH CL DX DH DL SI DI BP SP Формат регистра флагов: 15 0 FLAGS ** ** ** ** OF DF IF TF SF ZF ** AF ** PF ** CF Указатель команд: 15 0 IP . - 4 - Формат сегментных регистров: 15 0 CS DS ES SS РЕГИСТР ФЛАГОВ Этот 16-разрядный регистр содержит всю необходимую информацию о состоянии процессора 8086 и результатах выполнения последней команды. 15 11 10 9 8 7 6 4 2 0 FLAGS ** ** ** ** OF DF IF TF SF ZF ** AF ** PF ** CF Битовые флаги: OF - флаг переполнения; DF - флаг направления; IF - флаг прерывания; TF - флаг трассировки; SF - флаг знака; ZF - флаг нуля; AF - флаг дополнительного переноса; PF - флаг четности; CF - флаг переноса; ** - бит не используется, состояние не определено. Флаг переполнения OF сигнализирует о потере старшего бита результата сложения или вычитания.

Имеется специальная команда прерывания при переполнении, которая генерирует программное прерывание. Флаг направления DF определяет порядок сканирования цепочек байт или слов в соответствующих командах: от меньших адресов к большим (DF = 0) или наоборот (DF = 1). - 5 - Флаг прерывания IF определяет реакцию процессора на запросы внешних прерываний по входу INT. Если IF = 0, запросы прерываний игнорируются (говорят также, что прерывания запрещены или замаскированы), а если IF = 1, процессор распознает запросы на прерывания и реагирует на них соответствующим образом.

Состояние флага IF не влияет на восприятие внешних немаскируемых прерываний по входу NMI, а также внутренних (программных) прерываний.

Установка в состояние 1 флага трассировки TF переводит процессор в одношаговый (покомандный) режим работы, который применяется при отладке программ. В этом режиме процессор автоматически генерирует внутреннее прерывание после выполнения каждой команды с переходом к соответствующей подпрограмме обработки, которая может, например, демонстрировать содержимое регистров процессора на зкране дисплея. Флаг знака SF повторяет значение старшего бита результата, который при использовании дополнительного кода соответствует знаку числа. Флаг нуля ZF сигнализирует о получении нулевого результата операции. Флаг вспомогательного переноса AF фиксирует перенос (заем) из младшей тетрады в старшую 8- или 16-битного результата. Он необходим только для команд десятичной арифметики. Флаг четности (паритета) PF фиксирует наличие четного числа единиц в младших 8 разрядах результата операции. Этот флаг предназначен для контроля правильности передачи данных. Флаг CF фиксирует значение переноса (заема), возникающего при сложении или вычитании байт или слов, а также значение выдвигаемого бита при сдвиге операнда.

Регистр флагов не считывается и не модифицируется непосредственно.

Вместо этого в системе команд микропроцессора предусмотрены специальные команды, с помощью которых программист может задать необходимое ему состояние любого из флагов (кроме TF). Содержимое регистра флагов используется микропроцессором при выполнении команд условного перехода, циклических сдвигов, операций с цепочками байт или слов. РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ Восемь регистров общего назначения процессора 8086 (каждый разрядностью 16 бит) используются в операциях большинства инструкций в качестве источника или приемника при перемещении данных и вычислениях, указателей на ячейки памяти и счетчиков.

Каждый регистр общего назначения может использоваться для хранения 16-битового значения, в арифметических и логических операциях, может выполняться обмен между регистром и памятью (запись из регистра в память и наоборот). - 6 - Кроме этих общих свойств, каждый регистр общего назначения имеет свои особенности.

Поэтому рассмотрим далее каждый из них отдельно.

Регистр AX называют также накопителем (аккумулятором). Этот регистр всегда используется в операциях умножения или деления и является также одним из тех регистров, который можно использовать для наиболее эффективных операций (арифметических, логических или операций перемещения данных). Младшие 8 битов регистра AX называются также регистром AL, а старшие 8 битов - регистром AH. Это может оказаться удобным при работе с данными размером в байт. Таким образом, регистр AX можно использовать, как два отдельных регистра.

Регистр BX может использоваться для ссылки на ячейку памяти (указатель), т.е. 16-битовое значение, записанное в BX, может использоваться в качестве части адреса ячейки памяти, к которой производится обращение. По умолчанию, когда BX используется в качестве указателя на ячейку памяти, он ссылается на нее относительно сегментного регистра DS. Как и регистры AX, CX и DX, регистр BX может интерпретироваться, как два восьмибитовых регистра - BH и BL. Специализация регистра CX - использование в качестве счетчика при выполнении циклов.

Уменьшение значения счетчика и цикл - это часто используемый элемент программы, поэтому в процессоре 8086 используется специальная команда для того, чтобы циклы выполнялись быстрее и были более компактными. Эта команда называется LOOP. Инструкция LOOP вычитает 1 из CX и выполняет переход, если содержимое регистра CX не равно 0. Регистр CX можно интерпретировать, как два 8-разрядных регистра - CH и CL. Регистр DX - это единственный регистр, которые может использоваться в качестве указателя адреса ввода-вывода в командах IN и OUT. Фактически, кроме использования регистра DX нет другого способа адресоваться к портам ввода-вывода с 256 по 65535. Другие уникальные качества регистра DX относятся к операциям деления и умножения. Когда вы делите 32-битовое делимое на 16-битовый делитель, старшие 16 битов делимого должны быть помещены в регистр DX (младшие 16 битов делимого должны быть помещены в регистр AX). После выполнения деления остаток также сохраняется в регистре DX (частное от деления будет записано в AX). Аналогично, когда вы перемножаете два 16-битовых сомножителя, старшие 16 битов произведения сохраняются в DX (младшие 16 битов записываются в регистр AX). Регистр DX можно интерпретировать, как два 8-разрядных - 7 - регистра - DH и DL. Как и регистр BX, регистр SI может использоваться, как указатель на ячейку памяти.

Особенно полезно использовать регистр SI для ссылки на память в строковых командах процессора 8086, которые не только изменяют содержимое по адресу памяти, на который указывает SI, но к SI также добавляется или вычитается 1. Это может оказаться очень эффективным при организации доступа к последовательным ячейкам памяти (например, к строке текста). Кроме того, можно сделать так, что строковые команды будут автоматически определенное число раз повторять свои действия, так что отдельная команда может выполнить сотни, а иногда и тысячи действий.

Регистр DI очень похож на регистр SI в том плане, что его можно использовать в качестве указателя ячейки памяти. При использовании его в строковых командах регистр DI несколько отличается от регистра SI. В то время как SI всегда используется в строковых командах, как указатель на исходную ячейку памяти (источник), DI всегда служит указателем на целевую ячейку памяти (приемник). Кроме того, в строковых командах регистр SI обычно адресуется к памяти относительно сегментного регистра DS, в то время как DI всегда адресуется к памяти относительно сегментного регистра ES. Когда SI и DI используются в качестве указателей на ячейки памяти в других командах (не строковых), то они всегда адресуются к памяти относительно регистра DS. Как и регистры BX, SI и DI, регистр BP также может использоваться в качестве указателя на ячейку памяти, но здесь есть некоторые отличия.

Регистры BX, SI и DI обычно ссылаются на память относительно сегментного регистра DS (или, в случае использования в строковых командах регистра DI, относительно сегментного регистра ES), а регистр BP адресуется к памяти относительно регистра SS (сегментный регистр стека). Регистр BP создан для обеспечения работы с параметрами процедур, локальными переменными и других случаев, когда требуется адресация к памяти с использованием стека.

Регистр SP называется также указателем стека. Это 'наименее общий' из регистров общего назначения, поскольку он практически всегда используется для специальной цели - обеспечения стека. Стек - это область памяти, в которой можно сохранять значения и из которой они могут затем извлекаться по дисциплине 'последний-пришел-первый-ушел' (LIFO). То есть последнее сохраненное в стеке значение будет первым значением, которое вы получите при чтении из стека.

Регистр SP в каждый момент времени указывает на вершину стека.

Вершина стека - это то место, в котором в стеке сохраняется следующее помещенное туда значение.

Действие, состоящее в занесе- - 8 - нии значений в стек, называют также 'заталкиванием' (pushing) в стек (для этого используется команда PUSH). Аналогично, действие, состоящее в извлечении (выборке) значений из стека, называют также 'выталкиванием' (popping) из стека (для этого используется команда POP). Хотя процессор 8086 и позволяет записывать значения в SP или складывать и вычитать хранящиеся в регистре SP значения (как это можно делать с обычными регистрами общего назначения), вам не следует к этому прибегать, если вы в точности не знаете, что делаете. Если вы изменяете SP, то изменяется расположение вершины стека, что быстро может привести к неприятностям, так как занесение данных в стек и извлечение их из него не является единственным способом использования стека. Стек используется всякий раз, когда вы вызываете или возвращаетесь из подпрограммы (процедуры или функции). Кроме того, стек используют некоторые системные программы (такие, как драйвер клавиатуры или системный таймер), когда они прерывают процессор 8086, чтобы выполнить свои функции. Все это означает, что стек может в любой момент потребоваться. Если вы измените SP, то правильное значение стека может оказаться недоступным, когда он потребуется системным программам. Можно свободно выполнять операции занесения в стек и извлечения из него, вызовы и возвраты управления, но не изменяйте значения регистра SP непосредственно. Любой из других семи регистров общего назначения можно спокойно изменять в любой момент. УКАЗАТЕЛЬ КОМАНД Указатель команд (регистр IP) всегда содержит смещение в памяти, по которому хранится следующая выполняемая команда. Когда выполняется одна команда, указатель команд перемещается таким образом, чтобы указывать на адрес памяти, по которому хранится следующая команда.

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

Значение счетчика команд нельзя прочитать или записать непосредственно.

Загрузить в указатель команд новое значение может только специальная команда перехода.

Указатель команд сам по себе не определяет адрес, по которому находится следующая выполняемая команда.

Картину здесь опять усложняет сегментная организация памяти процессора 8086. Для извлечения команды предусмотрен регистр CS, где хранится базовый адрес, при этом указатель команд задает смещение относительно этого базового адреса. - 9 - СЕГМЕНТНЫЕ РЕГИСТРЫ Теперь мы подошли к наиболее необычному аспекту процессора 8086 - сегментации памяти.

Основной предпосылкой сегментации является следующее: процессор 8086 может адресоваться к 1 мегабайту памяти. Для адресации ко всем ячейкам адресного пространства в 1 мегабайт необходимы 20-разрядные сегментные регистры.

Однако процессор 8086 использует только 16-разрядные указатели на ячейки памяти. Как же тогда согласовать 16-разрядные указатели процессора 8086 и 20-разрядные адреса? Ответ состоит в том, что процессор 8086 использует двухступенчатую схему адресации. Да, используются 16-разрядные указатели, но эта форма представляет собой только часть полной схемы адресации.

Каждый 16-разрядный указатель памяти или смещение комбинируется с содержимым 16-разрядного сегментного регистра для формирования 20-разрядного адреса памяти.

Сегменты и смещения комбинируются следующим образом: значение сегмента сдвигается влево на 4 (то есть умножается на 16), а затем складывается со смещением.

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

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

Использование имен сегментов позволяет ассемблеру и операционной системе DOS выполнять подобные вычисления.

Использование сегментов процессора 8086 приводит к некоторым интересным моментам. Один из них состоит в том, что только блок памяти размером в 64К в любой момент может адресоваться через сегментный регистр, так как 64К - это максимальный объем памяти, к которой можно адресоваться с помощью 16-битового смещения. Это может оказаться неприятным при работе с большим (более 64К) объемом памяти, так как и значение сегментного регистра, и смещение, придется часто изменять.

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

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

Вторая особенность использования сегментов состоит в том, что каждая ячейка памяти адресуется через многие возможные сочетания 'сегмент:смещение'. Например, адрес памяти 100h адресуется с помощью следующих значений 'сегмент:смещение': 0:100h, 1:F0h, 2:E0h и т.д., так как при вычислении всех этих пар 'сегмент:смещение' получается значение адреса 100h. Аналогично регистрам общего назначения каждый сегментный регистр играет свою, конкретную роль.

Регистр CS указывает на код программы, DS указывает на данные, SS - на стек.

Сегментный регистр ES - это дополнительный сегмент, который может использоваться так, как это необходимо.

Рассмотрим сегментные регистры более подробно.

Регистр CS указывает на начало блока памяти объемом 64К, или сегмент кода, в котором находится следующая выполняемая команда.

Следующая команда, которую нужно выполнить, находится по смещению, определяемому в сегменте кода регистром IP, то есть на нее указывает адрес (в форме 'сегмент:смещение') CS:IP. Процессор 8086 никогда не может извлечь команду из сегмента, отличного от того, который определяется регистром CS. Регистр CS можно изменять с помощью многих команд, включая отдельные команды перехода, вызовы и возвраты управления. Ни при каких обстоятельствах регистр CS нельзя загрузить непосредственно.

Никакие другие режимы адресации или указатели памяти, отличные от IP, не могут нормально работать относительно регистра CS. Регистр DS указывает на начало сегмента данных, которые представляет собой блок памяти объемом 64К, в котором находится большинство размещенных в памяти операндов.

Обычно для ссылки на адреса памяти используются смещения, предполагающие использование регистров BX, SI или DI. В основном сегмент данных представляет собой то, о чем говорит его название: как правило это сегмент, в котором находится текущий набор данных.

Регистр ES указывает на начало блока памяти объемом 64К, который называется дополнительным сегментом. Как и подразумевает его название, дополнительный сегмент не служит для какой-то конкретной цели, но доступен тогда, когда в нем возникает необходимость.

Иногда сегмент ES используется для выделения дополнительного блока памяти объемом 64К для данных.

Однако доступ к памяти в дополнительном сегменте менее эффективен, чем доступ к памяти в сегменте данных.

Особенно полезен дополнительный сегмент, когда используются строковые команды. Все строковые команды, которые выполняют запись в память, используют в качестве адреса, по которому нужно выполнить запись, пару регистров ES:DI. Это означает, что регистр - 11 - ES особенно полезен при использовании его в качестве целевого сегмента при копировании блоков, сравнении строк, просмотре памяти и очистке блоков памяти. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 18-19 РАБОТА МИКРОПРОЦЕССОРА 8086 С ПАМЯТЬЮ И РЕГИСТРАМИ УСТРОЙСТВ ВВОДА-ВЫВОДА ОРГАНИЗАЦИЯ ПАМЯТИ Микропроцессор 8086 обеспечивает адресацию памяти емкостью 1 Мбайт.

Адресное пространство памяти представляет собой одномерный массив байт, каждый из которых имеет 20-битный физический адрес.

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

Адресом слова считается адрес его младшего байта.

Четыре смежных байта памяти образуют 32-битное слово (двойное слово), именуемое указателем и представляющее собой полный адрес памяти 'сегмент:смещение'. Старшее слово при этом задает базовый адрес (начало сегмента), а младшее - смещение. Такие указатели применяются для адресации данных и команд, находящихся вне текущих сегментов.

Команды, байты и слова данных можно свободно размещать по любому адресу.

Однако в некоторых случаях целесообразно размещать слова в памяти по четным адресам, так как процессор может передавать такие слова за один цикл шины (слова с нечетными адресами передаются за два цикла шины). Слово с четным адресом называется выравненным на границе слова.

Особенно важно иметь выровненные слова для операций со стеком, так как в них участвуют только слова.

Следовательно, указатель стека SP всегда необходимо инициализировать на четный адрес.

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

Сегментация Программы используют пространство памяти в 1 Мбайт в виде сегментов.

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

Каждому сегменту программой назначается базовый (начальный) адрес, являющийся адресом его первого байта в адресном пространстве памяти. Все сегменты начинаются на 16-байтных границах памяти, называемых границами параграфов.

Других ограничений на размещение сегментов в памяти нет.

Сегменты могут быть соседними (смежными), неперекрывающимися (непересесекающимися), частично или полностью перекрывающимися. - 2 - Физическая ячейка памяти может принадлежать одному или нескольким сегментам.

Зарезервированные области памяти Две области адресного пространства памяти зарезервированы для выполнения особых функций, связанных с обработкой прерываний и системным сбросом. Этими областями являются первые 128 байт (физические адреса 00000- 0007F ) и последние 16 байт (физические адреса FFFF0-FFFFF). Данные области использовать для других целей нельзя. ВВОД-ВЫВОД Процессор 8086 имеет большое адресное пространство вводавывода, изолированное от пространства памяти, и специальные команды, которые передают данные между регистрами процессора и портами в пространстве ввода-вывода.

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

Адресное пространство ввода-вывода содержит до 64К 8-битовых портов или до 32К 16-битовых портов.

Команды IN (ввод) и OUT (вывод) передают данные между аккумуляторами AL (байты) или AX (слова) и адресуемыми портами.

Восемь ячеек F8-FF в пространстве ввода-вывода зарезервированы для системных целей, и использовать их в прикладных программах не рекомендуется. ОРГАНИЗАЦИЯ ПАМЯТИ ЭВМ ТИПА IBM PC Память ЭВМ IBM PC организована следующим образом: Первые 640 Кбайт адресного пространства с адресами от 00000 до 9FFFF выделены под оперативную память, а остальные 384 Кбайт c адресами от A0000 до FFFFF используются для размещения ПЗУ и отображаемого на память ввода-вывода. В начале области ОЗУ размещена область векторов прерываний: 256 векторов, занимающих по 4 байта памяти. После них расположены области данных и программ операционной системы.

Оставшуюся часть ОЗУ занимают программы пользователя.

Адреса в области ПЗУ и отображаемого ввода-вывода распределены следующим образом: A0000-AFFFF - отображенная на память область ввода вывода дисплея в графическом режиме; B0000-B7FFF - отображенная на память область ввода вывода дисплея в текстовом монохромном режиме; - 3 - B8000-BFFFF - отображенная на память область ввода вывода дисплея в цветном текстовом режиме; C0000-EFFFF - область ПЗУ жесткого диска, видеоадаптера и других устройств; F0000-FFFFF - область ПЗУ программ тестирования ЭВМ при запуске, начальной загрузки операционной системы и базовой системы ввода-вывода. В ЭВМ IBM PC используются порты с адресами 0000-03FF, причем адреса 0000-00FF используются системной платой, а остальная область выделена для устройств пользователей. РЕЖИМЫ АДРЕСАЦИИ МИКРОПРОЦЕССОРА INTEL 8086 Команда разделяется на группы бит (поля), причем поле кода операции (КОП) показывает, что должен делать процессор, а остальные поля, называемые операндами, идентифицируют требуемую команде информацию.

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

Способ определения операнда называется режимом адресации.

Рассмотрим наиболее типичные режимы адресации микропроцессора 8086. Они разделяются на два класса - режимы адресации данных и режимы адресации переходов. РЕЖИМЫ АДРЕСАЦИИ ДАННЫХ Различают следующие режимы адресации данных: 1) Непосредственный - данное длиной 8 или 16 бит является частью команды.

Операнд: Данное - 4 - 2) Прямой - 16-битный эффективный адрес данного является частью команды.

Операнд: Память: EA > Данное 3) Регистровый - данное содержится в определяемом командой регистре. 16-битный операнд может находиться в регистрах AX, BX, CX, DX, SI, DI, SP или BP, а 8-битный - в регистрах AL, AH, BL, BH, CL, CH, DL или DH. Операнд: Регистр: Регистр > Данное 4) Регистровый косвенный - эффективный адрес данного находится в базовом регистре BX или одном из индексных регистров. (BX) EA = (SI) (DI) Операнд: Регистр: Память: Регистр > EA > Данное 5) Регистровый относительный - эффективный адрес равен сумме 8- или 16-битного смещения и содержимого базового или индексного регистров. (BX) EA = (BP) + 8-битное смещение (SI) 16-битное смещение (DI) Операнд 1: Регистр: Операнд 2: Память: Регистр > Адрес + Смещение > Данное - 5 - 6) Базовый индексный - эффективный адрес равен сумме содержимого базового и индексного регистров. EA = (BX) + (SI) (BP) (DI) Операнд: Регистр: Базовый Индексный > Индекс регистр регистр Память: EA + > Данное Регистр: > Базовый адрес 7) Относительный базовый индексный - эффективный адрес равен сумме 8- или 16-битного смещения и базово-индексного адреса. EA = (BX) + (SI) + 8-битное смещение (BP) (DI) 16-битное смещение Операнд 1: Операнд 2: Базовый Индексный Смещение регистр регистр Регистр: Память: EA > Индекс > + > Данное Регистр: > Базовый адрес Допустим, что регистр BX содержит число 0158 в 16-ричном коде, регистр DI - число 10A5, смещение равно 1B57, сегментный регистр данных DS содержит число 2100. Тогда, если в качестве сегментного регистра применяется DS, - 6 - различные режимы адресации дают следующие эффективные и физические адреса: 1) Прямой: Эффективный адрес EA = 1B57, Физический адрес = 1B57 + 21000 = 22B57. 2) Регистровый косвенный (с участием регистра BX): Эффективный адрес EA = 0158, Физический адрес = 0158 + 21000 = 21158. 3) Регистровый относительный (с участием регистра BX): Эффективный адрес EA = 0158 + 1B57 = 1CAF, Физический адрес = 01CAF + 21000 = 22CAF. 4) Базовый индексный (с участием регистров BX и DI): Эффективный адрес EA = 0158 + 10A5 = 11FD, Физический адрес = 011FD + 21000 = 221FD. 5) Относительный базовый индексный (с участием регистров BX и DI): Эффективный адрес EA = 0158 + 10A5 + 1B57 = 2D54, Физический адрес = 02D54 + 21000 = 23D54. РЕЖИМЫ АДРЕСАЦИИ ПЕРЕХОДОВ Различают следующие режимы адресации переходов: 1) Внутрисегментный прямой - эффективный адрес перехода равен сумме 8- или 16-битного смещения и текущего содержимого IP. Когда смещение имеет длину 8 бит, этот режим называется коротким переходом. Этот режим допустим в условных и безусловных переходах, но в команде условного перехода смещение может иметь длину только 8 бит.

Операнд: IP IP EA Смещение + > 2) Внутрисегментный косвенный - эффективный адрес перехода есть содержимое регистра или ячейки памяти, которые указываются в любом режиме (кроме непосредственного) адресации данных.

Содержимое IP заменяется эффективным адресом перехода.

Данный режим допустим только в командах безусловного перехода. 3) Межсегментный прямой - заменяет содержимое IP первым операндом команды, а содержимое CS - вторым операндом.

Назначение данного режима адресации - обеспечить переход из одного сегмента кода в другой. . - 7 - Операнд 1: IP Операнд 2: CS Смещение > Сегмент > 4) Межсегментный косвенный - заменяет содержимое регистров IP и CS содержимым двух смежных слов из памяти, которые определяются в любом режиме адресации данных, кроме непосредственного и регистрового.

Межсегментный переход может быть только безусловным.

Допустим, что регистр BX содержит число 1256 в 16-ричном коде, регистр SI - число 528F , смещение равно 20A1. Тогда при прямой адресации эффективный адрес перехода равен 20A1 + (DS)*0010. При регистровой косвенной адресации (с участием регистра BX) эффективный адрес перехода 1256 + 20A1 + (DS)*0010. При базовой индексной адресации (с участием регистров BX и SI) эффективный адрес перехода 1256 + 528F + (DS)*0010. ФОРМАТЫ КОМАНД МИКРОПРОЦЕССОРА INTEL 8086 Рассмотрим типичные форматы команд микропроцессора 8086. Длина команд варьируется от 1 до 6 байт. Длина смещений и непосредственных данных может быть 8 или 16 бит в зависимости от кода команды. Один или два байта в начале кода команды занимают код операции и указание режима адресации. После них могут находиться: - ни одного дополнительного байта; - двухбайтный эффективный адрес EA (только для прямой адресации); - одноили двухбайтное смещение; - одноили двухбайтный непосредственный операнд; - одноили двухбайтное смещение с последующим одноили двухбайтным непосредственным операндом; - двухбайтное смещение и двухбайтный сегментный адрес (только для прямой межсегментной адресации). Применение одной из перечисленных возможностей определяется кодом операции и режимом адресации. Если длина смещения или непосредственного операнда составляет 2 байта, первым всегда следует младший байт.

Обычно код операции занимает первый байт команды, но в некоторых командах в первом байте также указывается регистр, а в некоторых других командах три бита кода операции находятся во втором байте. - 8 - Далее используются следующие условные обозначения: REG - регистр, MOD - режим, R/M - регистр или память, DISP - смещение, DATA - непосредственные данные, LO - младший байт, HI - старший байт.

Пример однобайтной команды с неявными операндами: КОП Пример однобайтной команды с регистровым режимом адресации: КОП REG Операция регистр-регистр: КОП 1 1 REG R/M Операция регистр-память без смещения: КОП MOD REG R/M Операция регистр-память со смещением: КОП MOD REG R/M DISP-LO DISP-HI Непосредственный операнд в регистр: КОП MOD КОП R/M DATA-LO DATA-HI Непосредственный операнд в память с 16-битным смещением: КОП MOD КОП R/M DISP-LO DISP-HI DATA-LO DATA-HI В большинстве кодов операций имеются следующие однобитные индикаторы: Бит W. Если команда может оперировать и байтом, и словом, то в коде операции имеется бит W. Бит D. Содержится в двухоперандных командах (за исключением команд с непосредственным операндом и цепочечных команд). Одним из операндов должен быть регистр, определяемый полем REG. В таких командах бит D показывает, чем является регистр: операндом-источником (D=0) или операндом-получателем (D=1). Бит S. 8-битное число в дополнительном коде можно расширить - 9 - до 16-битного в дополнительном коде, если сделать все биты старшего байта равными старшему биту младшего байта. Такая операция называется расширением знака. Бит S появляется вместе с битом W в командах сложения, вычитания и сравнения с непосредственным операндом и расшифровывается следующим образом: - 8-битная операция - S=0 и W=0; - 16-битная операция с 16-битным непосредственным операндом - S=0, а W=1; - 16-битная операция с 8-битным непосредственным операндом, который расширяется со знаком до 16 бит - S=1 и W=1. При работе с небольшими числами последний вариант допускает использование однобайтного непосредственного операнда. Бит V. Применяется в командах сдвигов для определения числа сдвигов. Бит Z. Используется в команде REP. Сегментный регистр определяется двумя битами, а любой другой регистр - тремя.

Таблица адресов регистров: Адрес Регистры Адрес Сегментный регистра регистра регистр W=1 W=0 00 ES 000 AX AL 01 CS 001 CX CL 10 SS 010 DX DL 11 DS 011 BX BL 100 SP AH 101 BP CH 110 SI DH 111 DI BH Если на код операции и режим адресации отводится два байта, то второй байт имеет одну из следующих форм: MOD КОП R/M или MOD REG R/M Первая из них предназначена для однооперандных команд или для двухоперандных команд с неявным заданием одного из операндов.

Вторая форма характерна для двухоперандных команд, причем поле REG определяет регистр, который в зависимости от значения бита D является операндом-источником или операндом-получателем. . - 10 - Операнд, указываемый полями MOD и R/M, определяется в соответствии со следующей таблицей: MOD R/M 11 00 01 10 W=0 W=1 000 (BX)+(SI) (BX)+(SI)+D8 (BX)+(SI)+D16 AL AX Сегментный регистр DS DS DS 001 (BX)+(DI) (BX)+(DI)+D8 (BX)+(DI)+D16 CL CX Сегментный регистр DS DS DS 010 (BP)+(SI) (BP)+(SI)+D8 (BP)+(SI)+D16 DL DX Сегментный регистр SS SS SS 011 (BP)+(DI) (BP)+(DI)+D8 (BP)+(DI)+D16 BL BX Сегментный регистр SS SS SS 100 (SI) (SI)+D8 (SI)+D16 AH SP Сегментный регистр DS DS DS 101 (DI) (DI)+D8 (DI)+D16 CH BP Сегментный регистр DS DS DS 110 D16 (BP)+D8 (BP)+D16 DH SI Сегментный регистр DS SS SS 111 (BX) (BX)+D8 (BX)+D16 BH DI Сегментный регистр DS DS DS D8 - восьмибитное смещение, D16 - шестнадцатибитное смещение. Если MOD не равно 11, эффективный адрес вычисляется согласно таблице.

Отметим, что MOD = 00 означает отсутствие смещения, за исключением случая R/M = 110, который обозначает прямую адресацию.

Комбинация MOD = 01 означает, что третий байт команды содержит 8-битное смещение, которое до вычисления эффективного адреса автоматически расширяется со знаком до 16 бит. Если MOD = 10, то третий и четвертый байты команды содержат 16-битное смещение.

Наконец, в случае MOD = 11 операндом является регистр, адрес которого определяется полем R/M. В таблице также показаны сегментные регистры, используемые в каждой из комбинаций полей MOD и R/M. Эффективный адрес операнда в памяти определяется полями MOD и R/M, но 20-битный физический - 11 - адрес равен сумме эффективного адреса и содержимого сегментного регистра, умноженного на 16. В режимах адресации с привлечением регистра BP с эффективным адресом суммируется содержимое сегментного регистра SS, а в остальных режимах адресации участвует регистр DS. Чтобы изменить используемые в соответствии с таблицей сегментные регистры, предусмотрена специальная однобайтная команда, назывемая префиксом переопределения (замены) сегмента. Она имеет следующий формат: 0 0 1 REG 1 1 0 Если команде предшествует префикс переопределения сегмента, при обращении к данным в процессе ее выполнения участвует сегментный регистр REG. Регистр DS можно заменить на CS, SS или ES, а регистр SS при участии регистра BP - на DS, CS или ES. Замену нельзя производить в следующих специальных случаях: - при вычислении адреса следующей выполняемой команды в качестве сегментного регистра всегда применяется CS; - при участии в адресации регистра SP сегментным регистром всегда служит SS; - в цепочечных командах в качестве сегментного регистра операнда-получателя всегда используется ES. ВРЕМЯ ВЫПОЛНЕНИЯ КОМАНД Затраты времени на выполнение одной команды можно определить, умножая число тактов синхронизации, необходимых для выполнения команды, на период синхронизации. Это время можно выразить в виде суммы базового времени выполнения (которое зависит от команды и режима адресации) и времени вычисления эффективного адреса, если привлекается операнд из памяти.

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

Базовое время выполнения некоторых типичных команд микропроцессора 8086/8088: . - 12 - КОМАНДА ЧИСЛО ЧИСЛО ТАКТОВ ПЕРЕДАЧ ADD или SUB (cложить или вычесть) регистр - регистр 3 0 память - регистр 9 + EA 1 регистр - память 16 + EA 2 непосредственный - регистр 4 0 непосредственный - память 17 + EA 2 MOV (передать) аккумулятор - память 10 1 память - аккумулятор 10 1 регистр - регистр 2 0 память - регистр 8 + EA 1 регистр - память 9 + EA 1 непосредственный - регистр 4 0 непосредственный - память 10 + EA 1 регистр - сегментный регистр 2 0 память - сегментный регистр 8 + EA 1 сегментный регистр - регистр 2 0 сегментный регистр - память 9 + EA 1 MUL (умножить без знака) множитель - 8 бит, регистр 70 - 77 0 множитель - 16 бит, регистр 118 - 133 0 множитель - 8 бит, память (76 - 83) + EA 1 множитель - 16 бит, память (124 - 139) + EA 1 IMUL (умножить со знаком) множитель - 8 бит, регистр 80 - 98 0 множитель - 16 бит, регистр 128 - 154 0 множитель - 8 бит, память (86 - 104) + EA 1 множитель - 16 бит, память (134 - 160) + EA 1 DIV (разделить без знака) делитель - 8 бит, регистр 80 - 90 0 делитель - 16 бит, регистр 144 - 162 0 делитель - 8 бит, память (86 - 96) + EA 1 делитель - 16 бит, память (150 - 168) + EA 1 - 13 - IDIV (разделить со знаком) делитель - 8 бит, регистр 101 - 112 0 делитель - 16 бит, регистр 165 - 184 0 делитель - 8 бит, память (107 - 118) + EA 1 делитель - 16 бит, память (171 - 190) + EA 1 Команды сдвигов и циклических сдвигов регистр, на 1 бит 2 0 регистр, на переменное число бит 2 + 4/бит 0 память, на 1 бит 15 + EA 2 память, на переменное число бит 20 + EA + 4/бит 2 JMP (безусловный переход) короткий 15 0 внутрисегментный прямой 15 0 межсегментный прямой 15 0 внутрисегментный косвенный в регистровом режиме 11 0 внутрисегментный косвенный 18 + EA 1 межсегментный косвенный 24 + EA 2 Команды условного перехода JCXZ 6 (нет перехода) 0 18 (переход) Другие команды условного перехода 4 (нет перехода) 0 16 (переход) Третий столбец таблицы показывает число обращений к памяти, необходимых для выполнения команд. Чтобы определить время выполнения команды, в которой осуществляется обращение к полному слову памяти, следует учесть выравнивание операнда. Если слово имеет нечетный адрес, микропроцессор 8086 считывает его за два цикла шины, длящихся по 4 такта синхронизации. В микропроцессоре 8088 на передачу каждого слова необходимо прибавить 4 такта синхронизации, так как в цикле шины он может передать только один байт . - 14 - Время вычисления эффективного адреса зависит от режима адресации: ЭФФЕКТИВНЫЙ АДРЕС ЧИСЛО ТАКТОВ Прямой 6 Регистровый косвенный 5 Регистровый относительный 9 Базовый индексный (BP) + (DI) или (BX) + (SI) 7 (BP) + (SI) или (BX) + (DI) 8 Относительный базовый индексный (BP)+(DI)+DISP или (BX)+(SI)+DISP 11 (BP)+(SI)+DISP или (BX)+(DI)+DISP 12 Отметим, что некоторые команды имеют несколько отличающихся базовых времен выполнения в зависимости от режимов адресации.

Быстрее всего выполняются операции регистр-регистр.

Операция память-регистр выполняется быстрее, чем операция регистр-память.

Базовое время выполнения команд умножения, деления и сдвига зависит также от данных. ПЕРВЫЙ СЕМЕСТР ЛЕКЦИЯ N 20-21 ЯЗЫК АССЕМБЛЕРА МИКРОПРОЦЕССОРА 8086 Язык ассемблера представляет собой машинный язык в символической форме, которая более понятна и удобна человеку. Язык ассемблера микропроцессора Intel 8086 является довольно сложным, что в первую очередь объясняется сегментной организацией памяти и одновременной адресацией четырех сегментов. В языке имеется более 100 базовых символических команд, в соответствии с которыми ассемблер генерирует более 3800 машинных команд. Кроме того, в распоряжении программиста имеется более 20 директив, предназначенных для распределения памяти, инициализации переменных, условного ассемблирования и т.д.

Исходная программа на языке ассемблера представляет собой последовательность операторов.

Операторы обычно занимают одну строку.

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

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

Командные операторы определяют генерируемые ассемблером машинные команды; они содержат мнемонику и, при необходимости, один или два операнда.

Каждый командный оператор порождает одну машинную команду, формат которой зависит от способа задания операндов.

Операторы распределения данных резервируют ячейки памяти для данных программы.

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

Формат командных операторов Командные операторы записываются в следующем формате: {Метка:}{Префикс}Мнемоника {Операнд1}{,Операнд2} {;Комментарий} где фигурные скобки обозначают необязательные поля.

Рассмотрим назначение отдельных полей данного формата: 1) Метка представляет собой определяемое пользователем имя, заканчивающееся двоеточием.

Значением метки является текущее значение счетчика ячеек (адресов) в текущем сегменте кода, т.е. адрес отмеченной команды. Метки как операнды используются только в командах передачи управления, и при этом двоеточие в конце ссылки на метку не ставится. - 2 - 2) Префикс заставляет ассемблер сформировать один из префиксных байт - блокировки LOCK или повторения REP, который непосредственно предшествует команде. 3) Мнемоника кода операции представляет собой заранее определенное и неизменяемое имя, которое идентифицирует тип генерируемой машинной команды. 4) Операнды задают адреса данных или сами данные, необходимые в данной команде. 5) Комментарий предназначен только для документирования программы. Он всегда начинается с точки с запятой.

Формат директив ассемблера и операторов распределения данных Директивы ассемблера и операторы распределения данных имеют несколько иной формат: {Имя}Директива {Операнды}{;Комментарий} Рассмотрим назначение отдельных полей данного формата: 1) Имя директивы, в отличие от метки, никогда не заканчивается двоеточием.

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

Директивы используются программистом для распределения памяти, обеспечения связи между программными модулями и работы с символическими именами. 3) Операнды конкретизируют действия, выполняемые по данной директиве. 4) Поле комментария аналогично такому же полю в командных операторах. ЭЛЕМЕНТЫ ОПЕРАТОРОВ Дадим определения основных терминов, которые будут использованы в дальнейшем.

Ключевые (зарезервированные) слова представляют собой имена, имеющие для ассемблера строго определенный смысл. Их нельзя использовать в качестве идентификаторов.

Идентификатор как общий термин для меток и имен переменных - это определяемая программистом последовательность символов.

Первым символом в последовательности должна быть буква или один из символов @, подчеркивание или знак вопроса. В качестве последующих символов можно также использовать цифры.

Максимальная длина идентификатора 31 символ.

Ассемблер процессора 8086 является жестко типизированным языком. Это означает, что операнды команд (регистры, переменные, - 3 - метки, константы) имеют связанный с ними атрибут типа, который сообщает ассемблеру некоторую информацию об операнде.

Атрибут типа обычно подразумевается по умолчанию, но при необходимости может быть задан явно.

Регистры 8-разрядным регистрам AL, AH, BL, BH, CL, CH, DL, DH приписан тип BYTE, а 16-разрядным регистрам AX, BX, CX, DX, BP, SP, SI, DI и сегментным регистрам CS, DS, SS, ES приписан тип WORD. Разряды регистра флажков представляют собой однобитные регисты, для установки и сброса каждого из которых используются отдельные машинные команды.

Переменные При программировании может возникнуть необходимость многократного обращения к данным.

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

Переменная - это единица программных данных, имеющая символическое имя.

Большинство ассемблерных программ начинается с определения данных, которыми они будут оперировать.

Распределение ячеек памяти и присвоение им идентификаторов осуществляется с помощью директив DB (Define Byte - определить байт), DW (Define Word - определить слово), DD (Define Doubleword - определить двойное слово), DQ (Define Quadword - определить 4 слова) или DT (Define Tenbyte - определить 10 байтов). Операторы распределения данных имеют следующий формат: Имя DB нач.значение, {нач.значение}, ... Имя DW нач.значение, {нач.значение}, ... Имя DD нач.значение, {нач.значение}, ... Имя DQ нач.значение, {нач.значение}, ... Имя DT нач.значение, {нач.значение}, ... Таким образом, каждая директива может инициировать одну или несколько переменных соответствующего типа. Для задания начальных значений могут использоваться числовые константы и символьные цепочки. Если не нужно задавать начальное значение переменной, то вместо константы ставится вопросительный знак.

Например, оператор alpha DW 0Ah резервирует слово памяти, присваивает ему идентификатор alpha и заносит в него код 000A; string DB 'Привет' резервирует 6 байт памяти и заносит в них строку символов и - 4 - присваивает этой строке идентификатор string. Чтобы точно определить тип переменной, на которую производится ссылка, ассемблер использует операторы BYTE PTR, WORD PTR и DWORD PTR (указатель на байт, слово и двойное слово соответственно). Для инициализации массивов применяется конструкция DUP, которая в общем случае имеет вид: n DUP (нач. значение, {нач. значение}, ...) где параметр n задает число повторений элементов, находящихся в круглых скобках.

Например, оператор Addr DD 20 DUP (?) резервирует место для 20 полных адресов и присваивает этому массиву идентификатор Addr. Метки Метка представляет собой символическое имя для адреса ячейки памяти и предназначена для использования в качестве операнда в командах управления.

Числовые константы Константа - это численное значение, вычисляемое во время ассемблирования по заданному выражению.

Численные константы допускается представлять в системах счисления с основаниями 2, 8, 10 и 16. За младшей цифрой должен находиться однобуквенный дескриптор системы счисления: B - двоичная, O или Q - восьмеричная, D (необязательно) - десятичная, H-шестнадцатиричная.

Шестнадцатиричная константа должна быть дополнена слева незначащим нулем.

Символьные константы Символьная константа - это любой символ в коде ASCII. Символьная строка может содержать до 255 символов и должна быть заключена в одиночные кавычки. СЕГМЕНТЫ И ПРОЦЕДУРЫ Программы, написанные на языке ассемблера процессора 8086, могут быть разделены на один или несколько сегментов.

Каждый логический сегмент имеет уникальное имя и однозначно отображается в сегментах памяти при загрузке программы для ее выполнения. Для определения начальной и конечной ячеек логического сегмента в макроассемблере предусмотрены директивы SEGMENT (начало сегмента) и ENDS (конец сегмента). Обычно часть программы, содержащая коды машинных команд, - 5 - объединяется в кодовый сегмент.

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

Иногда для хранения данных может использоваться четвертый, дополнительный сегмент.

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

Стековый сегмент как правило один. СТЕМА КОМАНД МИКРОПРОЦЕССОРА 8086 Систему команд процессора 8086 образуют 113 базовых команд, многие из которых допускают использование разнообразных режимов адресации. По функциональному назначению выделяют спедующие группы команд: - команды передачи данных; - команды арифметических операций; - команды логических операций и сдвигов; - команды передачи управления; - цепочечные команды; - команды управления микропроцессором. _ КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ Команды передачи данных разделяют на 4 подгруппы: - общие команды передачи данных; - стековые команды; - команды ввода-вывода; - команды передачи цепочек байт или слов.

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

Исключение составляют команды POPF и SAHF, прямо воздействующие на регистр флажков. Далее будут использоваться следующие обозначения: dst - получатель, src - источник, mem - адрес памяти (смещение), заданный любым методом адресации, reg - регистр общего назначения, sreg - сегментный регистр, aс - регистр-аккумулятор (AL или AX), data - непосредственные данные. - 6 - ОБЩИЕ КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ В эту подгруппу входят команды, осуществляющие передачу регистр-регистр, регистр-память и память-регистр.

Наиболее мощной среди них является команда MOV. Команда MOV Эта команда имеет следующее обобщенное представление: MOV dst, src т.е. первым указывается операнд-получатель, а вторым - операндисточник. Одним из операндов обязательно должен быть регистр.

Команда осуществляет передачу: регистр - регистр, регистр - память, память - регистр, непосредственные данные - регистр, непосредственные данные - память, регистр - сегментный регистр, память - сегментный регистр, сегментный регистр - регистр, сегментный регистр - память.

Допустимые форматы команды: MOV mem/reg1, mem/reg2 MOV mem/reg, data MOV sreg, mem/reg MOV mem/reg, sreg Команда обмена XCHG Команда обмена XCHG позволяет обменивать содержимое любого общего регистра и ячейки памяти, а также любой пары общих регистров.

Формат команды: XCHG reg, mem/reg Команда XLAT Команда преобразования XLAT применяется для быстрого преобразования символов из одного кода в другой. Она заменяет содержимое аккумулятора AL на байт из 256-байтовой таблицы, начальный адрес которой находится в регистре BX, а восьмибитовое смещение - в регистре AL. В качестве сегментного используется регистр DS. Формат команды: XLAT - 7 - Команды LEA, LDS и LES Команды LEA, LDS и LES предназначены для загрузки эффективного адреса.

Команда LEA извлекает из памяти 16-битовый адрес и помещает его в один из общих регистров.

Практически эта команда дублирует один из вариантов команды MOV, но выполняется быстрее.

Команда LDS извлекает из памяти 32-битовый адрес и помещает первое считанное из памяти слово в заданный общий регистр, а второе - в сегментный регистр DS. Команда LES извлекает из памяти 32-битовый адрес и помещает первое считанное из памяти слово в заданный общий регистр, а второе - в сегментный регистр ES. Обычно в команде LDS указывается регистр SI, а в команде LES регистр DI. Формат команд: LEA reg, mem LDS reg, mem LES reg, mem Команды LAHF и SAHF Команда LAHF передает младший байт регистра флажков в регистр AH, а команда SAHF реализует обратную передачу - содержимое регистра AH передается в младший байт регистра флажков (старший байт не изменяется). Формат команд: LAHF SAHF СТЕКОВЫЕ КОМАНДЫ Каждая команда занесения данных в стек PUSH имеет соответствующую ей команду извлечения из стека POP. Для адресации вершины стека используется стековый указатель SP. Все стековые команды манипулируют только словами и сопровождаются автоматической модификацией указателя стека: при включении в стек производится декремент, а при извлечении из стека - инкремент SP. До выполнения стековых команд регистры SP и SS должны быть инициализированы.

Команда PUSH включает в стек содержимое адресуемого регистра или ячейки памяти, а команда POP извлекает содержимое вершины стека и передает его в регистр или ячейку памяти.

Команды POSHF и POPF предназначены для временного запоминания в стеке и последующего восстановления из стека содержимого регистра флагов. С их помощью можно изменять состояние флага трассировки TF, так как команд прямого воздействия на этот флаг нет. - 8 - Формат команд: PUSH mem/reg POP mem/reg PUSH sreg POP sreg PUSHF POPF КОМАНДЫ ВВОДА-ВЫВОДА Команда ввода IN и команда вывода OUT допускают работу как с байтами, так и со словами.

Команда IN загружает данные из заданного порта в аккумулятор, а команда OUT выполняет передачу из аккумулятора в порт. Для портов ввода-вывода в диапазоне 00-FF можно использовать прямую укороченную адресацию, а остальные порты в диапазоне 100-FFFF можно адресовать только косвенно через регистр DX. Формат команд: IN ac,port OUT port,ac (прямая укороченная адресация) IN ac,DX OUT DX,ac (косвенная адресация) _ КОМАНДЫ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ Процессор 8086 имеет широкий набор команд, реализующих арифметические операции, что позволяет применять его в сложных системах обработки данных.

Арифметические операции выполняются над целыми числами четырех типов: беззнаковыми двоичными, знаковыми двоичными, упакованными десятичными и неупакованными десятичными. Длина чисел может быть 8 или 16 бит.

Диапазоны чисел: беззнаковое 8-битное: 0 - 255, беззнаковое 16-битное: 0 - 65535, знаковое 8-битное: -128 - +127, знаковое 16-битное: -32768 - +32767. Команды арифметических операций влияют на состояние флажков OF, SF, ZF, AF, PF и CF. Одни и те же команды сложения и вычитания могут использоваться для операций как над беззнаковыми, так и знаковыми числами.

Контроль над типами чисел должен выполнять сам программист. КОМАНДЫ СЛОЖЕНИЯ Команда ADD Команда ADD позволяет производить сложение 8- или 16-битовых двоичных чисел в режиме регистр-регистр, регистр-память и памятьрегистр, причем адресация памяти осуществляется в любом допустимом режиме. Общее представление команды имеет вид ADD dst, src - 9 - т.е. первый операнд складывается со вторым и результат операции замещает первый операнд.

Формат команды: ADD mem/reg1,mem/reg2 ADD mem/reg,data Команда ADC Команда ADC выполняет сложение с переносом: в отличие от команды ADD в операции сложения участвует флажок CF, значение которого прибавляется к младшему биту результата сложения операндов.

Формат команды: ADC mem/reg1,mem/reg2 ADC mem/reg,data Команда INC Команда INC позволяет увеличить на 1 содержимое любого общего регистра или ячейки памяти.

Формат команды: INC mem/reg КОМАНДЫ ВЫЧИТАНИЯ Команда SUB позволяет производить вычитание 8- или 16-битных двоичных чисел. Общее представление команды имеет вид SUB dst, src т.е. второй операнд вычитается из первого и результат операции замещает первый операнд.

Формат команды: SUB mem/reg1,mem/reg2 SUB mem/reg,data Команда SBB Команда SBB выполняет вычитание с переносом: в отличие от команды SUB в операции вычитания участвует флажок CF, значение которого вычитается из младшего бита результата вычитания операндов.

Формат команды: SBB mem/reg1,mem/reg2 SBB mem/reg,data Команда DEC Команда DEC позволяет уменьшить на 1 содержимое любого общего регистра или ячейки памяти. - 10 - Формат команды: DEC mem/reg Команда NEG Команда NEG изменяет знак числа, находящегося в регистре или ячейке памяти, на противоположный.

Формат команды: NEG mem/reg КОМАНДА СРАВНЕНИЯ Команда сравнения CMP выполняет вычитание второго операнда из первого, но нигде не запоминает результат операции и влияет только на состояние флажков.

Формат команды: CMP mem/reg1,mem/reg2 CMP mem/reg,data КОМАНДЫ УМНОЖЕНИЯ Микропроцессор 8086 имеет две команды умножения: для беззнаковых и для знаковых двоичных чисел.

Умножение десятичных чисел требует использования специальных команд коррекции, которые будут рассматриваться позднее.

Команда MUL Команда умножения беззнаковых целых чисел MUL выполняет умножение адресуемого операнда на содержимое аккумулятора. Общее представление команды имеет вид MUL src При операции над байтами функции аккумулятора выполняет регистр AL, а 16-битный результат операции помещается в регистр AX. При операции над словами функции аккумулятора выполняет регистр AX, а произведение длиной 32 бита формируется в регистрах DX (старшее слово) и AX (младшее слово). Формат команды: MUL reg MUL mem Команда IMUL Команда IMUL аналогична команде MUL, но сомножители и произведение интерпретируются как знаковые двоичные числа в дополнительном коде.

Формат команды: IMUL reg - 11 - IMUL mem КОМАНДЫ ДЕЛЕНИЯ Микропроцессор 8086 имеет две команды деления: для беззнаковых и для знаковых двоичных чисел.

Деление десятичных чисел также требует использования специальных команд коррекции.

Команда DIV Команда деления беззнаковых чисел DIV производит деление содержимого аккумулятора и его расширения на содержимое адресуемого операнда. При делении 16-битного делимого на 8-битный делитель делимое помещают в регистр AX. В результате выполнения операции частное формируется в регистре AL, а остаток - в AH. При делении 32-битного делимого на 16-битный делитель старшая часть делимого помещается в регистр DX, а младшая - в AX. В результате выполнения операции частное формируется в регистре AX, а остаток - в DX. При делении на 0 автоматически происходит прерывание и переход к специальной программе обработки.

Формат команды: DIV reg DIV mem Команда IDIV Команда IDIV аналогична команде DIV, но делимое, делитель и частное интерпретируются как знаковые двоичные числа в дополнительном коде.

Формат команды: IDIV reg IDIV mem Команды преобразования Команда преобразования байта в слово CBW расширяет знак содержимого регистра AL в регистр AH. Команда преобразования слова в двойное слово CWD передает знак содержимого регистра AX во все биты регистра DX. Команды преобразования не влияют на состояния флагов.

Форматы команд: CBW CWD КОМАНДЫ ДЕСЯТИЧНОЙ АРИФМЕТИКИ - 12 - Микропроцессор 8086 допускает два представления десятичных чисел: упакованный формат (BCD-формат) и неупакованный (ASCIIформат). В формате BCD байт содержит две десятичные цифры (по одной в каждой тетраде). В ASCII-формате байт содержит одну десятичную цифру в коде ASCII. В обоих форматах многоразрядные десятичные числа представляются последовательностями байт.

Команды десятичной арифметики оперируют только с байтами, причем основным рабочим регистром во всех десятичных операциях является регистр AL. Операции с числами в форматах BCD и ASCII выполняются в два этапа: сначала над 8-битными операндами выполняются обычные операции двоичной арифметики, а затем осуществляется коррекция результата.

Команды коррекции являются безадресными, так как работают с содержимым аккумулятора AL. Команды для формата BCD Команда десятичной коррекции для сложения DAA выполняет коррекцию суммы, полученной в результате выполнения команд ADD и ADC и должна следовать непосредственно за ними.

Команда десятичной коррекции для вычитания DAS выполняет коррекцию разности, полученной в результате выполнения команд SUB и SBB и должна следовать непосредственно за ними.

Форматы команд: DAA DAS Команды для формата ASCII Команда десятичной коррекции для сложения AAA выполняет коррекцию суммы, полученной в результате выполнения команд ADD и ADC и должна следовать непосредственно за ними.

Команда десятичной коррекции для вычитания AAS выполняет коррекцию разности, полученной в результате выполнения команд SUB и SBB и должна следовать непосредственно за ними.

Команда десятичной коррекции для умножения AAM выполняет коррекцию произведения, полученного в результате выполнения команды MUL и должна следовать непосредственно за ней.

Старший разряд результата помещается в регистр AH, младший - в AL. Команда десятичной коррекции для деления AAD отличается тем, что должна выполняться перед командой деления DIV. Форматы команд: AAA AAS AAM AAD - 13 - _ КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ И КОМАНДЫ СДВИГОВ КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ Логические операции представлены командами NOT (инверсия), AND (конъюнкция), OR (дизъюнкция), XOR (исключающее ИЛИ) и командой TEST, которая выполняет конъюнкцию операндов, но не изменяет их значений. Все логические операции являются поразрядными, т.е. выполняются независимо для всех бит операндов.

Бинарные команды AND, OR, XOR и TEST воздействуют на флажки OF, SF, ZF, PF и CF. Унарная операция NOT не влияет на состояние флажков.

Форматы команд: AND mem/reg1,mem/reg2 AND mem/reg,data OR mem/reg1,mem/reg2 OR mem/reg,data XOR mem/reg1,mem/reg2 XOR mem/reg,data TEST mem/reg1,mem/reg2 TEST mem/reg,data NOT mem/reg КОМАНДЫ СДВИГОВ Команды сдвигов подразделяются на команды простых сдвигов и команды циклических сдвигов.

Циклические сдвиги влияют только на флаги OF и CF, а обычные изменяют пять флажков: OF, SF, ZF, PF и CF. Команды сдвигов могут работать как с байтами, так и со словами.

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

Команды RCL и RCR называются командами циклического сдвига влево и вправо через перенос, так как флажок CF расширяет сдвигаемый операнд на один бит. Таким образом, значение из CF загружается в освобождающийся бит, а выдвигаемый бит помещается в CF. Команды SHL и SHR реализуют логический сдвиг влево и вправо соответственно. Для логического сдвига характерно, что в освобождающийся бит загружается нуль, а выдвигаемый бит теряется.

Команды SAL и SAR предназначены для арифметического сдвига влево и вправо.

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

Арифметический сдвиг влево эквивалентен логическому, поэтому мнемоники SAL и SHL обозначают одну и ту же машинную команду.

Команды арифметического сдвига по существу реализуют умножение и деление чисел без знака на степень числа 2. - 14 - Поле операнда команд сдвига имеет вид mem/reg,count. Опреанд count определяет число сдвигов и может быть указан как константа 1 или как регистр CL. В первом случае выполняется сдвиг на один бит, а во втором число сдвигов определяется содержимым регистра CL, которое воспринимается как беззнаковое число.

Формат команды: ROL mem/reg,1 ROL mem/reg,CL ROR mem/reg,1 ROR mem/reg,CL RCL mem/reg,1 RCL mem/reg,CL RCR mem/reg,1 RCR mem/reg,CL SHL mem/reg,1 SHL mem/reg,CL SHR mem/reg,1 SHR mem/reg,CL SAL mem/reg,1 SAL mem/reg,CL SAR mem/reg,1 SAR mem/reg,CL _ КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ Сегментная организация программной памяти определяет две основные разновидности команд передачи управления.

Передача управления в пределах текущего сегмента кода называется внутрисегментной - при этом модифицируется только регистр IP и адрес перехода может быть представлен одним словом. Такая передача управления называется ближней (тип NEAR), а ее вариант с сокращеннным диапазоном адресов переходов - короткой.

Передача управления за пределы текущего сегмента кода называется межсегментной или дальней (тип FAR) - при этом необходимо модифицировать содержимое регистров IP и CS и адрес перехода представляется двумя словами (сегмент:смещение). Команды передачи управления процессора 8086 подразделяются на команды безусловных переходов, условных переходов, вызовов, возвратов, управления циклами и команды прерываний.

Команды передачи управления не изменяет состояние регистра флагов (за исключением команды IRET). КОМАНДЫ БЕЗУСЛОВНЫХ ПЕРЕХОДОВ Команды безусловного перехода имеют общую мнемонику JMP. Команда короткого безусловного перехода содержит во втором байте смещение, которое интерпретируется как знаковое целое.

Диапазон значений байта смещения составляет -128 - +127. Если смещение положительное, осуществляется переход вперед, а если отрицательное - переход назад.

Команда ближнего безусловного перехода может либо непосредственно содержать 16-битное смещение, либо косвенный адрес 16-битного смещения.

Диапазон смещения составляет -32768 - +32767 байт относительно адреса команды, находящейся после команды JMP. Команда дальнего безусловного перехода реализует прямой и - 15 - косвенный межсегментнные переходы.

Форматы команд: JMP dispL - короткий переход JMP disp - ближний прямой переход JMP mem/reg - ближний косвенный переход JMP addr - дальний прямой переход JMP mem - дальний косвенный переход КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ В системе команд процессора 8086 имеется 19 двухбайтных команд условных переходов. При выполнении этих команд анализируется некоторое условие, закодированное текущими состояниями флагов, и если оно выполняется, то осуществляется переход, а если нет, то выполняется следующая по побядку команда. Все условные переходы являются короткими.

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

Мнемонические обозначения команд: 1) Команды для работы с беззнаковыми числами: JA/JNBE - переход, если больше; JAE/JNB/JNC - переход, если больше или равно; JB/JNAE/JC - переход, если меньше; JBE/JNA - переход, если меньше или равно. 2) Команды для работы со знаковыми числами: JG/JNLE - переход, если больше; JGE/JNL - переход, если больше или равно; JL/JNGE - переход, если меньше; JLE/JNG - переход, если меньше или равно; JNS - переход, если больше нуля; JS - переход, если меньше нуля. 3) Команды, общие для знаковых и беззнаковых чисел: JE/JZ - переход, если равно / переход, если ноль; JNE/JNZ - переход, если не равно / переход, если не ноль; JNO - переход, если нет переполнения; JO - переход, по переполнению. 4) Прочие команды: JCXZ - переход, если содержимое регистра CX равно нулю; JNP/JPO - переход при отсутствии четности; JP/JPE - переход по четности.

Форматы команд такие же, как у короткого безусловного перехода. КОМАНДЫ ВЫЗОВОВА ПОДПРОГРАММ Команда вызова подпрограммы CALL передает управление с автоматическим сохранением адреса возврата в стеке. В поле операнда этой команды находится метка первой команды вызываемой подпрог- - 16 - раммы. При переходе к подпрограмме необходимо временно запомнить адрес команды, находящейся после команды CALL. Этот адрес называется адресом возврата. После того, как подпрограмма закончит свои действия, завершающая ее команда возврата RET передает управление по запомненному адресу возврата. Адрес возврата запоминается в стеке.

Вызовы могут быть внутрисегментными (тип NEAR) или межсегментными (тип FAR). В первом случае вызываемая подпрограмма находится в текущем сегменте кода, а во втором - в произвольном.

Команды внутрисегментного перехода производят декремент SP на 2, включают в стек содержимое IP, а затем прибавляют к IP 16-битное смещение, которое интерпретируется как знаковое целое.

Команды межсегментного перехода производят декремент SP на 2, включают в стек содержимое CS, снова производят декремент SP на 2, включают в стек содержимое IP, затем в IP загружается значение смещения, а в CS - сегментный адрес.

Формат команды: CALL disp - непосредственный ближний вызов; CALL mem/reg - косвенный ближний вызов; CALL addr - непосредственный дальний вызов; CALL mem - косвенный дальний вызов. КОМАНДЫ ВОЗВРАТА ИЗ ПОДПРОГРАММ Каждая подпрограмма должна содержать минимум одну команду возврата RET, которая возвращает управление вызывающей программе. Такая передача управления осуществляется путем извлечения из стека адреса возврата, включенного в него командой вызова подпрограммы.

Команды внутрисегментного и межсегментного возврата имеют одну и ту же мнемонику RET. Тип команды, соответствующей этой мнемонике, определяется ассемблером автоматически.

Формат команды: RET - однобайтный вариант, RET data - трехбайтный вариант.

Однобайтная команда RET с кодом операции C3 реализует внутрисегментный возврат. Она передает слово из вершины стека в IP и увеличивает SP на 2. Однобайтная команда RET с кодом операции CB осуществляет межсегментный возврат. Она передает слово из вершины стека в IP, увеличивает SP на 2. передает слово из вершины стека в CS и снова увеличивает SP на 2. Трехбайтные варианты команд возврата осуществляют те же действия, что и однобайтные, а затем прибавляют содержащиеся в них данные к указателю стека. Эти команды предназначены для упрощения возврата из тех подпрограмм, параметры которых передаются в стеке.

Прибавление к SP данных из RET эквивалентно удалению пара- - 17 - метров из стека. КОМАНДЫ УПРАВЛЕНИЯ ЦИКЛАМИ Три команды управления циклами применяются для организации программных циклов. В них предусматривается использование регистра CX в качестве счетчика цикла. В поле операнда команд управления циклами находится метка первой команды цикла (8-битовое смещение). Диапазон переходов этих команд составляет -128 - +127 байт от следующей команды.

Команда LOOP производит декремент регистра CX и, если содержимое CX не равно нулю, происходит переход к началу цикла. В противном случае выполняется следующая по порядку команда.

Мнемоники LOOPE/LOOPZ определяют одну и ту же машинную команду, которая производит декремент регистра CX, а затем передает управление в начало цикла, если содержимое CX не равно нулю и ZF=1. В противном случае выполняется следующая по порядку команда.

Мнемоники LOOPNE/LOOPNZ также определяют одну и ту же машинную команду, которая производит декремент регистра CX, а затем передает управление в начало цикла, если содержимое CX не равно нулю и ZF=0. В противном случае выполняется следующая по порядку команда. КОМАНДЫ ПРЕРЫВАНИЙ В процессоре 8086 имеются 3 команды, относящиеся к прерываниям.

Команда программного прерывания INT вызывает программу обработки, определяемую типом прерывания.

Формат команды: INT type - вызов прерывания с номером type (от 0 до 255), INT - вызов прерывания контрольного останова (номер 3). Команда INT выполняется следующим образом: 1) декремент указателя стека на 2; 2) включение в стек содержимого регистра флажков; 3) сброс флажков IF и TF; 4) декремент указателя стека на 2; 5) включение в стек содержимого регистра CS; 6) определение адреса вектора прерывания ADDRESS путем умножения кода типа прерывания на 4; 7) загрузка в регистр CS слова памяти, расположенного по адресу ADDRESS+2; 8) декремент указателя стека на 2; 9) включение в стек содержимого IP; 10) загрузка в регистр IP слова памяти, расположенного по адресу ADDRESS. В результате этих действий осуществляется межсегментный кос- - 18 - венный вызов подпрограммы обработки прерывания.

Команда прерывания при переполнении INTO генерирует программное прерывание только в том случае, если установлен флаг переполнения. Она вызывает прерывание с номером 4. Формат команды: INTO Команда возврата из прерывания IRET предназначена для выхода из подпрограммы обработки прерываний, инициированной аппаратно или программно.

Команда IRET выполняется следующим образом: 1) слово из вершины стека передается в IP; 2) производится инкремент SP на 2; 3) слово из вершины стека передается в CS; 4) производится инкремент SP на 2; 5) слово из вершины стека передается в регистр флагов; 6) производится инкремент SP на 2. Формат команды: IRET _ ЦЕПОЧЕЧНЫЕ КОМАНДЫ Под цепочкой понимается последовательность любых контекстно связанных байт или слов, находящихся в смежных ячейках памяти. В системе команд процессора 8086 имеется 5 команд, предназначенных для обработки одного элемента цепочки.

Цепочечной команде может предшествовать специальный однобайтный префикс повторения REP, который вызывает повторение действия команды над следующими элементами цепочки.

Повторение расчитано на максимальную длину цепочек 64 Кбайт и выполняется значительно быстрее цикла LOOP. Цепочечные команды могут иметь операнд-источник, операндполучатель или и то и другое одновременно.

Подразумевается, что цепочка-источник по умолчанию находится в текущем сегменте данных, но допускается префикс замены сегмента.

Цепочка-получатель может находиться только в текущем дополнительном сегменте. При этом содержимое регистра SI всегда считается смещением текущего элемента цепочки-источника, а содержимое регистра DI - смещением текущего элемента цепочки-получателя.

Необходимые в команде индексные и сегментные регистры должны быть инициализированы до ее выполнения. При выполнении цепочечной команды содержимое регистров SI и DI автоматически изменяется, чтобы адресовать следующие элементы цепочек. Флаг направления DF определяет автоинкремент (DF=0) или автодекремент индексных регистров. Если команде предшествует префикс повторения, то после каждого ее выполнения производится декремент регистра-счетчика CX, поэтому его необходимо предварительно инициализировать на - 19 - требуемое число повторений. Когда содержимое CX достигает нуля, управление передается следующей команде.

Префикс повторения Префикс повторения имеет 5 мнемокодов: REP, REPE, REPZ, REPNE, REPNZ. Префикс REP используется с командами MOVS и STOS и вызывает повторение операции до тех пор, пока содержимое CX не равно 0. Префиксы REPE и REPZ соответствуют тому же коду команды, что и мнемоника REP, но используются совместно с командами CMPS и SCAS. Они вызывают повторение операции до тех пор, пока ZF=1 и содержимое CX не равно 0. Префиксы REPNE и REPNZ соответствуют одному коду команды, и используются совместно с командами CMPS и SCAS. Они вызывают повторение операции до тех пор, пока ZF=0 и содержимое CX не равно 0. Команда MOVS Команда MOVS передает байт или слово из цепочки, адресуемой регистром SI, в цепочку, адресуемую регистром DI. Команда передачи цепочки байт MOVSB после пердачи байта увеличивает содержимое регистров SI и DI на 1, а команда передачи цепочки слов MOVSW после передачи слова увеличивает их содержимое на 2. Формат команды: MOWSB MOVSW Команда CMPS Команда сравнения цепочек CMPS производит вычитание байта или слово цепочки, адресуемой регистром DI, из байта или слова цепочки, адресуемой регистром SI. В зависимости от результата вычитания устанавливаются флаги, но сами операнды не изменяются.

Команда сравнения цепочек байт CMPSB после каждой операции сравнения увеличивает содержимое регистров SI и DI на 1, а команда сравнения цепочек слов CMPSW - на 2. Формат команды: CMPSB CMPSW Команда SCAS Команда сканирования цепочки SCAS вычитает элементы цепочки, адресуемой регистром DI, из содержимого аккумулятора AL (при работе с байтами) или AX (при работе со словами). В зависимости от результата вычитания устанавливаются флаги, но сами операнды - 20 - не изменяются.

Команда сканирования цепочки байт SCASB после каждой операции сканирования увеличивает содержимое регистра DI на 1, а команда сканирования цепочки слов SCASW - на 2. Формат команды: SCASB SCASW Команда LODS Команда загрузки цепочки в аккумулятор LODS загружает элементы цепочки, адресуемой регистром SI, в аккумулятор AL или AX. Команда загрузки цепочки байт LODSB после выполнения каждой операции увеличивает содержимое регистра SI на 1, а команда загрузки цепочки слов LODSW - на 2. Формат команды: LODSB LODSW Команда STOS Команда запоминания содержимого аккумулятора в цепочке STOS передает содержимое аккумулятора в элемент цепочки, адресуемый регистром DI. Команда запоманания цепочки байт STOSB после выполнения каждой операции увеличивает содержимое регистра DI на 1, а команда запоминания цепочки слов STOSW - на 2. Формат команды: STOSB STOSW _КОМАНДЫ УПРАВЛЕНИЯ МИКРОПРОЦЕССОРОМ Команды данной группы обеспечивают программное управление различными функциями процессора. Они делятся на две подгруппы: команды установки флагов и команды синхронизации. КОМАНДЫ УСТАНОВКИ СОСТОЯНИЯ ФЛАГОВ Команды этой группы предназначены для управления состоянием отдельных флагов.

Команды CLC, CMC и STC выполняют соответственно сброс, инвертирование и установку в состояние 1 флага CF. Они часто используются совместно с командами сдвига через перенос RCR и RCL. Форматы команд: CLC CMC STC Команды CLD и STD осуществляют сброс и установку флага нап- - 21 - равления DF. Состояние этого флага определяет автодекремент или автоинкремент индексных регистров SI и DI в цепочечных командах.

Форматы команд: CLD STD Команды CLI и STI осуществляют сброс и установку флага прерываний IF. После выполнения команды CLI маскируемые аппаратные прерывания будут запрещены.

Форматы команд: CLI STI КОМАНДЫ СИНХРОНИЗАЦИИ Команда останова HLT переводит процессор в состояние останова. Из этого состояния процессор может быть выведен или сигналом сброса, или аппаратным прерыванием.

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

Команда LOCK, именуемая также префиксом блокировки, блокирует доступ других подсистем к шине процессора.

Префикс LOCK может находиться перед любой командой.