
- •2. Учебно-методический блок
- •2.1 Теоретическая часть
- •Краткая история развития компьютерной техники.
- •2. Ко времени ее реализации должна быть достаточно развита техническая база для реализации идеи в массовом масштабе.
- •3. В практической реализации этой идеи должна быть заинтересована значительная часть общества (должен «созреть» социальный заказ).
- •2. Обобщенная структурная схема компьютера
- •3.Оценка производительности компьютеров
- •4. Классификация и краткий обзор современных компьютеров
- •Суперкомпьютеры
- •Мини-компьютеры
- •Микроконтроллеры
- •5. Формы представления информации в компьютере.
- •5.1. Кодирование в компьютерах числовой информации.
- •Десятичная:
- •Шестнадцатеричная:
- •Двоично-десятичная:
- •5.2. Кодирование в компьютерах символьной (алфавитно-цифровой) информации.
- •5.3 Кодирование в компьютерах звуковой информации.
- •5.4 Кодирование в компьютерах визуальной информации.
- •Основы компьютерной арифметики.
- •1. Операции сложения и вычитания целых чисел.
- •2. Операции с вещественными числами.
- •7. Элементная база компьютера.
- •8. Структура и функционирование cpu.
- •9. Способы адресации информации
- •10. Система прерываний компьютера.
- •Основные понятия.
- •Основные характеристики систем прерывания.
- •4. Классификация систем прерывания.
- •11. Принципы организации системы ввода/вывода в компьютерах.
- •Общие положения
- •3. Ввод/вывод по прерыванию.
- •4. Ввод/вывод с прямым доступом к памяти.
- •12. Конструктив атх рс и архитектура системной платы
- •13. Устройства ввода информации
- •1. Клавиатура
- •2. Мышь.
- •14. Организация оперативных запоминающих
- •1. Общие принципы функционирования
- •2. Тайминги
- •3. Тенденции развития
- •4. Распределение адресного пространства оп пк.
- •2.2 Лабораторный практикум
- •2.3 Методические рекомендации для преподавателей и студентов
- •2.3.1.Методические рекомендации по изучению дисциплины для преподавателя
- •2.3.2. Методические рекомендации для студентов
- •2.3.3. Методические рекомендации для применения активных и интерактивные формы проведения занятий
- •3.Глоссарий
- •Диагностико-контролирующий блок
- •Тест по теме: «Архитектура компьютеров» Вариант №1
- •Тест по теме: «Архитектура пк» Вариант №2
- •Блок наглядно-демонстрационного материала
1. Операции сложения и вычитания целых чисел.
Операции сложения и вычитания целых чисел без знака.
При осуществлении операций с двоичными целыми числами без знака используется обычная двоичная арифметика, включающая как операцию сложения, так и операцию вычитания, используя только прямые коды чисел. Поскольку операции умножения и деления сводятся к операциям сложения, вычитания и сдвига, то это также справедливо и для них. При этом перенос из старшего разряда при сложении и заем при вычитании сопровождается установкой в 1 флага CF. При сложении, это характеризует переполнение разрядной сетки, а при вычитании – получения отрицательного результата. В этом последнем случае, результат получается представленным в дополнительном коде. Переполнения разрядной сетки при операции вычитания не может быть принципиально.
Отметим, при этом, что при операциях сложения и вычитания целых чисел без знака, флаг OF не определен.
Примеры:
1. 11011011 : В результате операции произошел перенос из старшего разряда, следова-
+ : тельно, произошло переполнение разрядной сетки и результат является
10100011 : недостоверным. (219 + 162 = 387). Состояния флагов:
-------------- : SF=1; ZF=0; AF=0; PF=0; CF=1;
1: 10001111 :
2. 10011001 : Переноса из старшего разряда нет, результат достоверный. (155+99=252).
+ : Состояние флагов: SF=1; ZF=0; AF=0; PF=1; CF=0:
01100011 :
--------------:
11111100 :
3. 11010101 : Результат положителен и представлен в прямом коде.(213 – 178 = 35).
- : Состояние флагов: SF=0; ZF=0; AF=0; PF=0; CF=0.
10110010 :
-------------
00100011 :
10101110 : Перенос из старшего разряда свидетельствует о том, что результат
- : является отрицательным и представлен в дополнительном коде.
11000110 : (174 – 198 = −24).
--------------- : Состояние флагов: SF=1; ZF=0; AF=0; PF=1; CF=1.
1: 11101000 :
Особенности операций сложения и вычитания в компьютерах
двоично-десятичных чисел без знака.
Операции с двоично-десятичными числами осуществляются на тех же сумматорах, на которых осуществляются операции с двоичными числами и по тем же основным правилам двоичной арифметики. Однако для того, чтобы результаты сложения и вычитания были также представлены в двоично-десятичном коде, часто требуется вводить специальную коррекцию в коды, полученные после сложения и вычитания.
При суммировании коррекция производится в случае, если значение какой-либо тетрады (четырех двоичных разрядов, кодирующих десятичную цифру) полученного результата будет больше 1001 или, если есть перенос из данной тетрады в более старшую. Наличие такого переноса процессором определяется по состоянию флагов AF и CF. Дело в том, что, используя 4 двоичных разряда для представления одной десятичной цифры мы, фактически, реализуем шестнадцатеричную систему счисления. Однако, вычислительные операции должны проводиться с числами в двоично-десятичной системе счисления с весами разрядов 8421, в которой 6 кодов тетрады (1010, 1011, 1100, 1101, 1110 и 1111) являются запрещенными, их быть не должно. А поскольку для осуществления операций сложения и вычитания используются обычные двоичные сумматоры, перенос между разрядами происходит как при работе с шестнадцатеричными числами, т.е. после кода 1111 (1510), а не 1001 (1010), как это должно быть при двоично-десятичной системе счисления. Поэтому, для формирования результата в требуемой двоично-десятичной системе, и должна производиться коррекция результата, путем добавления числа 0110 (610) в те тетрады результата, значение которых больше 1001 или, если из этой тетрады был перенос в более старшую тетраду (6 = 16 – 10→ разница между основаниями шестнадцатеричной и десятичной систем счисления).
Таким образом, операция суммирования двух двоично-десятичных кодов без знака осуществляется по следующему алгоритму.
- Осуществляется операция суммирования двух исходных двоично-десятичных кодов, рассматривая их как обычные двоичные коды без знака.
- Если результат суммирования в какой-либо тетраде двоичного результата будет > 9, или произойдет перенос из этой тетрады в более старшую (CF=1 или AF=1), то в данной тетраде производится коррекция суммирования.
- Коррекция суммирования заключается в том, что в этих тетрадах к результату суммирования прибавляется 0110.
Примеры:
01000110 : (46 + 38 = 84).
+ : Состояние флагов: SF=1; ZF=0; AF=1; PF=1; CF=0.
00111000 : Поскольку флаг CF=0; переноса из старшего разряда а, следователь-
------------ : но и переполнения разрядной сетки, нет, и результат достоверен.
01111110 : Однако есть перенос из младшей тетрады в старшую (AF=1).
+ : Это означает, что необходимо ввести коррекцию в младшую тетра-
0110 : ду, т.е. прибавить к ней 0110.
------------ :
10000100 :
2. 01001001 : (49 + 58 = 107).
+ : Состояние флагов: SF=0; ZF=0; AF=1; PF=0; CF-1.
01011000 : Есть перенос из младшей тетрады в старшую и, кроме того, старшая
-------------- : тетрада результата содержит код, больший 1001. Следовательно, и
10100001 : в младшую и в старшую тетраду должна быть внесена коррекция.
+ : После коррекции происходит перенос из старшего разряда резуль-
01100110 : тата, что характеризует переполнение разрядной сетки и указывает
--------------- : недостоверность результата.
1: 00000111 :
3. 01010010 : (52 + 34 = 86).
+ : Состояние флагов: SF=1; ZF=0; AF=0; PF=0; CF=0.
00110100 : Переноса из младшей тетрады в старшую нет, и обе тетрады
------------- : не превышают значения 1001. Следовательно, коррекция не
10000110 : требуется.
Операция вычитания целых двоично-десятичных чисел осуществляется похожим образом, но имеет ту особенность, что при вычитании переполнение разрядной сетки не может произойти принципиально, однако при вычитании уменьшаемое может оказаться меньше вычитаемого. При этом возникает заем из старшего разряда, который фиксируется, аналогично переносу, установкой флага CF в единицу. Это характеризует отрицательный результат и, следовательно, он будет представлен в дополнительном коде, который необходимо преобразовать в прямой код и только после этого корректировать результат. Коррекция, как и в случае сложения осуществляется либо при значении декады больше 1001, либо при установки флагов CF или AF в единицу.
Таким образом, алгоритм вычитания двоично-десятичных целых чисел сводится к следующему.
- Осуществляется операция вычитания двух двоично-десятичных чисел, рассматриваемых как обычные двоичные числа.
- Если результат положительный (уменьшаемое больше вычитаемого), флаг CF=0, и результат анализируется на состояние флага AF и на полученные значения тетрад. Если значение тетрады больше 9, или флаг, AF=1, то из соответствующей тетрады вычитается константа 0110.
- Если результат отрицательный (CF=1), то полученный двоичный код результата является дополнительным, он преобразуется в прямой код, который затем корректируется по тетрадно, т.е., при значении данной тетрады больше 1001, из нее вычитается константа 0110.
Примеры:
1. 10000011 : (83 – 61 = 22).
- : Состояния флагов: SF=0; ZF=0; AF=0; PF=1; CF=0.
01100001 : Переносов из тетрад нет, и обе они меньше 1001.
------------- : Коррекция не требуется.
00100010 :
2. 10000001 : (81 – 69 = 12).
- : Состояние флагов: SF=0; ZF=0; AF=1; PF=1; CF=0.
01101001 : Поскольку есть перенос из младшей тетрады в старшую (AF=1),
------------- : в младшую тетраду вводится коррекция.
00011000 :
- :
0110 :
------------- :
00010010 :
3. 00011000 : (18 – 87 = − 69).
- : Состояние флагов: SF=1; ZF= 0; AF=0; PF=0; CF=1.
10000111 : Поскольку есть перенос из старшего разряда (CF=1), то
-------------- : результат отрицательный и получен в дополнительном коде.
1: 10010001 : Результат в дополнительном коде.
1: 01101111 : Результат в прямом коде. Младшая тетрада больше 1001,
- : и, следовательно, производится коррекция младшей тетрады.
0110 :
--------------- :
1: 01101001 : Прямой двоично-десятичный код результата.
Примечание. Введение коррекций при программировании на языке Ассемблера операций сложения и вычитания двоично-десятичных чисел в кодах ASCII, реализуется при подаче команды AAA, после команды операции сложения, и AAS, после команды операции вычитания.
Если же производятся операции сложения или вычитания двоично-десятичных кодов в упакованных форматах, то после команды сложения, для коррекции результата, надо ввести команду DAA, а при вычитании – команду DAS.
Операции сложения и вычитания целых чисел со знаком.
При представлении целых чисел со знаком, старший разряд кода является разрядом знака, в котором положительные числа кодируются 0, а отрицательные – 1. При этом, положительные числа представляются прямым кодом, а отрицательные – дополнительным. Так они хранятся и в оперативной памяти компьютера.
При сложении целых чисел со знаком операция сводится к обычному сложению кодов чисел, включая и знаковый разряд. При осуществлении операции вычитания, код вычитаемого преобразуется в дополнительный код (учитывая и знаковый разряд) и суммируется с кодом уменьшаемого.
Знак результата и в том, и в другом случае определяется автоматически по состоянию знакового разряда. Признак переполнения разрядной сетки результата, в этом случае, определяется функцией неравнозначности переносов в знаковый разряд результата и из его знакового разряда. Если же при осуществлении операции имеются оба этих переноса, или они оба отсутствуют, то переполнения разрядной сетки отсутствует и результат является достоверным.
Примеры:
1. 11001101 : (− 51) + (− 81) = (− 132).
+ : Состояние флагов: OF=1; SF=0; ZF=0; AF=1; PF=0; CF=1.
10101111 : Переноса в знаковый разряд нет, но перенос из знакового
-------------- : разряда есть. Следовательно, имеет место отрицательное
1: 01111100 : переполнение разрядной сетки и результат недостоверный.
2. 01010101 : (+85) + (+ 75) = (+160).
+ : Состояние флагов: OF=1; SF=1; ZF=0; AF=1; PF=1; CF=0.
01001011 : Перенос в знаковый разряд есть, но переноса из знакового
------------- : разряда нет. Следовательно, имеет место положительное
10100000 : переполнение разрядной сетки и результат недостоверный.
3. 00010011 : (+ 19) + (+79) = (+98).
+ : Состояние флагов: OF=0; SF=0; ZF=0; AF=1; PF=0; CF=0.
01001111 : Нет переносов ни в знаковый разряд, ни из знакового разряда:
------------- : результат достоверный, положительный, в прямом коде.
01100010 :
4. 10011110 : (−98) + (−15) = (−113).
+ : Состояние флагов: OF=0; SF=1; ZF=0; AF=0; PF=0; CF=1.
11110001 : Есть перенос и в знаковый разряд и из знакового разряда:
--------------- : результат достоверный, отрицательный, в дополнительном
1: 10001111 : коде.
5. 00111011 00111011 : (+ 59) − (− 37) = (+ 96).
− → + : Состояние флагов: OF=0; SF=0; ZF=0; AF=1;
11011011 00100101 : PF=1; CF=0;
------------- -------------- : Переносов в знаковый и из знакового разряда
01100000 : нет: результат достоверный, положительный,
: в прямом коде.
6. 10110111 10110111 : (− 73) − (+ 69) = (− 142).
− → + : Нет переноса в знаковый разряд, но есть пере-
01000101 10111011 : нос из знакового разряда: результат недосто-
------------ --------------- : верный, имеет место переполнение разрядной
1: 01110010 : сетки.
: Состояние флагов: OF=1; SF=0; ZF=0; AF=1;
: PF=1; CF=1.
При использовании операций сложения и вычитания двоично-десятичных чисел со знаком, алгоритм их проведения остается тем же, однако особенностью этих операций является способ преобразования прямых кодов двоично-десятичных чисел в дополнительные и дополнительных в прямые. Ниже приведен пример преобразования прямых двоично-десятичных кодов в дополнительные (аналогично производится и преобразование дополнительных двоично-десятичных кодов в прямые).
00110111 - прямой двоично-десятичный код числа 37;
11001001 – дополнительный код исходного двоичного кода;
-
01100110 – вычитание из тетрад константы 0110;
-------------
01100011 – дополнительный код исходного двоично-десятичного
числа – 63.
Операции умножения и деления двоичных целых чисел.
Операции умножения и деления чисел, по сравнению с операциями сложения и вычитания существенно сложнее. Поэтому для них разработано очень много алгоритмов, отличающихся по критериям сложности реализации и быстроты выполнения. Отметим только основные принципы их выполнения. Прежде всего, заметим, что при реализации операций и умножения и деления используются как комбинационные, так и накапливающие схемы обработки. Комбинационные схемы более быстродействующие, но накапливающие более просты.
Принципы умножения чисел сводятся к последовательности операций сложения и сдвига, а принципы деления – к последовательности операций вычитания и сдвига.
Перед осуществлением собственно умножения чисел всегда выполняются две предварительные операции:
Анализ сомножителей на равенство 0. При равенстве 0 хотя бы одного из сомножителей, умножение как таковое не производится, а результату (произведению) автоматически присваивается нулевое значение.
Если ни один из сомножителей не равен 0, определяется знак произведения, как функции неравнозначности знаковых разрядов сомножителей (Sпр= S1
S2).
Перед осуществлением собственно деления чисел всегда выполняются предварительно четыре операции.
Анализ делителя и делимого на 0. При делителе = 0, процесс прекращается, и процессор уходит на прерывание, сообщая об этом пользователю. Если равно 0 делимое, процесс также прекращается, и в регистр результата сразу записываются нули.
Анализ на необходимость выполнения деления, т.е. выяснение, не меньше ли делимое делителя. Для этого производится предварительная операция вычитание делителя из делимого, выровненных по младшему разряду. Если при этом получается отрицательный результат, то делитель больше делимого и, поскольку в процессоре осуществляется только целочисленное деление, в регистр частного сразу записывается 0. Затем восстанавливается содержимое регистра делимого, путем сложения этого отрицательного результата с содержимым аккумулятора, где хранилось делимое, и это восстановленное значение делимого рассматривается как остаток.
Анализ на возможность достоверного деления заданных операндов, так как при слишком малом делителе результат может выйти за пределы разрядной сетки, т.е. произойдет переполнение разрядной сетки результата. Для такого анализа производится предварительная операция вычитания делителя из делимого, выровненных по старшим единичным разрядам. Если при этом получается положительный результат, то частное не войдет в разрядную сетку и процессор уйдет на прерывание.
Определяется знак частного, как функции неравнозначности знаковых разрядов делимого и делителя.