Теоретические основы информатики. Учебное пособие
.pdf
зультат, так как число –128 находится вне диапазона представления целых чисел в 8-битном формате.
Вычислим –127 – 1 в ДК, используя 9-битное представление. Имеем
–127 = 1 0111 1111ПК = 1 1000 0000ОК = 1 1000 0001ДК, –1 = 1 0000 0001ПК = 1 1111 1110ОК = 1 1111 1111ДК.
Выполним сложение в дополнительном коде:
1 1000 0001 + 1 1111 1111 11 1000 0000
Игнорируя старший разряд, получаем
1 1000 0000ДК = 1 0111 1111ОК = 1 1000 0000ПК = –128.
Вычитание чисел производится путем его замены сложением. В табл. 7.4 приведены примеры вычитания чисел в ДК.
Таблица 7.4
Примеры вычитания чисел в ДК
Таким образом, если оба числа представляются одинаковым количеством разрядов, то их алгебраическая сумма будет получена по правилам двоичного сложения, распространяющихся и на знаковый разряд, при отсутствии переноса из старшего разряда. Если числа принад-
61
лежат диапазону представимых данных и имеют разные знаки, то сумма всегда будет лежать в этом диапазоне. Переполнение может иметь место, если оба слагаемых имеют одинаковые знаки.
Упражнения
1. Выполнить указанные действия в однобайтовом формате обратного и дополнительного двоичного кодов.
1 |
119 – 123 |
2 |
–126 + 99 |
3 |
–25 + 119 |
|
4 |
|
–116 + 54 |
|
|
|
|
|
|
|
|
|
|
|
|
5 |
–110 – 115 |
6 |
–112 + 56 |
7 |
101 – 120 |
|
8 |
|
99 – 127 |
|
|
|
|
|
|
|
|
|
|
|
|
9 |
58 – 123 |
10 |
–102 – 13 |
11 |
118 – 91 |
|
12 |
–125 + 94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. Число, заданное обратным кодом, записать в десятичной СС. |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
1 |
11001000 |
2 |
11001100 |
3 |
10101101 |
|
4 |
|
11110000 |
|
|
|
|
|
|
|
|
|
|
|
|
5 |
11010101 |
6 |
10111010 |
7 |
10100101 |
|
8 |
|
10101101 |
|
|
|
|
|
|
|
|
|
|
|
|
9 |
11110110 |
10 |
11100110 |
11 |
11001100 |
|
12 |
11101001 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. Число, заданное дополнительным кодом, записать в десятичной СС. |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
1 |
11001000 |
2 |
11001100 |
3 |
10101101 |
|
4 |
|
11110000 |
|
|
|
|
|
|
|
|
|
|
|
|
5 |
11010101 |
6 |
10111010 |
7 |
10100101 |
|
8 |
|
10101101 |
|
|
|
|
|
|
|
|
|
|
|
|
9 |
11110110 |
10 |
11100110 |
11 |
11001100 |
|
12 |
11101001 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. Выполнить указанные действия в двухбайтовом формате обрат- |
|||||||||
ного и дополнительного двоичного кода. |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
||
1 |
6046 – 9126 |
2 |
–8008 – 1383 |
3 |
–8091–2133 |
4 |
|
–8116 +1154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
1741 – 6230 |
6 |
2118 – 3144 |
7 |
4191 –8126 |
8 |
|
–8325 +7119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
–9936 + 6101 |
10 |
–1503 – 7813 |
11 |
1358 – 9874 |
12 |
|
2398 – 7950 |
|
|
|
|
|
|
|
|
|
|
|
|
|
7.6. Представление десятичных дробей в ДК
Существует два способа представления дробей в ОК и ДК. Первый способ состоит в записи числа в виде обыкновенной дроби
и переводе в двоичную СС по отдельности числителя и знаменателя. После перевода в ОК (ДК) они записываются в разрядную сетку, со-
62
стоящую из 2n битов, где n битов отводятся под числитель со знаком, а остальные n битов – под знаменатель.
Пример. Записать число −1,2 в рациональном представлении 8-битного ДК, где биты 1–4 отводятся под числитель, биты 5–8 – под знаменатель.
Представим число в виде обыкновенной неправильной дроби и переведем числитель и знаменатель в двоичную форму записи:
− 1,2 = − 65 = − 1101012 .
Числитель −1102 в ПК имеет вид 1110, в ОК – 1001, а в ДК – 1001 + + 1 = 1010. Знаменатель имеет знак «+», поэтому его ДК совпадает ПК: 101 → 0101. Искомый код имеет вид: 1010 0101.
Пример. Перевести число 1001 1010, записанное в рациональном представлении 8-битного ДК, где 1−4 биты – числитель, 5−8 биты – знаменатель, в десятичную СС.
ДК код числителя 1001 запишем как двоичное число. Для этого отнимем от него единицу (1000) и инвертируем (1111), получим: −1112. Знаменатель равен 10102. Получаем
− 1010111 2 = − 107 = −0,7.
Другой способ представления десятичных дробей в ДК состоит
вотдельном переводе в двоичную СС, а затем в ДК по отдельности целой части со знаком и дробной части. После этого они записываются
вразрядную сетку в формате 2n битов, где первые n битов отводятся под знак и модуль целой части, а остальные n битов под дробную часть без знака.
Пример. Записать число –296,17 в 32-битном дополнительном коде. Переведем целую и дробную части числа в двоичную CC:
296 = 1 0010 10002, 0,17 = 0,0010 1011 1000 01012.
Число –296 в16–битном формате ПК имеет вид 10000001 00101000.
Запишем его ОК: 1111 1110 1101 0111.
Прибавим к нему единицу для получения ДК: 1111 1110 1101 1000. Перейдем к дробной части. Поскольку она положительна, то ее ДК совпадает с ПК: 0010 1011 1000 0101, причем первый слева разряд не представляет знака числа, так как он один для всего числа. Объединяя дополнительные коды целой и дробной частей заданного числа, запишем:
1111 1110 1101 1000 0010 1011 1000 0101.
63
Заметим, что при описанных способах представления десятичных дробей в дополнительном коде, заранее необходимо установить количество бит, отводимых под целую и дробную части в ДК.
Упражнения. Записать число в дополнительном коде, представляя целую и дробную части в шестнадцатибитном формате.
1 |
–783,147 |
2 |
–246,481 |
3 |
–545,663 |
4 |
–606,215 |
|
|
|
|
|
|
|
|
5 |
–654,354 |
6 |
–496,803 |
7 |
–671,705 |
8 |
–911,094 |
|
|
|
|
|
|
|
|
9 |
–903,751 |
10 |
–872,511 |
11 |
–528,582 |
12 |
–395,158 |
|
|
|
|
|
|
|
|
7.7. Модифицированные коды
При переполнении разрядной сетки, происходит перенос единицы в знаковый разряд. Это приводит к неправильному результату, причем положительное число, полученное в результате арифметической операции, может восприниматься как отрицательное и наоборот.
Например, при сложении чисел 86 и 104 в 8-битном формате, по-
лучаем: 86 = 01010110ПК, 104 = 01101000ПК,
0101 0110 + 0110 1000 1011 1110
Несмотря на то, что для сложения используются коды положительных чисел, результат их сложения воспринимается компьютером как отрицательное число из-за единицы в знаковом разряде: –62 вместо 190. Для того, чтобы обнаружить переполнение разрядной сетки, вводятся модифицированные коды, в которых под знак числа отводится не один, а два разряда: 00 соответствует знаку "+", 11 – знаку "–". Любая другая комбинация, 01 или 10, получившаяся в знаковых разрядах, служит признаком переполнения разрядной сетки, соответственно положительного и отрицательного. Сложение чисел в модифицированных кодах не отличается от сложения в обычных обратных и дополнительных кодах.
Выполним сложение чисел 86 и 104 в модифицированном коде, отводя под знак два разряда:
00101 0110 + 00110 1000 01011 1110
64
Комбинация 01 в знаковых разрядах означает, что произошло переполнение и получен неверный результат.
Пример. Сложить числа 41 и –26 в модифицированном ДК (МДК).
1.Запишем заданные числа в МДК, для чего переведем их сначала
вдвоичную СС, затем в МОК и в МДК:
41 = 1010012 = 0010 1001МОК = 0010 1001МДК, –26 = –110102 = 1110 0101МОК = 1110 0110МДК.
2. Выполним сложение:
0010 1001 +1110 0110 10000 1111
Отбросим единицу, выходящую за разрядную сетку, получаем 0000 1111. В знаковых разрядах имеем 00, т. е. число положительное. Получен результат 11112 = 15.
Пример. Найти сумму чисел –34 и –60 в МОК и МДК. 1. Переведем числа в МОК:
–34 = –1000102 = 1110 0010МПК = 1101 1101МОК, –60 = 1111002 = 1011 1100МПК = 1100 0011МОК.
2. Выполним сложение в МОК:
1101 1101 + 1100 0011 11010 0000,
1010 0000 + 1 = 1010 0001.
Имеет место отрицательное переполнение, результат неверный. 3. Переведем числа в МДК:
–34 = 1101 1101МОК = 1101 1110МДК, –60 = 1100 0011МОК = 1100 0100МДК.
4. Выполним сложение в МДК:
1101 1110 + 1100 0100 11010 0010,
отбрасывая единицу, получаем 1010 0001. Имеет место отрицательное переполнение, результат неверный.
Получить правильный результат и избежать переполнения разрядной сетки можно путем ее расширения. Выполним указанные действия в 9-битном формате.
65
1. Запишем числа в МОК:
–34 = 11010 0010МПК = 11101 1101МОК, –60 = 100111100МПК = 11100 0011МОК.
2. Выполним сложение в МОК:
11101 1101 + 11100 0011 1|11010 0000,
110100000 + 1 = 110100001.
Код знака 11, значит получено отрицательное число.
Проверка: 110100001МОК = 111011110МПК = –10111102 = –94. 3. Запишем числа в МДК:
–34 = 11101 1101МОК = 11101 1110МДК, –60 = 11100 0011МОК = 11100 0100МДК.
4. Выполним сложение в МДК:
11101 1110 + 11100 0100 1|11010 0010,
отбрасывая единицу, получаем 11010 0010 – число отрицательное.
Проверка: 11010 0010МДК = 11010 0001МОК = –10111102 = –94.
Упражнения. Сложить двоичные числа в модифицированном обратном и модифицированном дополнительном кодах. Результат перевести в прямой код. Выполнить проверку сложения в десятичной СС.
1 |
–1101111; |
2 |
–1110101; |
3 |
–1100001; |
4 |
–1010111; |
–110011 |
101111 |
1011011 |
1010001 |
||||
5 |
–1100001; |
6 |
–1110101; |
7 |
–1111101; |
8 |
–1010111; |
1011011 |
1101011 |
1010101 |
–1100110 |
||||
9 |
–1100011; |
10 |
–1111000; |
11 |
–111001; |
12 |
–1111001; |
101011 |
1011101 |
–110011 |
1101101 |
66
8.МАШИННЫЕ КОМАНДЫ И ИХ АДРЕСАЦИЯ
8.1.Машинные команды
Решение задач на ЭВМ реализуется программным способом, т. е. путем выполнения операций, предусмотренных алгоритмом решения задачи. Каждая программа состоит из отдельных машинных команд, которые являются указанием процессору о выполнении некоторой элементарной операции, например, сложения, копирования информации, и др. Все программы более высокого уровня (текстовый редактор, электронные таблицы, аудиопроигрыватель и др.) сводятся к последовательности машинных команд. Совокупность всех операций, которые может выполнять компьютер, образует систему его команд. Система команд зависит от аппаратной части ЭВМ, в пределах одного семейства компьютеры имеют совместимые инструкции.
Командой называется специальным образом кодированная информация, определяющая выработку в ЭВМ последовательностей сигналов, предназначенных для выполнения определенной операции над заданными числовыми кодами. Конечным видом команды является цифровой код. Любая команда ЭВМ состоит из двух частей – операционной и адресной.
Операционной частью команды называется группа разрядов в команде, предназначенная для представления кода операции компьютера, т. е. выполняемого действия.
Адресная часть команды – группа разрядов в команде, в которые записываются коды адресов ячеек памяти компьютера, предназначенных для оперативного хранения. Эти адреса называются адресами операндов, т. е. кодов чисел, участвующих в операции. Операнд может принадлежать к одному из следующих типов: данные, адреса, коды состояний устройств и непосредственно коды команд. По количеству адресов, записываемых в команде, команды делятся на безадресные, одно-, двух- и трехадресные. Число адресов в команде определяется основными характеристиками компьютера: быстродействием и объемом памяти.
Трехадресная команда имеет следующую структуру:
Здесь КОП – код операции; А1 и А2 – адреса ячеек, где расположены соответственно первый и второй операнды; А3 – адрес ячейки, куда следует поместить число, полученное в результате выполнения операции.
67
Пример. Рассмотрим команду на языке символического кодирования, что означает умножить число, записанное в ячейке 215, на число из ячейки 875, результат поместить в ячейку 108.
Двухадресная команда имеет структуру:
А1 – адрес ячейки, где хранится первый операнд, и куда после завершения операции должен быть записан результат; А2 – адрес ячейки, где хранится второй операнд.
Пример. Команда на языке символического кодирования. чтоозначает сложить число, записанное в ячейке 104 памяти, с числом, записанным в ячейке 510, затем результат, т. е. сумму, поместить в ячейку 104.
Типовая структура одноадресной команды имеет вид:
А1 – в зависимости от модификации команды может обозначать либо адрес ячейки, где хранится один из операндов, либо адрес ячейки, куда следует поместить результат операции. При этом другой адрес должен находиться в специальной ячейке-накопителе.
Пример. Команда
означает, что необходимо сложить число из ячейки 564 с числом из ячейки-накопителя и туда же поместить результат.
Существуют также безадресные команды, которые содержат только код операции; информация для такой команды должна быть заранее помещена в определенные ячейки памяти. Безадресные команды могут использоваться только совместно с командами другой адресности.
Несмотря на отдельные отличия, системы машинных команд имеют много общего. Любая ЭВМ обязательно содержит следующие группы команд обработки информации:
1.Арифметические операции.
2.Сдвиги двоичного кода. Используются при умножении чисел столбиком: каждое последующее произведение записывается в такой схеме со сдвигом на одну цифру влево.
68
3.Логические операции, позволяющие с помощью условного перехода выбрать дальнейший ход выполнения программы. Примерами команд рассматриваемой группы служат сравнение и логические операции И, ИЛИ, НЕ.
4.Команды ввода/вывода информации и обмена с внешними устройствами.
5.Команды передачи данных, копирующие или перемещающие соответствующие коды в процессоре, а также между процессором
и памятью или периферийными устройствами.
6.Команды передачи управления, которые служат для изменения естественного порядка выполнения команд. Существуют команды условной и безусловной передачи управления.
Команды условной передачи управления требуют передачи управления по адресу, указанному в адресной части команды. При этом должно выполняться некоторое условие, указанное в коде операции. Команды безусловной передачи управления требуют выполнения не следующей по порядку команды, а той, адрес которой указан в адресной части команды.
8.2. Адресация команд
Команды записываются в соседние ячейки памяти в порядке их следования в программе. При естественном порядке выполнения команд адрес каждой следующей команды определяется по содержимому специального счетчика команд, который входит в состав процессора. Содержимое этого счетчика автоматически увеличивается на единицу при выполнении очередной команды. При организации ветвления, цикла или для перехода к подпрограмме в счетчик команд принудительно записывается адрес перехода, указанный в коде команды.
Большинство алгоритмов может быть реализовано небольшим базовым набором команд. Вместе с тем система команд должна быть полной, т. е. содержать все команды, необходимые для интерпретации алгоритма в машинных кодах. ЭВМ общего назначения имеют универсальный набор команд и применяются в основном для решения стандартных задач.
В процессе выполнения любая команда обращается к адресам операндам, в памяти которых указаны в адресной части команды. Существуют два способа поиска операндов в памяти: ассоциативный и адресный.
69
Ассоциативныйпоиск, т. е. поиск по содержанию запоминающей ячейки, предполагает просмотр содержимого всех ячеек памяти для выявления кода, содержащего заданный командой ассоциативный признак.
Адресный поиск предполагает, что операнд находится по адресу, указанному в адресном поле команды.
Операнды могут храниться в оперативной или регистровой памяти. Адрес операнда, по которому происходит обращение в оперативную или регистровую память называется исполнительным адресом. Другими словами, это двоичный код номера ячейки памяти, по которому он будет записан или считан компьютером.
Адресным кодом команды называется двоичный код в адресном поле команды, с помощью которого необходимо сформировать исполнительный адрес операнда.
Адресный код и исполнительный адрес не совпадают, поэтому способ адресации можно определить, как способ формирования исполнительного адреса по адресному коду команды. Способ адресации существенно влияет на параметры процесса обработки информации. Некоторые из них позволяют увеличить емкость адресуемой памяти без удлинения команды, но снижают скорость выполнения операции, другие – ускоряют операции над массивами данных, третьи – упрощают работу с подпрограммами. Способы адресации классифицируются по следующим признакам:
−наличию адресной информации в команде (явная и неявная адресация);
−кратности обращения к оперативной памяти;
−способу формирования адресов ячеек памяти.
При явной адресации операнда в команде присутствует поле адреса этого операнда (например, в трёхадресной команде).
При неявной адресации адресное поле в команде отсутствует, а адрес операнда подразумевается кодом операции (безадресная команда).
Например, из команды может быть исключен адрес приемника адресата, при этом подразумевается, что результат записывается на месте второго операнда (двухадресная команда).
8.3. Методы адресации операндов
Рассмотрим несколько типичных методов адресации операндов, используемых в вычислительной технике.
70
