Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
Изучение средствами Delphi способов хранения в компьютерной памяти различных данных
...Мы интуитивно понимаем, что данные предшествуют алгоритму, ведь прежде, чем ВведениеВам когда-нибудь (хотя бы единожды!) хотелось заглянуть внутрь памяти компьютера и благодаря каким-то экстраординарным способностям суметь разглядеть, как там все хранится? Мне кажется, большинство учителей информатики, не задумываясь, ответят на этот вопрос утвердительно. Почему? Да потому, что знание основных идей компьютерного представления данных очень помогает понять многие важные для практики особенности их обработки. То, что память состоит из отдельных битов, сразу же позволяет сделать важный вывод о дискретности любых компьютерных данных. Без представления о ячейках памяти невозможно до конца понять, какую роль играет в современном компьютере байт и почему все типы данных занимают в памяти только целое количество байт. Наконец, как вы объясните, что значит сообщение «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. Технология эксперимента2. Данные: от Турбо Паскаля к Delphi3. Вещественные числа в сопроцессореПриложение на дискеНа диске прилагаются все описанные в статье проекты, а также несколько дополнительных, о которых в тексте только упоминалось. Также с исходными текстами приведены проекты FPview_micro и FPview_mini, описанные в 3.7. Наконец, в папке normal вы найдете полный проект, демонстрирующий процесс нормализации десятичных чисел (см. рис. 7). Буду рад, если что-нибудь окажется вам полезным.
Литература
1 разумеется, программным способом можно организовать вычисления с разрядностью во много раз больше!
2
к тому же и видеопамять давно работает по-другому: не в текстовом, а в графическом режиме!
3
не скрою, что оформить свои мысли в форме данной статьи меня первоначально подтолкнуло чтение недавней глубокой и интересной публикации [6], где для анализа способов хранения данных по-прежнему применялся Borland Pascal; но, как это часто бывает, при подготовке материала удалось найти много интересного вне связи с первоначальными замыслами
© Е.А.Еремин, 2010 Публикация: Еремин Е.А. Изучение средствами Delphi способов хранения в компьютерной памяти различных данных. Информатика, 2010, N 19, с.4-23. |