| ЧАСТЬ 1. ВЫПОЛНЕНИЕ МАШИННЫХ ПРОГРАММ | Следующий раздел |
Прежде, чем рассматривать выполнение машинных программ аппаратурой ЭВМ, рассмотрим представление в памяти машины чисел, а также алфавитно-цифровых символов. Это представление потребуется нам в дальнейшем при изучении машинных программ, а также обрабатываемых ими данных.
Чтобы сделать вычислительные системы более надежными и простыми, их аппаратура строится из простейших электронных схем, которые могут находиться только в двух состояниях. Одно из них обозначается 0, а другое – 1. Такая схема предназначена для длительного или краткого хранения самой мелкой единицы информации – бита (от «BInary digiT» – двоичная цифра).
Любое число можно представить в виде цепочки битов. Такое представление числа называется двоичным числом. Цепочка из восьми битов называется байтом (рис. 1).
10011011
![]()
![]()
старший бит (бит 7) младший бит (бит 0)
Рис. 1. Пример байта
Величина двоичного числа определяется относительной позицией каждого бита и его значением. Позиционный вес младшего бита 2о = 1(10), где 1(10) – единица в десятичной системе счисления. Следующий бит имеет вес 21 = 2(10). Вес любой позиции получается удвоением веса предыдущей позиции (рис. 2).

Рис. 2. Веса позиций байта
Для преобразования десятичного числа в двоичное можно использовать один из двух методов – метод деления и метод вычитания. Первый из этих методов широко используется в программах, выполняющих преобразование чисел из одной системы счисления в другую. Этот метод будет рассмотрен нами в других разделах, при описании соответствующих программ. Сейчас мы будем использовать метод вычитания, главное достоинство которого – наглядность. Согласно этому методу, для преобразования десятичного числа в двоичное надо сделать ряд вычитаний, каждое из которых даст значение одного бита.
Прежде всего, вычтите из десятичного числа наибольший возможный двоичный вес и запишите 1 в эту позицию бита. Затем из результата вычтите новый наибольший возможный двоичный вес и запишите 1 в эту новую позицию бита. Так - до получения нулевого результата. Например, преобразование числа 50 в двоичное:

Записывая 0 в остальные позиции битов (биты 0,2,3) получаем окончательный результат: 110010.
Для выполнения обратного преобразования следует сложить десятичные веса тех позиций, в которых стоит 1:
32 (бит 5) + 16 (бит 4) + 2 (бит 1) = 50
Байт может представлять десятичные положительные числа от 0 (00000000) до 255 (11111111). Число 255 может быть получено двумя способами: 1) суммированием весов всех битов байта; 2) по формуле 28 – 1, где 8 – номер первого бита, не вошедшего в состав байта.
Оперативная память ЭВМ состоит из блоков памяти по 1024 байта. Число 1024 есть 210. Число 1024 имеет стандартное обозначение К. Следовательно, ЭВМ, имеющая 48 К памяти, содержит 48 x 1024 = 49152 байта.
Машинным словом будем называть битовую строку длиной 16 битов. Одно слово содержит 2 байта (рис. 3). Каждый бит слова имеет свой вес. Просуммировав все веса, найдем максимальное целое число без знака, которое можно записать в одно слово, оно равно 216 – 1 = 65535.
Двоичное содержимое байта или слова может рассматриваться (интерпретироваться) как число без знака и как число со знаком. Число без знака занимает все 16 битов слова или 8 битов байта. Оно может быть только положительным. Просуммируем два таких числа:
00111100 60 (10)
+ 10110101 +181 (10)
11110001 241 (10)
Обратим внимание, что единица, появившаяся в старшем бите результата, свидетельствует лишь о возросшей величине результата, который для беззнаковых чисел может быть только неотрицательным.

Рис. 3. Веса позиций слова
Если слово (байт) содержит число со знаком, то в старшем бите содержится знак (0 есть +, 1 есть -), а оставшиеся 15 или 7 битов содержат само число в дополнительном коде. Дополнительный код положительного числа совпадает с записью такого же числа без знака. Для получения дополнительного кода отрицательного числа из его абсолютного значения используется следующее правило:
все биты числа (в том числе и знаковый) инвертируются;
к полученному числу прибавляется 1.
Например, получим дополнительный код числа –65:
65(10) = 01000001(2)
1) 10111110
2) + 1
10111111 = -65(10)
Для получения абсолютного значения отрицательного числа повторяют эти же самые два действия. Например:
-65(10)= 10111111
1) 01000000
2) + 1
01000001 = 65(10)
Сумма +65 и –65 должна составить ноль:
01000001 (+65)
+ 10111111 (-65)
00000000
В данном примере у нас произошли два интересных переноса: 1) в знаковый (7-й) разряд; 2) за пределы байта. Первая единица переноса обрабатывается как обычно, а вторая теряется. Оба переноса считаются правильными.
Вычитание двух положительных чисел заменяется суммированием первого числа с дополнением второго. Таким образом, как суммирование, так и вычитание выполняет одно и то же аппаратное устройство – сумматор. Кроме этого свойства использование дополнения имеет еще одно достоинство - число ноль имеет единственное представление, т.е. нет двух нулей – положительного и отрицательного. Приведем целые числа в окрестностях 0:
+ 3 00000011
+ 2 00000010
+ 1 00000001
0 00000000
- 1 11111111
- 2 11111110
- 3 11111101
Отсюда видно, что нулевые биты в отрицательном двоичном числе фактически определяют его величину: рассмотрите весовые значения нулевых битов так, как если бы это были единичные биты, сложите эти значения и прибавьте 1.
| В начало | Следующий раздел |