Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Sys_Programming / ЛР1 / СистСч.doc
Скачиваний:
20
Добавлен:
20.02.2016
Размер:
128 Кб
Скачать

Лабораторная работа №1 внутреннее представление целочисленных данных в ibm pc

Цель работы

Выполнить перевод заданных преподавателем чисел из десятичной в двоичную и шестнадцатеричную системы счисления. Дать их внутренне (машинное) представление в соответствии с диапазоном в знаковых и беззнаковых форматах типов ShortInt (signed char), Byte (unsigned char), Integer (int), Word (unsigned int). Машинное представление данных должно быть дано в двоичной и шестнадцатеричной системах счисления.

Порядок работы

  1. Вычислить для своего варианта целые числа.

  2. Перевести их из 10-тичной в 2-ичную и 16-ричную системы счисления.

  3. Получить их внутренне представление.

  4. Проверить правильность своих выкладок.

Целочисленные данные должы быть представлены во всех возможных для платформы WIN16 (WIN32) форматах с учетом диапазона их представления (см. табл.1).

В отчете по лабораторной работе должен быть представлен подробный протокол перевода всех заданных чисел из 10-тичной в 2-ичную и 16-ричную системы счисления.

Варианты

Преподаватель задает два базовых числа Х и Y. Студент должен прибавить и отнять от них номер своего варианта.

Например, пусть Х=4567, Y=60, №=45. Тогда получается следующие восемь целых чисел для варианта №=45, а именно:

  1. 4567 + 45 = 4612;

  2. 4567 - 45 = 4522;

  3. -4567 + 45 = -4522;

  4. -4567 - 45 = -4612;

  5. 60 + 45 = 105;

  6. 60 - 45 = 15;

  7. - 60 + 45 = - 15;

  8. - 60 - 45 = - 105;

Теоретические сведения

Для перевода целого числа, представленного в десятичной системе счисления, в систему счисления с основанием q необходимо данное число делить на основание до получения целого остатка, меньшего q, и т. д. До тех пор, пока последнее частное будет меньше q. Число в системе счисления с основанием q представится в виде упорядоченной последовательности остатков деления в порядке, обратном их получению. Причем старшую цифру числа дает последний остаток, а младшую – первый.

Для того чтобы сменить знак числа, нужно инвертировать все его биты и прибавить к нему единицу – получим представление ОТРИЦАТЕЛЬНОГО числа в дополнительном коде.

Для целых типов со знаком, под знак отводится старший бит, причем для положительных чисел он равен 0, а для отрицательных – 1.

Целочисленные типы, их диапазоны значений и количество требуемой для них памяти приведены в таблице 1.

Табл. 1

Тип

Диапазон значений

Требуемая память

Byte

0…255

1 byte

Shortint

-128…127

1 byte

Word

0…65535

2 bytes

Integer

-32768…32767

2 bytes

Longint

-2147483648…2147483647

4 bytes

Двоичные числа

Написание ассемблерных программ требует знаний организации всей системы компьютера. В основе построения блоков компьютера лежит понятие бита и байта. Они являются теми средствами, благодаря которым в компьютерной памяти представляются данные и команды. Для выполнения программ компьютер временно записывает программу и данные в основную память. Компьютер имеет также ряд регистров, которые используются при обработке данных и вычислениях.

Минимальной единицей информации в компьютере является бит. Бит может быть либо "выключен", при этом его значение равно нулю, либо "включен", тогда его значение равно единице. Единственный бит не обеспечивает представления большого количества информации, в отличие от группы битов.

Группа из восьми представляет собой байт. Восемь бит обеспечивают основу для двоичной арифметики и для представления символов, таких, как буква А или символ *.

Восемь бит дают 256 различных комбинаций включенных и выключенных состояний: от "все включены" (00000000) до "все включены" (11111111). Например, сочетание включенных и выключенных битов для представления буквы А выглядит как 01000001, а для символа * - 00101010. Каждый байт в памяти компьютера имеет уникальный адрес, начиная с нуля.

Может возникнуть вопрос, откуда компьютер "знает", что значение восьми бит 01000001 представляет букву А.. Когда на клавиатуре нажата клавиша А, система принимает сигнал от этой конкретной клавиши в байт памяти. Этот сигнал устанавливает биты в значение 01000001. Можно переслать этот байт в память, и если передать его на экран или принтер, то будет сгенерирована буква А.

По соглашению биты в байте пронумерованы от 0 до 7 справа налево, как это показано для буквы А:

Номера битов: 7 6 5 4 3 2 1 0

Значения битов: 0 1 0 0 0 0 0 1

Число 210 равно 1024, что составляет один килобайт и обозначается буквой К.

Процессор 8086 использует 16 - битовую архитектуру, поэтому он имеет доступ к 16 - битовым значениям как в памяти, так и в регистрах. Шестнадцатибитовое (двухбайтовое) поле называется словом. Биты в слове пронумерованы от 0 до 15 справа налево.

Преобразование чисел из десятичной системы счисления в двоичную

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

Метод 1. Деление на 2 в убывающей степени. Можно преобразовать десятичное число в двоичное, производя деление десятичного числа на 2 в соответствующей степени. Предположим, необходимо получить двоичный эквивалент десятичного числа 76. Наибольшим числом, которое не превышает 76 и которое можно выразить как два в степени, является число 64 (26). Поэтому необходимо установить бит 6 в двоичном эквиваленте:

01000000 = 64

Вычтем 64 из 76 и получим число 12. Наиболее близкое к нему число, выраженное как 2 в стпени, будет 8 (23), поэтому устанавливаем бит 3:

64

+8

01001000  72

Вычтем 8 из 12 и получим число 4, которое можно выразить как 22. Устанавливаем бит 2. Так как остатка больше нет, то получаем окончательное двоичное число 01001100b. Таким образом, был получен двоичный эквивалент путем последовательного ычитания чисел, выраженных как 2 в степени. Последовательность шагов показана ниже:

72/64 = 1, остаток 12

12/8 = 1, остаток 4

4/4 = 1, остаток 0

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

Метод 2. Повторяющееся деление на 2. Другой путь преобразования десятичного числа в двоичное, это последовательное деление десятичного числа на 2. Остаток от деления на каждом шаге будет заполнять соответствуюие разряды двоичного числа. Для демонстрации метода возьмем ранее исползованное число 76 (рис.1).

76 / 2 = 38, остаток 0

38 / 2 = 19, остаток 0

19 / 2 = 9, остаток 1

9 / 2 = 4, остаток 1

4 / 2 = 2, остаток 0

2 / 2 = 1, остаток 0

1 / 2 = 0, остаток 1

  1. / 2 = 0, остаток 0

0 1 0 0 1 1 0 0

Рис 1. Преобразование чисел

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

Преобразование чисел из двоичной системы счисления в десятичную

Для того чтобы получить десятичный эквивалент двоичного числа, необходимо каждую цифру двоичного числа умножить на 3 с показателем степени, равным номеру позиции. Десятичное 20 равняется 1, 21 равняется 2, 22 равняется 4 и т.д. например двоичное число 1111 эквивалентно десятично число 15:

Двоичное : 1111

1 * 23 8

1 * 22 +4

1 * 21 +2

1 * 20 +1

Сумма: =15

Двоичное : 1010

1 * 23 8

0 * 22 +0

1 * 21 +2

0 * 20 +0

Сумма: =10

В табл.1 приведены степени 2.

Таблица 1

2n

Десятичное значение

2n

Десятичное значение

20

1

28

256

21

2

29

512

22

4

210

1024

23

8

211

2048

24

16

212

4096

25

32

213

8192

26

64

214

16384

27

128

215

32768

Из табл. Видно, что если в 16-разрядном двоичном числе установлены все биты, то десятичный эквивалент будет иметь значение 65 535.

Двоичное 11001010. (Используем табл.1). Необходимо сложить десятичные значения для битов в следующих позициях: 7, 6, 3 и 1:

27+26+23+21 = 128+64+8+2 = 202

Двоичное 11111111. (Используем табл.1). Необходимо сумировать все позиции между 0 и 7. В результате десятичное значение 255, которое яаляется наибольшим числом, которое может быть сохранено в одном байте.

Двоичное 1000000010000000. (Используем табл.1). Необходимо сложить десятичные значения для битов в позициях: 15 и 7:

215+27 = 32768+128 = 32896

Двоичное 111111111111111111. (Используем табл.1). Результат 65535 – наибольшее возможное число для 16-разрядных двоичных чисел. Простейший путь для получения этого значения – из 216 вычесть 1:

216-1 = 65 535

Соседние файлы в папке ЛР1