Личный сайт BitByByte: Статьи.
Логотип.
 Разделы сайта Cтатьи.
Сайт в разработке!

Статистика сайта.

Посещений за день: 14.
Посещений за месяц: 1837.
Посещений за год: 1807.


Баннеры.

DMconnect
Maksy's PWS


Статистика в картинках.

likes counter


  • Главная.
  • Новости.
  • Программы.
  • Файлы.
  • Контакты.
  • Чат "Пиво".
  • Форум.
  • Статьи.
  • Ссылки.
  • Гостевая.
  • Память IBM/PC: что это такое и как осуществляется чтение из памяти.

     Одним из основных элементов компьютера, позволяющим ему нормально функционировать, является память. Внутренняя память компьютера - это место хранения информации, с которой он работает. Внутренняя память компьютера является временным рабочим пространством; в отличие от нее внешняя память, такая как файл на дискете, предназначена для долговременного хранения информации. Информация во внутренней памяти не сохраняется при выключении питания.

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

     Память компьютера организована в виде множества ячеек, в которых могут храниться значения; каждая ячейка обозначется адрсом. Размеры этих ячеек и, собственно, типы значений, которые могут в них храниться, отличаются у разных компьютеров. Некоторые старые компьютеры имели очень большой размер ячейки, иногда до 64 бит в каждой ячейке. Эти большие ячейки назывались "словами". Супер-копьютеры Крей и компьютер Юнивак ориентированы на работу со словами.

     Трудность работы со словами большой длины заключается в том, что обычно программы работают не с целыми словами, а с их частями. Поэтому большинство современных компьютеров, и в том числе все персональные компьютеры, используют значительно меньший размер ячейки памяти, состоящей всего из 8 бит или "байта": Байт - это очень удобная единица информации, отчасти потому что он позволяет хранить код одной буквы алфавита или одного символа. Поскольку символ занимает в точности один байт, термины "байт" и "символ" часто используются в одном и том же смысле.

     Так как IBM/PC использует ячейки памяти длиной восемь бит или один байт, в памяти могут храниться значения, которые можно выразить восемью битами. Это значения до двух в восьмой степени или 256. Смысл величины, записанной в ячейку памяти, зависит от способа ее использования. Можно считать, что байт содержит код алфавитного символа - так называемый код ASCII. В то же время его можно рассматривать и как число. Все 256 возможных значений могут рассматриваться либо как положительные числа от 0 до 255, либо как числа со знаками в диапазоне от - 128 до + 127. Кроме того, байт может использовать как часть большого объема данных, например, строки символов или двухбайтного числа.

     Для удобства манипулирования символьными данными компьютеру необходимо чтобы коды символов преобразовывались в байтовые величины. Большинство компьютеров, включая IBM/PC, используют код ASCII, американсткий стандартный код для обмена информации. *Юольшинство компьютеров фирмы "IBM" используют другую схему кодирования символов, называющуюся EBCDIC; системы ASCII и EBCDIC организованы по разному, но перекодировка из одной системы в другую большого труда не представляет).

     В коде ASCII числовые значения присваиваются всем обычно используемым символам, таким как буквы алфавита, строчные и заглавные, цифры, знаки пунктуации. Несколько кодов зарезервированы для управления, например, чтобы указать конец строки символов. Эти специальные управляющие коды в основном имеют значения от CHR$(0) до CHR$(31). Использование этих специальных кодов IBM/PC имеет ряд особенностей, которым посвящено приложение 4.

     Код ASCII - это семибитовый код, имеющий 128 возможных значений кодов. Стандартный код ASCII обычно использует первые 128 из 256 возможных значений, помещающихся в байте. Остальные 128 могут использоваться для различных целей, образуя "расширенный набор" символьных кодов ASCII. Не существует никаких стандартов использования расширенных кодов и различные устройства компьютеров используют их по-разному. Дисплей IBM/PC использует расширенный набор языков, отличных от английского, различных математических символов, а также псевдографических элементов, которые можно использовать для рисования. Программа, приведенная в листинге 1.1, показывает все специальные символы IBM/PC, а подробнее об их организации сказано в главе 8.

     Стандартное для IBM/PC матричное устройство печати MX-80 фирмы "Эндисон" преобразует коды символов расширенного набора ASCII в печатные формы, отличающиеся от изображений на экране. Если запустить программу 1.1, а затем использовать операцию PrintScreen (печать экрана) для копирования содержимого экрана на печатающее устройство, Вы сможете сравнить экранный и печатный эквиваленты одних и тех же расширенных кодов ASCII.

     Таблицы стандартных кодов ASCII и расширенных кодов ASCII для IBM/PC можно найти во многих местах. Одна из них приведена в конце руководства по Бейсику. Очень удобная форма таблицы приведена в приложении C к техническому руководству по IBM/PC.

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

     Если требуется запомнить целое число больше одного байта, то оно записывается в несколько байт, также расположенных рядом. Наиболее распространенный формат использует 2 байта или 16 бит, что очень удобно для 16-разрядного процессора, такого как 8088. В терминах микропроцессора 8088 двухбайтное число называется словом. Многие команды 8088 срециально разработаны для работы со словами. Могут использоваться и более длинные форматы - трех-, четырехбайтные и длиннее - но они не так широко распространены как двухбайтные и для работы с ними нужны специальные программы.

     Когда числа, состоящие из двух или нескольких байт, хранятся в памяти микропроцессора 8088, они размещаются в ячейках последовательно, начиная с младшего байта числа. Такой способ несколько непривычен для большинства специалистов, не имевших дела с микропроцессорами фирмы "Intel". Если Ваша программа работает с отдельными байтами в памяти, необходимо учитывать такой способ хранения.

     Арифметический сопроцессор 8087 использует несколько специальных форматов, включающих четырехбайтовый целочисленный формат и три формата с плавающей запятой: двухбайтный, четырехбайтный и десятибайтный, а также десятичный формат с двадцатью десятичными цифрами. Микропроцессор 8088 непосредственно не использует эти форматы, но если к IBM/PC подключен арифметический сопроцессор 8087, эти форматы становятся как бы расширением набора форматов данных.

     Каждая ячейка памяти имеет адрес, который используется для ее нахождения. Адреса - это чмсла, начиная с нуля для первой ячейки увеличивающиеся по направлению к последней ячейке памяти. Поскольку адреса - это те же числа, компьютер может использовать арифметические операции для вычисления адресов памяти.

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

     IBM/PC использует возможности адресации микропроцессора 8088 полностью. Адреса в 8088 имеют длину 20 бит, следовательно, процессор позволяет адресовать два в двадцатой степени байта или 1024 К.

     Такое большое адресное пространствопозволяет свободно использовать ресурсы памяти для специальных целей, что мы увидим в следующем разделе. Перед этим необходимо разобраться в том, как 16-разрядный компьютер работает с 20-разрядными адресами и какие ограничения это может наложить на программы пользователя.

     Большая часть арифметических операций, которые может выполнять микропроцессор 8088, ограничивается манипуляцией с 16-разрядными числами, что дает диапазон значений от 0 до 65.535 или 64 К. Поскольку полный адрес должен состоять из 20 разрядов, необходимо было разработать способ управления 20 разрядами. Решение было найдено путем использования принципа сегментированной адресации.

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

     Для окончательного решения проблемы 20-разрядной адресации используются два 16-разрядных числа. Считается, что одно из них имеет еще четыре нуля в конце (выходящие за пределы разрядной сетки). Такое как бы 20-разрядное число называется сегментной частью адреса. Второе шестнадцатиричное число не сдвигается на четыре разряда и используется в своем нормальном виде. Это число называется относительной частью адреса. Сложением этих двух чисел получают полный 20-разрядный адрес, позволяющий адресовать любую из 1.024 К ячеек памяти в адресном пространстве IBM/PC. Сегментная часть адреса задает ячейку с адресом, кратным 16, эта ячейка называется границей параграфа. Окончательное значение указывает конкретную ячейку на определеном удалении от границы параграфа.

     Чтобы лучше усвоить этот момент, рассмотрим все еще раз. Полный 20-разрядный адрес задается двумя частями, каждая из которых представляет собой 16-разрядное число. Сегментная часть адреса обрабатывается так, как будто он имеет четыре дополнительных нуля в конце. Эта сегментная часть может относиться к любой части всего адресного пространства - но она может указывать только на шестнадцатиричную границу, то есть, на адрес, оканчивающийся на четыре нуля. Относительная часть адреса прибавляется к сегментной части, образуя полный адрес. Относительная часть адреса может задавать любую ячейку памяти, отстоящую от ячейки, указываемой сегентной частью, не более чем на 64К.

    >>

    BitByByte, 2000г. (2025).