Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

[Alekseev_A.P.]_Informatika_2015(z-lib.org)

.pdf
Скачиваний:
221
Добавлен:
26.01.2020
Размер:
8.07 Mб
Скачать

Арифметические основы работы ЭВМ

41

__________________________________________________________________________________

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

Напомним, что алгебраическое сложение — это сложение, в котором могут участвовать как положительные, так и отрицательные числа.

Пример 7. Выполнить алгебраическое сложение с использованием дополнительного кода для чисел х1 = 7D и х2 = –3D.

Решение.

Необходимо найти сумму: y = x1 + x2.

Учитывая, что x1 > 0, это число нужно представить в прямом коде, а так как x2 < 0, то число x2 нужно перевести в дополнительный код.

P(y) = Рпр(x1) + Рдоп(x2).

 

. . .

Рпр(x1) = 0'111В

 

Рпр(x2) = 1'011B

P(y) =

0'111

+ 1'101

Робр2) = 1'100B

 

0'100

Рдоп(x2) = 1'101B.

 

 

2

Так как результат положителен (в знаковом разряде P(y) — 0), значит,

он представлен в прямом коде Рпр(y) =0'100B. После перевода двоичного числа в десятичную СС получим ответ: y = +4D.

Пример 8.

Выполнить алгебраическое сложение чисел х1 = 8D и х2 = –13D с использованием дополнительного кода.

Решение.

Необходимо найти сумму: y = x1 + x2.

Число x1 нужно представить в прямом коде, а x2 — в дополнительном

коде.

42

Арифметические основы работы ЭВМ

__________________________________________________________________________________

 

P(y) = Рпр(x1) + Рдоп(x2).

 

 

 

Рпр(x1) = 0'1000В

 

0'1000

 

Рпр(x2) = 1'1101B

P(y) =

 

+ 1'0011

 

Робр2) = 1'0010B

 

 

1'1011

 

Рдоп(x2) = 1'0011B.

 

 

 

2

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

Pдоп(y) = 1'1011B

к прямому коду Рпр(y) необходимо выполнить следующие преобразования:

Робр(y) = Рдоп(y) – 1 = 1'1011B – 1 = 1'1010B,

Рпр(y) = Робр(y) = 1'1010B = 1'0101B.

Переходя от двоичной СС к десятичной СС, получим ответ: y = –5D.

Пример 9. Выполнить алгебраическое сложение с использованием дополнительного кода для чисел х1 = – 6D и х2 = –17D.

Решение

Необходимо найти сумму: y = x1 + x2.

Числа x1 и x2 нужно представить в дополнительном коде.

P(y) = Рдоп(x1) + Рдоп(x2).

 

 

Рпр(x1) = 1'00110В

 

1'11010

Робр1) = 1'11001B

P(y) =

+ 1'01111

Рдоп1) = 1'11010B

 

1'01001

Рпр(x2) = 1'10001B

 

 

2

Робр2) = 1'01110B Рдоп(x2) = 1'01111B.

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

Pдоп(y) = 1'01001B

к прямому коду Рпр(y) необходимо выполнить следующие преобразования:

Робр(y) = Рдоп(y) – 1 = 1'01001B – 1 = 1'01000B,

Рпр(y) = Робр(y) = 1'01000B = 1'10111B.

Переходя от двоичной СС к десятичной СС, получим ответ: y = –23D.

Кодовая таблица

43

__________________________________________________________________________________

3.Кодирование информации в ЭВМ

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

3.1. Кодовая таблица

Кодовая таблица определяет порядок внутреннего представления в ЭВМ букв, цифр, знаков препинания, символов и управляющих сигналов в виде кодовых комбинаций. Так, латинская буква А в кодовой таблице СР1251 представлена десятичным числом 65D, латинская буква С — числом 67D, латинская буква М — 77D и т. д. Таким образом, слово «САМАРА», написанное заглавными латинскими буквами, будет циркулировать внутри ЭВМ в виде цифр:

67D-65D-77D-65D-80D-65D.

Если говорить точнее, то внутри ЭВМ данное слово циркулирует в виде двоичных чисел:

01000011В-01000001В-01001101В-01000001В-01010000В-01000001В.

Аналогично кодируются цифры (например, 1 — 49D, 2 — 59D) и сим-

волы (например, ! — 33D, + — 43D).

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

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

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

Во всём мире в качестве стандарта принята кодовая таблица ASCII (American Standard Code for Information Interchange — Американский стан-

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

44 Кодовая таблица

__________________________________________________________________________________

арабские цифры, знаки препинания, управляющие сигналы). Для их кодировки используются коды от 0D до 127D. Вторая половина кодовой таблицы ASCII (с кодами от 128 до 255) не определена американским стандартом и предназначена для размещения символов национальных алфавитов других стран (в частности, кириллицы — русских букв), псевдографических символов, некоторых математических знаков. В разных странах, на различных моделях ЭВМ, в разных операционных системах могут использоваться и разные варианты второй половины кодовой таблицы (их называют расширениями ASCII). Например, таблица, которая используется в операционной системе MS-DOS, называется CP-866. Используя эту таблицу для кодировки слова «САМАРА», записанного русскими буквами, получим такие коды:

145D-128D-140D-128D-144D-128D.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При работе в операци-

 

 

201

Й

211

У

221

Э

231

з

241

с

251

ы

онной системе Windows ис-

192

А

202

К

212

Ф

222

Ю

232

и

242

т

252

ь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пользуется таблица кодов

193

Б

203

Л

213

Х

223

Я

233

й

243

у

253

э

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CP-1251, в которой кодиров-

194

В

204

М

214

Ц

224

а

234

к

244

ф

254

ю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ка латинских букв совпадает

195

Г

205

Н

215

Ч

225

б

235

л

245

х

255

я

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с кодировкой таблиц CP-866

196

Д

206

О

216

Ш

226

в

236

м

246

ц

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и ASCII, а вторая половина

197

Е

207

П

217

Щ

227

г

237

н

247

ч

 

 

198

Ж

208

Р

218

Ъ

228

д

238

о

248

ш

 

 

таблицы имеет собственную

199

З

209

С

219

Ы

229

е

239

п

249

щ

 

 

раскладку (кодировку) сим-

200

И

210

Т

220

Ь

230

ж

240

р

250

ъ

 

 

волов. Поэтому слово «СА-

МАРА», написанное заглавными русскими буквами, будет иметь внутри ЭВМ другое представление:

209D-192D-204D-192D-208D-192D.

Таким образом, внешне одинаковое слово (например, «САМАРА») внутри ЭВМ может быть представлено различным образом. Естественно, это вызывает определённые неудобства. Общим недостатком всех однобайтовых кодовых таблиц (в них для кодировки используются восьмиразрядные двоичные числа) является отсутствие в коде символа какой-либо информации, которая подсказывает машине, какая в данном случае используется кодовая таблица.

Сообществом фирм Unicode предложена в качестве стандарта другая система кодировки символов. В этой системе для представления (кодирования) одного символа используются два байта (16 битов), и это позволяет включить в код символа информацию о том, какому языку принадлежит символ и как его нужно воспроизводить на экране монитора или на принтере. Два байта позволяют закодировать 65 536 символов. Правда, объем информации, занимаемой одним и тем же текстом, увеличится вдвое. Зато тексты всегда будут «читаемыми» независимо от использованного национального языка и операционной системы.

Представление данных в ЭВМ

45

__________________________________________________________________________________

3.2. Представление данных в ЭВМ

При проведении математических расчётов числа в ЭВМ могут быть представлены с помощью естественной и нормальной форм записи.

Примером записи в естественной форме может служить вещественное число 173,856. Для записи числа в естественной форме машинное слово (операнд) делится на две части (на два поля). Первое поле отводится для записи целой части числа, второе — для записи дробной части числа. Старший разряд машинного слова используется для указания знака числа. Разряды машинного слова нумеруются справа – налево, начиная с нуля. В вычислительной технике принято отделять целую часть числа от дробной части точкой. Так как положение точки между целой и дробной частями числа чётко определено, то такое представление чисел называют представлением с фиксированной точкой.

На следующем рисунке дана иллюстрация формата чисел с фиксированной точкой.

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

Разряд кода числа, в котором размещается знак, называется знаковым разрядом. Знаковый разряд размещается в старшем разряде машинного слова. Знак положительного числа кодируется двоичной цифрой 0, а знак отрицательного числа – цифрой 1.

46 Представление данных в ЭВМ

__________________________________________________________________________________

Нормальная форма записи числа n имеет следующий вид:

n m d p ,

где m — мантисса числа; р — порядок; d — основание системы счис-

ления.

Приведём пример записи числа в нормальной форме: n 1.541 102 .

Порядок p изменяет местоположение точки в мантиссе. В зависимости от значения порядка p точка перемещается (плавает) по мантиссе. Например, пусть m = 0.3, основание системы счисления d = 10, а порядок p будем брать

разным:

 

 

 

 

 

 

 

0.3 10 1

0.03;

0.3 10 2

0.003;

0.3 102

30;

0.3 103

300.

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

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

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

Последовательность нескольких битов или байтов называют полем данных [4]. В ЭВМ используют поля постоянной и переменной длины.

Перечислим поля постоянной длины: полуслово — 1 байт; слово — 2 байта; двойное слово — 4 байта; расширенное слово — 8 байт.

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

Представление данных в ЭВМ

47

__________________________________________________________________________________

Пример 1. Записать число -19310 = -110000012 в формате слова со знаком и фиксированной точкой.

Решение.

N разряда

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Число

1

0

0

0

0

0

0

0

1

1

0

0

0

0

0

1

Примечание.

В старшем разряде (пятнадцатом) указан знак числа.

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

Для представления как положительных, так и отрицательных порядков применяют смещённый порядок. При этом машинный порядок Мр формируют со смещением на 64 разряда по отношению к фактическому порядку p: Мр = p + 64. Это сделано для того чтобы не отводить отдельный разряд под знак порядка. При фактическом порядке p, равном нулю, машинный порядок Мр равен 64, а при фактическом порядке равном +63D машинный порядок равен своему максимальному значению 127D. Для отрицательного порядка - 64D машинный порядок равен нулю. Таким образом, и положительные и отрицательные порядки представляют только положительными числами.

Пример 2. Записать число -19310 в формате двойное слово и плавающей точкой.

Решение.

Переведём десятичное число в двоичную СС. -19310 = -110000012 = -0.11000001*28.

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

Здесь мантисса m = -0.11000001, фактический порядок p = 810 = 10002.

Машинный порядок: Мр = p + 64 = 10002 + 10000002= 10010002.

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

48 Представление данных в ЭВМ

__________________________________________________________________________________

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

Пример 3. Записать десятичное число 9703 в двоично-десятичной

системе счисления.

 

 

 

Решение.

 

 

 

1001

0111

0000

0011

Таким образом, перевод десятичного числа 9703D в двоичнодесятичную СС дал такой результат: 1001011100000011. Этот перевод напоминает перевод шестнадцатеричных чисел в двоичную СС,

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

"+", а 1101 — знак "-".

Структура поля двоично-десятичного упакованного формата:

Цф

Цф

...

Цф

Знак

Здесь и далее: Цф — цифра, Знак — знак числа.

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

Пример 4. Представить число -193D в упакованном формате.

Решение.

0001

1001

0011

1101

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

Структура поля распакованного формата:

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

Пример 5. Представить число -193D в распакованном формате.

Решение.

0011

0001

0011

1001

1101

0011

Представление команд в ЭВМ

49

__________________________________________________________________________________

3.3. Представление команд в ЭВМ

Программа работы ЭВМ состоит из последовательности команд.

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

Поле команды состоит из двух частей: операционной и адресной. В операционной части команды указывается код операции (КОП). Код определяет действие, которое должна выполнить ЭВМ. Например, арифметическое действие — суммировать, логическое действие — инвертировать.

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

Таким образом, ЭВМ (точнее, процессор) выполняет действие, определяемое кодом операции, над данными, местоположение которых указано в адресной части команды. Количество указываемых в команде адресов может быть различным. Различают следующие форматы команд: одно-, двух- и трехадресные. Бывают и безадресные команды.

 

КОП

 

А1

 

 

 

КОП

 

А1

А2

 

 

КОП

 

А1

А2

А3

Операционная

Адресная часть команды

часть команды

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

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

1.Взять число, хранящееся по первому адресу А1.

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

3.Результат сложения записать по третьему адресу А3.

Вслучае двухадресной команды третий адрес отсутствует, и результат сложения можно записать либо по второму адресу А2 (с потерей исходной

50 Представление команд в ЭВМ

__________________________________________________________________________________

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

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

1.Вызов в АЛУ числа, хранящегося по адресу А1.

2.Вызов в АЛУ числа, хранящегося по адресу А2 и сложение его с первым числом.

3.Запись результата по адресу А3.

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

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

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

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

операции пересылки данных;

арифметические операции;

логические операции;

операции обращения к внешним устройствам ЭВМ;

операции передачи управления;

обслуживающие и вспомогательные операции.

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