А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Понятие о системах счисления, используемых в ЭВМ Под системой счисления понимается способ представления числовых данных с помощью некоторого ограниченного алфавита символов. В вычислительной технике и программировании применяются только позиционные системы счисления. В таких системах счисления позиция цифры в числе определяет ее вес, а общее количество символов алфавита – основание системы счисления. Непозиционные системы (к ним, например, относится римская система счисления) из-за сложности и неформализуемости в ЭВМ использоваться не могут. Из позиционных систем счисления, кроме общепринятой десятичной, на различных этапах подготовки и выполнения программ на ЭВМ применяются двоичная, восьмеричная, и шестнадцатеричная системы счисления. В двоичной системе счисления в качестве символов алфавита используются цифры 0 и 1, в восьмеричной - от 0 до 7, в шестнадцатеричной - от 0 до 9, а также латинские литеры от А до F для обозначения десятичных чисел от 10 до 15 (соответственно). В общем виде любое число D в позиционной системе счисления может быть представлено следующим образом: D = d p − 1 ⋅ b p − 1 + d p − 2 ⋅ b p − 2 + ... + d1 ⋅ b1 + d 0 ⋅ b 0 . + d − 1 ⋅ b − 1 + + d− n ⋅ b− n = где p− 1 ∑ di ⋅ bi , (1.2) i= − n di - цифра (символ алфавита) системы счисления; . - знак (точка), отделяющий целую часть числа от дробной (в математике в качестве разделителя используется запятая); b - основание системы счисления; p - число цифр в целой части числа; n - число цифр в дробной части числа; bi - вес цифры на соответствующей i-й позиции числа. 1 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Перевод чисел из одной системы счисления в другую Для перевода чисел из одной системы счисления в другую можно воспользоваться специальными таблицами соответствия, фрагмент которой приведен в таблице 1.2. Однако такой подход возможен только для простейших чисел. Т абли ца 1. 2 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 A 0 1 2 3 4 5 6 7 10 11 12 0 1 10 11 100 101 110 111 1000 1001 1010 11 12 13 14 15 16 17 32 64 255 2002 В С D E F 10 11 20 40 FF 7D2 13 14 15 16 17 20 21 40 100 377 3722 Двоичное Восьмеричное Шестнадное цатерич- Десятичное Двоичное Восьмеричное Шестнадное цатерич- Десятичное Представление чисел в различных системах счисления 1011 1100 1101 1110 1111 10000 10001 100000 1000000 11111111 11111010010 В общем случае для перевода чисел из двоичной, восьмеричной или шестнадцатеричной системы счисления в десятичную систему может служить формула (1.2). Пример 1. Перевести двоичное число D2 = 101101.1 в десятичный вид: D10 = 1 ⋅ 2 5 + 1 ⋅ 2 3 + 1 ⋅ 2 2 + 1 ⋅ 2 0. + 1 ⋅ 2 − 1 = 45.510 Пример 2. Перевести восьмеричное число D8 = 27.6 в десятичный вид: D10 = 2 ⋅ 81 + 7 ⋅ 8 0. + 6 ⋅ 8 − 1 = 23.7510 Пример 3. Перевести шестнадцатеричное число D16 = А4С.4 в десятичный вид: D10 = 10 ⋅ 16 2 + 4 ⋅ 161 + 12 ⋅ 16 0. + 4 ⋅ 16 − 1 = 2636.2510 2 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Для обратного перевода целых чисел из десятичной системы счисления в шестнадцатеричную, восьмеричную или двоичную системы можно воспользоваться алгоритмом последовательного деления исходного числа на основание системы счисления, в которую переводится число. Полученный остаток после первого деления является младшим разрядом переведенного числа. Образовавшееся частное снова делится на это основание. Из остатка получают следующий разряд переведенного числа и т.д. Пример 4. Перевести методом последовательного деления десятичное число D10 = 83 в двоичный, восьмеричный и шестнадцатеричный виды: D2 = 101 0011; D8 = 123; D16 = 53. Пример 5. Аналогичным образом можно убедиться, что десятичное число D10 = 1723 изображается следующим образом: а) в двоичном представлении - D2 = 110 1011 1011; б) в шестнадцатеричном представлении - D16 = 6BB; в) в восьмеричном представлении - D8 = 3273. Перевод дробной части десятичных чисел в иные формы представления выполняется методом последовательного умножения дробной части на основание системы счисления, в которую осуществляется перевод. Полученные целые числа, записанные в той же последовательности, будут составлять дробную часть в переведенном числе. Пример 6. 3 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Перевести десятичное число D10 = 0.125 в двоичный вид: Примечание. Не всегда имеется возможность точного перевода чисел. Хорошо переводятся дробные части чисел, кратные 0.2, 0.5, 0.25, 0.125 и т.п. Имеют практическое значение и следующие правила перевода чисел из двоичного представления в шестнадцатеричное и восьмеричное. Они базируются соответственно на использовании понятий тетрады - четырех бит и триады - трех бит. Пример 7. Перевести двоичное число D2 = 11111001010 в шестнадцатеричное и восьмеричное представление: D2 = 0111 1100 1010 → D16 = 7CA Тетрады D2 = 011 111 001 010 → D8 = 3712 Триады Для упрощения перевода двоичных чисел в десятичное представление целесообразно перевести их вначале в шестнадцатеричное представление, а затем, используя формулу (1.2), получить искомый результат. Пример 8. Перевести двоичное число D2 = 11 0001 1101 0110 в десятичное представление: D16 = 3 1 D 6 ⇒ D10 = 3163 + 1162 + 13161 + 6160 = 12758 Для перевода шестнадцатеричных чисел в двоичное представление следует каждую шестнадцатеричную цифру записать четырьмя двоичными. При переводе восьмеричных чисел в двоичную форму восьмеричная цифра записывается тремя двоичными символами. Пример 9. 4 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Перевести шестнадцатеричное число D16 = A0D4 в двоичное представление: D2 = 1010 0000 1101 0100 Пример 10. Перевести восьмеричное число D8 = 175 в двоичное представление: D2 = 1 111 101 Выполнение операций над данными Непосредственно в памяти ЭВМ данные представляются в двоичном виде, то есть с применением двоичной системы счисления. Восьмеричная и шестнадцатеричная системы счисления служат в качестве промежуточных систем к общепринятой десятичной системе. В связи с этим представляет интерес, как реализуются арифметические операции над двоичными, восьмеричными и шестнадцатеричными данными. Принципиальных отличий от десятичной арифметики не существует. Только в двоичной арифметике перенос единицы в старший разряд при сложении возникает значительно чаще (в восьмеричной – немного чаще, в шестнадцатеричной – реже). 5 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Правила выполнения операций сложения и умножения в двоичной арифметике 0+ 0 = 0 0⋅0 = 0 0+1= 1 1+ 0 = 1 0 ⋅1 = 0 1⋅ 0 = 0 1⋅1 = 1 1 + 1 = 10 Фрагменты из правил выполнения арифметических операций в шестнадцатеричной арифметике 0+ 0= 0 0− 0= 0 9 + 1= A C − 3= 9 A + 6 = 10 F + 2 = 11 F − 1= E 14 − A = A Пример 11. Выполнить операции сложения и перемножения двух десятичных чисел 5 и 7 в двоичном виде: D Результат сложения 2 = 1100 ⇒ D10 = 12 Результат умножения D2 = 100011 ⇒ D10 = 35 Пример 12. Выполнить операции сложения и читания над шестнадцатеричными данными: Пример 13. Выполнить операции сложения и вычитания над восьмеричными данными: 6 вы- А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Представляет интерес операция сдвига над двоичными данными. Сдвиг влево на n двоичных разрядов соответствует умножению числа на 2n , а сдвиг вправо – делению числа на 2n. Пример 14. Умножить десятичное число 5 на 8: D10 = 5 ⇒ D2 = 101 D10 = 8 = 23 ⇒ D2 = 1000 Произведение D2 = 10 1000 ⇒ D10 =40 Пример 15. Разделить десятичное число 1536 на 64: D10 = 1536 ⇒ D2 = 110 0000 0000 D10 = 64 = 26 ⇒ D2 = 100 0000 Частное D2 =1 1000 ⇒ D10 =24 Форматы представления данных Для хранения целых чисел чаще всего отводится 2 или 4 байта. Самый левый бит в двоичном представлении служит для указания знака числа1: 0 – для положительных чисел и 1 – для отрицательных чисел. Остальные разряды используются для задания собственно чисел. Таким образом, максимально возможное число, хранимое в 2-х байтах, будет равным (215 – 1) = 32 767. Для хранения вещественных чисел отводится, как правило, 4 или 6 байтов. Дробная часть от целой в таких числах разделяется условной точкой. Различают две формы представления вещественных чисел с фиксированной и с плавающей точкой. Для чисел с фиксированной точкой условная точка располагается правее правого крайнего разряда (для целых чисел) или находится в другом месте. Для чисел с плавающей точкой (рис. 1.3) используется представление чисел в экспоненциальной (полулогарифмической) форме: (1.3) D = ± m ⋅ b± p , 1 В ЭВМ находят применение также целые числа без знака – адреса памяти, используемые для доступа к хранимым в памяти данным, логические данные, принимающие значения «истина» или «ложь» и т.п. 7 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» где m - мантисса числа; b - основание системы счисления; р - порядок числа. Рис. 1.4. Формат числа с плавающей точкой Знак чисел по-прежнему занимает самый левый бит. Оставшиеся 7 бит левого байта служат для хранения модифицированного порядка числа – так называемой характеристики. Суть модификации заключается в исключении отрицательных порядков. В качестве нулевого порядка принимается 4016 (6410). Отрицательные порядки принимают значения от 3F16 до 0116 (от -110 до -6310) , положительные – от 4116 до 7F16 (от +110 до +6410). Оставшиеся правые байты памяти занимает мантисса числа – его значащие цифры. Символьные данные занимают в памяти 1 байт 1. Конкретное двоичное (шестнадцатеричное) представление символов зависит от используемого принципа кодирования информации в ЭВМ, задаваемого кодовыми таблицами. Использование дополнительного кода для обработки числовых данных С целью облегчения технической реализации арифметические данные хранятся и обрабатываются в ЭВМ не в обычном - прямом двоичном коде, а в дополнительном коде. Знаковый разряд чисел не претерпевает изменений. Тем же остается и двоичное представление для положительных чисел – 1 Без учета дополнительной управляющей информации, например, о начертании символа (обычный, курсив, полужирный), их цвете и т.п. 8 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» на этом интервале прямой и дополнительный двоичные коды полностью совпадают. По-разному кодируются только отрицательные числа. Для получения дополнительного кода отрицательного числа вначале выполняют инверсное отображение представления числа в прямом коде - единицы в соответствующих разрядах числа, кроме знакового, заменяют нулями и наоборот1. Затем к младшему разряду полученного кода прибавляют единицу. Фрагмент соответствия десятичных данных двоичному представлению приведен в таблице 1.3. Использование дополнительного кода дает ряд преимуществ. И главное из них, что операции сложения и вычитания могут быть реализованы одним и тем же устройством, называемым сумматором. Кроме того, в дополнительном коде отсутствует неоднозначность, и каждое последующее число строго больше предыдущего на двоичную единицу. Это позволяет применять одни и те же правила двоичной арифметики для всего диапазона чисел - от (-2 n-1) до (+2 n-1 - 1), где n - число двоичных разрядов, отведенных под представление числа. Та бли ца 1 . 3 Двоичное 4-х битовое представление десятичных чисел Десятичное число -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 1 Прямой код Обратный код 1111 1110 1101 1100 1011 1010 1001 1000 или 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 или 0111 0001 0010 0011 0100 0101 0110 0111 Дополнительный код 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 Такое инверсное представление называется обратным кодом 9 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» Пример 16. Записать в дополнительном коде десятичное число D10 = - 83, под которое отведено 2 байта памяти: а) прямой двоичный код числа D10 = + 83 ⇒ D2 = 0000 0000 0101 0011; б) прямой двоичный код числа D10 = - 83 ⇒ D2 = 1000 0000 0101 0011; в) обратный код числа D10 = - 83 ⇒ D2 = 1111 1111 1010 1100; г) дополнительный код числа D10 = - 83 ⇒ D2 = 1111 1111 1010 1101. Пример 17. Перевести двоичное число D2 = 1000 1100 0000 1010 из дополнительного кода в десятичное представление: а) обратный код числа D2 = 1000 1100 0000 1001; (вычли 1) б) прямой двоичный код числа D2 = 1111 0011 1111 0110; в) прямой двоичный код положительного числа D2 = 0111 0011 1111 0110; г) десятичное преставление положительного числа D10 = 214 + 213 +212 + 29 + 28 + 27 + 26 + 25 +24 + 22 + 21 = =16384+8192+4096+512+256+128+64+32+16+4+2=29686 д) десятичное преставление исходного (отрицательного) числа D2 = 1000 1100 0000 1010 ⇒ D10 = - 29686 Пример 18. Выполнить в двоичном дополнительном коде операцию сложения двух десятичных чисел, хранимых в области памяти, равной 2 байтам: 1 D10 = − 5 ⇒ 1111 1111 1111 1011 (дополнительный код) 2 D10 = + 8 ⇒ 0000 0000 0000 1000 (дополнительный код) рез D10 = + 3 ⇒ 0000 0000 0000 0011 (результат сложения) Примечание. При сложении значащая единица была перенесена в область знакового разряда. Там к ней прибавилась знаковая единица пер- 10 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» вого числа. В итоге, единица из знакового разряда результата была вытеснена за пределы разрядной сетки. Кодирование символьной информации В настоящее время наибольшее распространение для кодирования информации в ЭВМ находит кодовая таблица IBM. Она соответствует американскому стандартному коду обмена информации (American National Standard Code for Information Interchange) ASCII. Кодовая таблица IBM состоит из основной таблицы ASCII (символы с номерами от 010 до 12710) и ее расширения (символы с номерами от 12810 до 25510). Основная таблица ASCII содержит управляющие символы операционной системы (коды от 0016 до 1F16), арабские цифры (коды от 3016 до 3916), прописные латинские буквы (коды от 4116 до 5А16), строчные латинские буквы (коды от 6116 до 7А16), а также знаки препинания, математические символы и специальные знаки. Таблица расширения ASCII включает специфические символы алфавитов европейских стран, греческие буквы, символы псевдографики, а также дополнительные специальные знаки и математические символы. Поскольку в таблице ASCII отсутствуют символы многих национальных алфавитов, в том числе русского, на практике используют модифицированные кодовые таблицы, отличающиеся только измененной таблицей расширения, в которой вместо редко используемых знаков включаются требуемые символы. Работая на ПЭВМ в среде операционной системы Windows, пользователь легко получает доступ к этим таблицам - путем переключения раскладки клавиатуры либо выбирая тот или иной шрифт. Операционная система предоставляет простой способ просмотра практически всех символов используемой кодовой таблицы1. В ситуации набора какой-либо текстовой информации вме1 Некоторые управляющие символы не имеют графического отображения или отображаются в виде знака 11 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» сто нажатия на алфавитно-цифровую клавишу наберите комбинацию [Alt+номер символа]. Номер символа из кодовой таблицы следует набирать в десятичном виде в правой цифровой части клавиатуры. Например, для набора латинской строчной буквы b (6216) нужно нажать комбинацию [Alt+98], символа § (1516) [Alt+21]. Для ввода украинской буквы Є (Е216) следует установить русскую раскладку клавиатуры и ввести комбинацию клавиш [Alt+242]. На практике для включения в документы всевозможных экзотических символов данный способ не применяют, а пользуются еще более простым - режимом вставки символов из отображаемых таблиц подключенных шрифтов. Понятие о структуре программ ЭВМ Абсолютно все программы, предназначенные для выполнения на ЭВМ, независимо от того, на каком бы языке программирования они ни были первоначально разработаны, после трансляции исходных текстов переводятся в двоичные машинные коды. Структура машинных кодов программ определяется архитектурой ЭВМ и особенностями установленной операционной системы. Перечень используемых машинных кодов задается системой элементарных команд процессора, а их последовательность – требуемым алгоритмом обработки данных. Элементарные команды семейства микропроцессоров 80i86 занимают в памяти от одного до четырех байт. Самый левый байт команды содержит двоичный код операции. Остальные байты, как правило, задают значения операндов1. Операнды указывают на регистры или адреса памяти, где хранятся данные, а также на их непосредственные значения. Программа представляет собой совокупность сегментов: команды группируются в так называемом сегменте кодов, данные – в сегменте данных и т.п. Сегменты выравниваются в памяти по адресу параграфа – области, кратной 16. Величина отдельных сегментов не может превосходить 64 Кб. Это, однако, не накла- 1 Однобайтовые машинные команды не имеют операндов, так как выполняют заданные, специфические функции обработки данных 12 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» дывает ограничений на верхний предел памяти, занимаемой программой. Для экономии памяти под запись программы адреса в командах указываются не абсолютные, а в виде смещений относительно начальных адресов сегментов. Структура хранения программ в памяти ЭВМ наиболее полно просматривается при написании их на языке Ассемблера. Этот язык позволяет также учесть особенности строения ЭВМ. Тем самым, он обеспечивает создание высокоэффективных программ как по времени их выполнения, так и занимаемой ими памяти. Вопросы на закрепление учебного материала 1. Дайте краткую характеристику позиционных систем счисления. 2. Чем вызвана необходимость использования двоичной, восьмеричной и шестнадцатеричной систем счисления? 3. Покажите на примерах суть алгоритма перевода целых чисел из десятичного представления в шестнадцатеричное, восьмеричное и двоичное представления. 4. Приведите пример перевода дробных частей десятичных чисел в двоичное представление. 5. Дайте толкование терминов «триада» и «тетрада». Приведите примеры перевода данных из одной системы счисления в другую на основе использования этих понятий. 6. Поясните правила представления чисел в прямом, обратном и дополнительном кодах. 7. В чем суть операции сдвига? 8. Нарисуйте форматы хранения целых и вещественных чисел в памяти ЭВМ. 9. Оцените достоинства и недостатки используемых форматов хранения целых и вещественных чисел в памяти ЭВМ. 10. Определите предпочтения в хранении вещественных чисел в форматах с фиксированной и с плавающей точкой. 11. Какие, на Ваш взгляд, достоинства и недостатки представления чисел в формате с плавающей точкой? 12. Как записать число в двоичном дополнительном коде? Приведите примеры. 13 А.В.Золотарюк. Фрагмент книги «Технология работы с Microsoft Office» 13. Поясните предназначение кодовых таблиц. Каковы достоинства и недостатки кодовой таблицы ASCII? 14. Шестнадцатеричное представление числа с плавающей точкой равно D16 = 41 00 00 FF. Переведите это число в десятичный вид. 15. При выполнении одной их команд программы произошел сбой. Известны физические адреса памяти начала загрузки программы (A16=FC34A8) и команды, где произошел сбой (A16=FC857С). Определите смещение этой команды относительно начала программы. 14