Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ1ИНФ.doc
Скачиваний:
2
Добавлен:
17.07.2019
Размер:
315.9 Кб
Скачать

Исследование представления чисел в оперативной памяти персонального компьютера

1.Цель эксперимента: убедиться, что внутреннее представление чисел в оперативной памяти современного компьютера также является двоичным

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

Попробуем выяснить, в какой системе счисления хранятся числа в оперативной памяти? Для этого попытаемся извлечь задаваемое число непосредственно из ОЗУ. Для решения такой задачи будем использовать уже не такую простую программу на языке Паскаль.

ТЕХНОЛОГИЯ РАБОТЫ

1.Войти в среду ТУРБО-ПАСКАЛЬ

2.Набрать в редакторе ТУРБО-ПАСКАЛЬ программу, сохранив ее под именем CHISLO2:

PROGRAM BinariRepresentation2;

VAR i,m,b: BYTE; {8-битный целый без знака (0...255) порядковый тип}

BEGIN b:=65;

m:=$80; { $ - шестнадцатеричный, bin = 1 000 000}

FOR i:=1 TO 8 DO

BEGIN IF (MEM[SEG(b):OFS(b)] AND m) = 0

THEN WRITE (‘ 0‘)

ELSE WRITE (‘ 1‘);

m:=m SHR 1

END;

WRITELN

END.

Для понимания сущности эксперимента отметим, что моделью памяти DOS является линейная последовательность байтов. Каждый байт этой последовательности имеет адрес, состоящий из адреса сегмента (SEG) и смещения (OFS). Размер сегмента составляет 64 килобайта. Адрес задается следующим образом: $SSSS:S0000. знак $ означает шестнадцатеричное число. Для того, чтобы получить истинный адрес объекта, необходимо сегментную часть адреса $SSSS умножить на $10 и к полученному значению прибавить смещение S0000.

Пример :

Арес задан: $0FFF:$0010

  1. $0FFF * $10 = $0FFF0

  2. $0FFF0

$ 0010

$10000

При работе в DOS область используемой основной памяти – от $0 до $FFFFF. Значение сегмента и смещения адреса пересменой вычисляются с использованием функций SEG и OFS соответственно.

Существо программы заключается в следующем. В некоторую изучаемую переменную b мы поместили число 65. Затем предварительно подготовив в переменной m, так называемую, «маску» для выделения самого старшего бита числа выводим на экран по очереди содержимое всех 8 бит переменной b. Для этого в цикле извлекаем из памяти байт, в котором хранится значение переменной b ( в программе это записано специфически – MEM[SEG(b):OFS(b)], которое действительно напрямую извлекает из ОЗУ значение искомого байта (байта с переменной b), выделяет из него посредством операции AND один бит и выводит результат анализа на экран. Последний оператор цикла сдвигает «маску» на один разряд вправо, тем самым на следующем цикле будет выделяться и анализироваться следующий (соседний) бит.в следующий байт

  1. Откомпилировать программу, щелкнув два раза мышкой по кнопке COMPILE

  2. Если компилятор обнаружил синтаксические ошибки, устранить их и снова откомпилировать программу

  3. Если компилятор синтаксических ошибок не обнаружил, запустить программу на решение, дважды щелкнув мышью по кнопке RUN

  4. Нажав одновременно на клавиатуре кнопки (Alt-F5), вы обнаружите на экране строку вида 01000001. Запишите полученный результат и, используя известный вам способ перевода десятичных чисел в двоичные, докажите, что десятичному числу 65 соответствует двоичное число (в формате байта) 01000001

  5. Внесите изменение в программу, введя вместо числа 65 любое другое, например 72, и повторите пункты 3-6, доказав правильность отображения нового числа.

  6. Внесите изменения в программу – вместо константы 8 в верхнем пределе цикла запишите 16. Повторите пункты 3-6 и обратите внимание, с какой стороны будут приписаны дополнительные нули.

  7. Замените 16 на 32 и повторите пункты 3-6. Обратите внимание как изменится результат на экране.

  8. Замените 32 на 255 и повторите пункты 3-6. Замените 255 не 256, повторите пункты 3-6 и проанализируйте полученный результат.

  9. Сделайте вывод о том, в какой форме хранятся числа в ОЗУ персонального компьютера. Почему компьютер отказывается решать задачу при верхнем пределе цикла равном 256.

ЗАДАНИЕ 6 Исследование представления чисел во внешней памяти персонального компьютера

1.Цель эксперимента: убедиться, что данные в файлах на внешних носителях также хранятся в двоичном коде. Проверить утверждение о принципиальной неразличимости двоичных кодов для разных видов информации

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

ТЕХНОЛОГИЯ РАБОТЫ

1. В текстовом редакторе Блокнот наберите единственный символ – латинскую заглавную букву А. Не нажимая никаких других кнопок, на клавиатуре сохраните этот текстовый файл под именем proba.txt в той директории, где находится папка PASCAL, записав путь к этой папке.

2.Наберите в редакторе ТУРБО-ПАСКАЛЬ программу, сохранив ее под именем CHISLO3 (программа во многом напоминает предыдущую, поэтому используйте прием копирования, комментарии не набирайте).

PROGRAM BinariRepresentation3;

VAR i,m,b: BYTE; {8-битный целый без знака (0...255) порядковый тип}

f: FILE OF BYTE; {задание переменой файлового типа}

BEGIN ASSIGN(f,’C:\pascal\proba.txt’); {связывание файловой переменой f с именем файла proba.txt,прописав путь к нему C:\pascal\ }

RESET (f); {инициация файла с помощью встроенной процедуры}

READ(f,b); {чтение переменных}

m:=$80; { $ - шестнадцатеричный, bin = 1 000 000}

FOR i:=1 TO 8 DO

BEGIN IF (b AND m) = 0

THEN WRITE (‘ 0‘)

ELSE WRITE (‘ 1‘);

m:=m SHR 1 {сдвиг вправо, SHL – сдвиг влево}

END;

WRITELN;

WRITELN (b);

CLOSE(f); {закрытие файла с сохранением связи}

END.

Данная программа читает из файла proba.txt, размещенного на жестком диске С, значение байта, соответствующего латинскому символу А (десятичный код 65, двоичный код 01000001 по таблице кодов ASCII) в переменную b, а затем выводит на экран в двоичном и десятичном представлении.

  1. Откомпилировать программу, щелкнув два раза мышкой по кнопке COMPILE

  2. Если компилятор обнаружил синтаксические ошибки, устранить их и снова откомпилировать программу

  3. Если компилятор синтаксических ошибок не обнаружил, запустить программу на решение, дважды щелкнув мышью по кнопке RUN

  4. Нажав одновременно на клавиатуре кнопки (Alt-F5), вы обнаружите на экране две строки

01000001

65

Запишите полученный результат.

7.Внесите изменение в текстовый файл, набрав вместо латинского символа А, например, латинский символ D (десятичный код в таблице ASCII – 68), и повторите пункты 1-6, (доказав, переводом десятичного числа 68 в двоичную форму представления), правильность отображения нового символа.

8. Внесите изменение в текстовый файл, набрав вместо латинского символа D, например, цифру 5 (десятичный код в таблице ASCII – 53 ) и повторите пункты 1-6, (доказав, переводом десятичного числа 53 в двоичную форму представления), правильность отображения нового числа.

9.Сделайте вывод о том, в какой форме хранится числовая и символьная информация во внешней памяти персонального компьютера.

Задание 7. Исследование возможностей представления чисел в персональном компьютере

Цель эксперимента: совершенствуя навыки в работе с табличным процессором Excel , убедиться, что возможности современно компьютера по хранению целых чисел огромны, но не безграничны и иногда определяются применяемыми прикладными программами

7.1 ТЕХНОЛОГИЯ РАБОТЫ

Для подтверждения этого заявления воспользуемся расчетами в EXEL известной математической функции факториал n!=(n-1)* n. Для этого выполним следующую последовательность действий.

  1. Откроем EXCEL, создадим книгу 1 под именем FACTORIAL

  2. Отформатируем ячейки поля A-D х 1-3 – «числовой общий».

  3. Запишем в соответствующие ячейки листа 1 книги константы и формулы, нажимая в каждой ячейке Enter, так, как показано в таблице 1 (ФАКТР русскими буквами, остальное – латинскими)

Таблица 1. Исходные данные для проведения эксперимента

A

B

C

D

E

1

5

=ФАКТР(А1)

2

= A1 - 1

=ФАКТР(А2)

=B2 * A1

3

=C1-C2

=ЕСЛИ(С1-С2=0;”да”;”нет”)

4

  1. Уясните существо решаемой задачи и определите правильно ли компьютер принимает решение, записав в ячейке 3D «да».

  2. Замените в ячейке 1А число 5 последовательно на числа 10, 15, 20, 25 и проанализируйте принимаемые компьютером решения. Особенно обратите внимание на «странный» результат в ячейке 3D при значении в ячейке А1 равном 25: ячейка С3, вычисленная как разность С1 – С2, равняется нулю, но проверка в клетке D3 утверждает, что это не так.

Предложите объяснение этому несоответствию.

7.2 Исследование ограничений, накладываемых ППП Excel(проблема малых ошибок в дробных числах)

Мы убедились, что любой современный компьютер работает в двоичной системе. Отсюда следует, что при вычислении с дробными числами (и даже при записи исходных дробных чисел) почти всегда возникают небольшие ошибки. Например, при записи в память компьютера семи дробных чисел: 0.1; 0.2; 0.3; 0.4; 0.5; 0.6; 0.7 только одно из них (а именно, число 0.5, в силу того, что оно точно равно дроби ). Число же, например, 0.1 = , запишется с пусть с небольшой, но все же с ошибкой, потому что в компьютере оно представляется суммой бесконечно убывающей геометрической прогрессии, составленной из следующих двоичных дробей:

Какой бы совершенной ни была конструкция компьютера, он все же в принципе не может учесть все слагаемые этой суммы, ибо их количество в принципе бесконечно. Если же отбросить все слагаемые, меньше некоторого заданного, то неизбежно возникнет ошибка: число 0.1 будет изображено с некоторой точностью.

Пока компьютеры имели малую разрядность для представления дробны чисел (например, шесть знаков после запятой), такого рода ошибки в записи чисел обнаруживались достаточно просто. Например, если из-за ошибок данного типа вместо числа 0.1 в памяти компьютера хранится немного меньшее число 0.1 - 0.000000017 = 0.099999983 (обратите внимание, что эта ошибка находится за пределами шести знаков после запятой), то при сложении 10 000 экземпляров этого числа получится число 999.99983, вместо числа 1000.

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

Покажем это на примере того, что в пакете EXCEL «корень из двух минус корень из двух – не равен нулю».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]