- •Введение
- •1.1. Основные направления эволюции микрокомпьютеров
- •1.2. Основные сведения о компьютерах
- •1.3. Представление чисел
- •Заключение
- •Лекция 2 машинная организация процессора 80286
- •2.1. Введение
- •2.2. Структура памяти
- •2.3. Сегментация памяти
- •2.4. Структура ввода-вывода
- •2.5. Регистры
- •2.6. Операнды и режимы адресации операндов
- •2.7. Замечания о режимах адресации
- •Глава 3 базовая система команд процессора 80286
- •3.1. Нотация языка ассемблера
- •3.2. Команды передач данных
- •3.3. Арифметические команды
- •Лекция 6. Цепочечные команды
- •Лекция 7. Команды безусловной передачи управления
- •Лекция 8. Команды условной передачи управления
- •Лекция 9. Прерывания
- •Int n
- •Лекция 10. Флажковые команды
- •3.10. Команды синхронизации
- •3.11. Поддержка языков высокого уровня
- •3.12. Замечания о префиксах
- •3.13. Воздействие на флажки
- •Заключение
1.2. Основные сведения о компьютерах
Предполагается, что читатели знакомы с принципами построения компьютеров, поэтому мы дадим здесь только краткий обзор. Компьютер получает данные от устройств ввода, обрабатывает их и передает окончательные результаты в устройство вывода. Выполняемая обработка определяется последовательностью команд (инструкций), называемой программой.Программа хранится в памяти компьютера.
Операциями компьютера управляет центральный процессор, или просто процессор. Он выбирает команды из памяти, декодирует их и выполняет операции, предписанные командами. Чтобы выполнять операции, процессор должен посылать управляющие сигналы в другие устройства компьютера. Операции, производимые ими при выполнении команды, состоят из пересылок данных и вычислений. Память компьютера хранит исходные данные для вычислений и результаты.
Чтобы показать, как работает компьютер, рассмотрим выполнение команды сложения. Процессор посылает сигнал в память, запрашивая следующую команду, а память реагирует, передавая команду в процессор. Затем процессор декодирует команду и обнаруживает, что это команда сложения. После этого процессор предпринимает такие действия:
1) посылает сигналы в память, запрашивая передачу двух значений;
2) суммирует полученные значения;
3) посылает сигнал в память о том, чтобы она приняла результат сложения.
Память - это совокупность последовательных ячеек, каждая из которых имеет уникальный адрес. Каждая ячейка состоит из последовательности бит. Значения бит (0 или 1) образуют содержимое ячейки.
Регистры, как и память, используются для хранения промежуточных результатов. Но они находятся в составе процессора, поэтому получать значения из регистров проще и быстрее, чем из памяти. Флажки внутри процессора применяются для регистрации того, что в нем происходит. Есть два вида флажков: одни из них (флажки состояния) фиксируют информацию об особенностях ранее выполненных команд, а другие (флажки управления) управляют действиями процессора. Пример флажка состояния - флажок, показывающий, не является ли результат для компьютера слишком большим. Примером флажка управления служит флажок, заставляющий компьютер выполнять команды с меньшей скоростью. Может оказаться, что флажок одновременно является и флажком состояния, и флажком управления; примером может служить флажок NT процессора 80286.
1.3. Представление чисел
Мы привыкли представлять целые числа в виде последовательностей десятичных цифр, например 365: три сотни, шесть десятков и пять единиц. Такое представление называется представлением с основанием десять. Целые числа в компьютерах обычно представляются последовательностями двоичных цифр (бит), например 11010. Такое представление в двоичной системе обозначает: 1 - шестнадцать, 1 - восемь, 0 - четыре, 1 - два и 0 -нуль. Двоичные числа можно складывать, вычитать, умножать и делить, не превращая их в десятичные, если помнить о том, что 1 плюс 1 равно 10 (1 -два и 0 - нуль), а не 2. Приведем пример:
+1001 (двоичное представление девяти)
0101 (двоичное представление пяти)
1110 (двоичное представление четырнадцати)
Конечно, мы запутаемся в длинных последовательностях двоичных цифр, но компьютеры в них не путаются. Например, 10110101 есть двоичное представление десятичного числа 181. Чтобы упростить действия с двоичными числами, их цифры группируют по четыре бита. После этого каждая группа представляется одним символом в соответствии с табл. 1.1. Например, число 10110101 сокращенно записывается как В5. Такое представление называется шестнадцатеричным числом; если бы мы рождались с шестнадцатью пальцами на руках, то пользовались бы именно такими числами.
|
|
Таблица 1.1 Шестнадцатеричное представление |
| ||
|
Группа из 4 бит |
Шестнадцатеричная цифра |
Значение | ||
|
0000 |
0 |
Нуль | ||
|
0001 |
1 |
Один | ||
|
0010 |
2 |
Два | ||
|
0011 |
3 |
Три | ||
|
0100 |
4 |
Четыре | ||
|
0101 |
5 |
Пять | ||
|
0110 |
6 |
Шесть | ||
|
0111 |
7 |
Семь | ||
|
1000 |
8 |
Восемь | ||
|
1001 |
9 |
Девять | ||
|
1010 |
10 |
Десять | ||
|
1011 |
11 |
Одиннадцать | ||
|
1100 |
12 |
Двенадцать | ||
|
1101 |
13 |
Тринадцать | ||
|
1110 |
14 |
Четырнадцать | ||
|
1111 |
15 |
Пятнадцать | ||
Двоичная запись очень удобна для представления положительных чисел и нуля. Но при переходе к отрицательным числам потребуется дополнительный механизм для указания знака числа. Проще всего использовать для знака старший (левый) бит числа, например:
0000 0100 (обозначает +4)
1000 0100 (обозначает -4)
0111 1111 (обозначает +127)
1111 1111 (обозначает -127)
У такого представления, называемого прямым кодом, имеется один серьезный недостаток: для него потребуются специальные арифметические правила. Покажем это на примере использования двоичной арифметики для вычитания +1 из 0 с ожидаемым получением -1:
-0000 0000 (0 в прямом коде)
0000 0001 (+1 в прямом коде)
1111 1111 (-127 в прямом коде)
При использовании для знаковых чисел (как и для беззнаковых) обычной двоичной арифметики требуется особое представление знаковых чисел, в котором 11111111 представляет -1, а не -127. Кроме того, вычитание +1 из -1 должно давать -2. Выполним это вычитание, чтобы посмотреть, как должно выглядеть -2:
11111111 (это -1)
00000001 (вычитаем +1)
11111110 (и называем это -2)
Рассмотренное представление называется дополнительным кодом; в этом коде операции сложения и вычитания дают правильный результат в дополнительном коде, например:
+00000011 (+3 в дополнительном коде)
11111110 (-2 в дополнительном коде)
0000 0001 (+1 в дополнительном коде)
В дополнительном коде старший бит неотрицательного (положительного или нулевого) числа содержит 0, а отрицательного числа -1. Следовательно, как и в прямом коде, этот бит является знаковым.
Знак числа в дополнительном коде можно изменить, если изменить (инвертировать) значение каждого бита и прибавить +1. Например, мы можем получить представление -5 в дополнительном коде из представления +5 в дополнительном коде следующим образом:
+00000101 (+5 в дополнительном коде)
11111010 (+5 с измененными битами)
0000 0001 (+1 в дополнительном коде)
11111011 (- 5 в дополнительном коде)
Необходимо очень осторожно подходить к увеличению длины чисел, представленных в дополнительном коде. Бели 8-битное число в дополнительном коде расширяется до 16 бит (например, для сложения с 16-битным числом в дополнительном коде), нужно подумать, что же поместить в левые 8 бит.
Предположим, что мы хотим прибавить число 0000 0001 (+1 в дополнительном коде) к 0000 0000 0000 0011 (+3 в дополнительном коде). Наверное, ни у кого не возникает сомнений в том, что здесь следует просто добавить в числе +1 восемь нулей с левой стороны, а затем сложить:
+0000 0000 0000 0011 (+3 в дополнительном коде)
0000 0000 0000 0001 (+1 в дополнительном коде)
0000 0000 0000 0100 (+4 в дополнительном коде)
Однако при необходимости прибавить число 1111 1111 (-1 в дополнительном коде) к числу 0000 0000 0000 0011 (+3 в дополнительном коде) следует добавить к числу -1 слева восемь единиц (добавление нулей превратило бы -1 в положительное число). После этого производится сложение:
+0000 0000 0000 0011 (+3 в дополнительном коде)
1111 1111 1111 1111 (-1 в дополнительном коде)
0000 0000 0000 0010 (+2 в дополнительном коде)
Следовательно, расширение 8-битного числа в 16-битное выглядит так:
|
Значение |
8-битное представление |
16-битное представление |
|
+1 |
0000 0001 |
0000 0000 0000 0001 |
|
-1 |
1111 1111 |
1111 1111 1111 1111 |
Таким образом, для расширения числа в дополнительном коде необходимо ввести новые биты слева и поместить в каждый из них значение знакового бита. Этот процесс называется расширением со знаком.
