Данному образовательному сайту пришлось несколько раз менять свое имя. С 2011 года доступ к нему обеспечивается по URL
http://educomp.runnet.ru

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта

Изучение средствами Delphi способов хранения в компьютерной памяти различных данных

...Мы интуитивно понимаем, что данные предшествуют алгоритму, ведь прежде, чем
выполнять какие-либо операции, нужно иметь объекты, к которым они применяются.
Н. Вирт [2]

Введение

Вам когда-нибудь (хотя бы единожды!) хотелось заглянуть внутрь памяти компьютера и благодаря каким-то экстраординарным способностям суметь разглядеть, как там все хранится? Мне кажется, большинство учителей информатики, не задумываясь, ответят на этот вопрос утвердительно. Почему? Да потому, что знание основных идей компьютерного представления данных очень помогает понять многие важные для практики особенности их обработки. То, что память состоит из отдельных битов, сразу же позволяет сделать важный вывод о дискретности любых компьютерных данных. Без представления о ячейках памяти невозможно до конца понять, какую роль играет в современном компьютере байт и почему все типы данных занимают в памяти только целое количество байт. Наконец, как вы объясните, что значит сообщение «floating point overflow», ничего не сказав о представлении чисел?

Существует и еще один, на мой взгляд, важный аспект. Как проверить достоверность и точность тех сведений, которые мы хотим дать ученикам (например, из Интернета)? Вот яркий пример, с которым я совсем недавно столкнулся в своей практике. В современных IBM-совместимых ПК существует специальный тип вещественных чисел, который называется EXTENDED. Он примечателен тем, что имеет максимально возможную аппаратную1 разрядность – 80 бит. Иначе говоря, это самое «мощное» представление вещественных чисел, «штатно» предусмотренное в современных компьютерах (именно поэтому его хорошо знают те, кто часто принимает участие в олимпиадах по информатике). Зададим себе вопрос: каково самое маленькое вещественное число, которое может аппаратно сохранить компьютер IBM PC? Найти внятный ответ на такой, казалось бы, простой и естественный вопрос, оказалось на удивление непросто. Руководство по Borland Pascal [8] указывает для типа EXTENDED минимальное значение 3,4*10-4932, а известная книга [1] – 10-4951. В Интернете даже при беглом поиске «выплыли» константы 1,9*10-4952, 3,6*10-4951 и 8*10-4933. Ну и какое же из них нам писать на доске? Видимо, перед нами один из случаев, когда самый надежный вариант проверки – спросить значение у самого компьютера, что мы позднее обязательно сделаем (см. эксперимент 6).

Одним из принципиальных препятствий изучения содержимого памяти служит, как ни странно, современное программное обеспечение. Заботясь о «невмешательстве» в свою работу, любая многозадачная операционная система «всеми силами» пресекает любые попытки получить доступ к конкретной ячейке памяти. Не случайно большинство экспериментов над данными производится в «старом добром» Турбо Паскале [4-6], рассчитанном на однопользовательский MS-DOS и полный контроль над памятью машины. Между прочим, сейчас и здесь результаты выглядят не так убедительно, ибо, будучи запущенным в среде Windows, Турбо Паскаль способен контролировать лишь некоторую виртуальную машину MS-DOS, которую создает для него Windows. Так что когда вы с помощью программы на Паскале записали код в видеопамять и увидели символ, ему соответствующий – все это искусная симуляция, поскольку ОС никогда не даст вам доступа в «настоящую» видеопамять2! Да и сама среда Турбо Паскаля уже кажется такой архаичной, что возникают сомнения, надо ли в ней уметь работать нынешнему школьнику.

Так и хочется воскликнуть: «Вперед в более современную среду Delphi!» Но мы только что говорили о современных программах: они стремятся как можно дальше отделить нас от памяти. Вот и из Delphi по сравнению с Турбо Паскалем изъяты функции определения адреса переменной SEG() и OFS(), а главное исключен предопределенный массив MEM, с помощью которого можно было получить доступ к байтам памяти. Кончено, можно назвать множество убедительных причин, почему сделанные изменения логичны, но проблему доступа к ячейкам это решить не поможет.

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

Итак, цели данной публикации следующие.

  1. Разработать простой метод изучения двоичного содержимого переменных в среде Delphi.
  2. Используя этот метод, рассмотреть некоторые особенности представления данных в Delphi по сравнению с Турбо Паскалем.
  3. Вычислить и уточнить некоторые характеристики хранения вещественных чисел в математическом сопроцессоре (как пример задачи, где Delphi выступает только инструментом исследования, поскольку здесь предмет изучения есть работа сопроцессора, а не особенности конкретного языка программирования).
  4. Разработать учебную инструментальную программу, демонстрирующую для трех важнейших вещественных типов процесс перевода любого числа в его внутреннее представление и обратно.
  5. Попутно рассказать о некоторых интересных проблемах хранения данных в ОЗУ, которые часто остаются за рамками рассмотрения в школьном курсе информатики.

1. Технология эксперимента

2. Данные: от Турбо Паскаля к Delphi

3. Вещественные числа в сопроцессоре

Приложение на диске

На диске прилагаются все описанные в статье проекты, а также несколько дополнительных, о которых в тексте только упоминалось. Также с исходными текстами приведены проекты FPview_micro и FPview_mini, описанные в 3.7. Наконец, в папке normal вы найдете полный проект, демонстрирующий процесс нормализации десятичных чисел (см. рис. 7). Буду рад, если что-нибудь окажется вам полезным.

{Здесь, на сайте, полное содержимое диска (архив около 900 кб) также можно загрузить.}

Литература

  1. Андреева Е., Фалина И. Информатика: системы счисления и компьютерная арифметика. М.: Лаборатория Базовых Знаний, 1999, 256 с.
  2. Вирт Н. Алгоритмы и структуры данных. СПб.: Невский Диалект, 2001. 352 с.
  3. Демидович Б.П., Марон И.А. Основы вычислительной математики. М.: Государственное издательство физико-математической литературы, 1963, 659 с.
  4. Еремин Е.А. Представление информации в ЭВМ средствами Turbo Pascal / Информатика и образование, 1999, N 3, с.47-58 (статья доступна здесь)
  5. Еремин Е.А. Популярные лекции об устройстве компьютера. СПб.: BHV-Петербург, 2003, 272 с.
  6. Русаков С.В., Миндоров Н.И., Соловьева Т.Н. Вычислительная погрешность / Информатика N 11, 2010, с.2-17
  7. Яшкардин В. IEEE 754 – стандарт двоичной арифметики с плавающей точкой.
  8. Borland Pascal With Objects. Руководство по языку программирования. 393 с.
  9. IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985)
  10. IEEE Standard for Floating-Point Arithmetic (IEEE Std 754-2008)
  11. Intel 64 and IA_32 Architectures Software Developer's Manual. Volume 1. Basic Architecture
  12. Online Binary-Decimal Converter.

1 разумеется, программным способом можно организовать вычисления с разрядностью во много раз больше!

2 к тому же и видеопамять давно работает по-другому: не в текстовом, а в графическом режиме!

3 не скрою, что оформить свои мысли в форме данной статьи меня первоначально подтолкнуло чтение недавней глубокой и интересной публикации [6], где для анализа способов хранения данных по-прежнему применялся Borland Pascal; но, как это часто бывает, при подготовке материала удалось найти много интересного вне связи с первоначальными замыслами


© Е.А.Еремин, 2010
Публикация:
Еремин Е.А. Изучение средствами Delphi способов хранения в компьютерной памяти различных данных. Информатика, 2010, N 19, с.4-23.


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com