|
После
зарезервированной области в нижних адресах памяти начинается
рабочая область, в которую загружаются программы и где
хранятся их данные.
Можно исследовать память IBM/PC и установить, какие
блоки используются и где они размещены в адресном
пространстве. Программы могут пытаться выполнять чтение и
запись по любым адресам памяти. Можно предположить, что
обращение к неподключенной памяти приведет к появлению
сигнала ошибки, но на практике этого не происходит. Причина
этого проста - работа микропроцессора 8088 с памятью
заключается в обращении к каналу ввода/вывода, который описан
в главе 2, и ожиданием результата. Даже если память не
подключена, микропроцессор не замечает разницы.
Однако, можно достаточно просто проверить наличие или
отсутствие памяти по определенному адресу. Один из методов
заключается в чтении из различных облас тей памяти с
последующей проверкой результатов. Непродолжительные
эксперименты показывают, что при большинстве методов чтения,
как через DEBUG, так и с помощью средств языка Паскаль,
результатом всегда оказывается байт со всеми единичными
битами; что соответствует шестнадцатиричному значению FF или
CHR$(255).
Такой результат никого не должен удивлять - ведь при
чтении несущетвующей памяти наиболее вероятно получить либо
все нули, либо все единицы. По какойто причине, которая мне
досих пор не понятна, интепретатор Бейсика всегда возвращает
значение CHR$(233). Результаты не совсем однозначны, но в
большинстве случаев Бейсик возвращает именно это странное
значение, CHR$(233), при чтении неподключенной памяти.
Такое свойство можно использовать для проверки того,
какая часть адресного простанства активна. Листинг 3.1.
показывает простую программу на Бейсике, которая считывает по
нескольку байт из каждого килобайта памяти и сравнивает их со
значением CHR$(233).
|