Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
informatika_Lektsii_1_2_3.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
1.82 Mб
Скачать

3.5. Память пк, сегментная адресация, динамическая память

В современных языках программирования, а также вычислительных системах в качестве минимальной адресуемой единицы памяти (ячейки) принят 1 байт (8 бит). Каждая ячейка памяти должна иметь свой уникальный адрес, который используется для работы с ней. Адреса - это целые числа, представленные в компьютере в двоичной системе. Они начинаются с нуля для первой ячейки и возрастают для каждой последующей ячейки на 1. Максимально возможный адрес зависит от того, сколько бит (двоичных разрядов) отведено в компьютере под его запись. В случае, если двоичная длина адресов в компьютере составляет N бит, на них можно записать 2N различных адресов (от 0 до 2N-1). Поскольку адреса являются целыми числами, компьютер может использовать для работы с ними обычные арифметические операции.

Очевидно, для расширения возможностей работы ПК желательно иметь потенциальную возможность работы с большими объемами памяти. Из-за того, что двоичная длина адреса N в компьютере фиксирована, а для работы с адресами используются процессоры другой разрядности, то для задания адресов используют специальные приемы.

IBM/PC использует для адресации памяти возможности микропроцессора 8086, в котором адреса имеют длину N=20 бит, следовательно, процессор позволяет адресовать участок памяти размером 220 байт = 1024 К = 1 Мбайт. Его называют стандартной памятью ПК (у компьютеров с процессорами 80386 и выше адресное пространство составляет 4 Гбайт, однако в Паскале нет средств для поддержания работы с такой расширенной памятью). Поскольку основная часть арифметических операций микропроцессора 8086 рассчитана на действия с 16-разрядными числами, то для работы с 20-разрядными адресами использован принцип сегментированной адресации. В соответствии с этим принципом память для программы делится на непрерывные области памяти, называемые сегментами. Это участки памяти объемом 216 байт = 64 К, в котором байтовые ячейки имеют адреса от 0 до 216-1=65.535. Их называют относительной частью адреса или смещением (offset).

МП 8086 позволяет программе одновременно работать с четырьмя различными сегментами:

1) кодовым (содержит машинные команды программы),

2) данных (хранится информация),

3) стека,

4) вспомогательный, используемый для хранения вспомогательных данных, который также называют динамической памятью.

Для работы с данными 4 сегментами МП 8086 имеет четыре 16-битовых сегментных регистра (один на каждый сегмент) с именами CS, DS, SS и ES.

Полный адрес в МП 8086 состоит из двух 16-битовых значений: адреса сегмента и смещения. Допустим, адрес сегмента данных (содержимое регистра DS) равен 2F84 (в шестнадцатеричной системе счисления), а смещение равно 0532. Необходимо найти фактический адрес. Вычисление его выполняется следующим образом: значение сегментного регистра сдвигается влево на 4 бита (что эквивалентно умножению числа на 10002 или 1016), а затем оно складывается с величиной смещения. Полученное 20-битовое значение и есть фактический адрес данных:

регистр DS (после сдвига): 0010 1111 1000 0100 0000 = 2F840

смещение: 0000 0101 0011 0010 = 00532

-------------------------- --------------------------------

Адрес: 0010 1111 1101 0111 0010 = 2FD72

Участок памяти величиной 16 байт называется параграфом, поэтому говорят, что сегмент всегда начинается на границе параграфа, поэтому можно сказать, что сегмент адресует память с точностью до параграфа, а смещение -- с точностью до байта. Каждому сегменту соответствует непрерывная и отдельно адресуемая область памяти.    Стандартная запись адреса имеет форму сегмент:смещение; например, в рассмотренном примере адрес можно записать как 2F84:0532. Сегментную разбивку адресного пространства задачи может производить как программист, так и среда программирования. Размещением сегментов в оперативной памяти управляет операционная система.

Динамическая память в Паскале рассматривается как сплошной массив байтов, который называется кучей (англ. - хип). Физически хип располагается в старших адресах памяти сразу за областью памяти, которую занимает тело программы. Динамические переменные создаются в хипе во время выполнения программы. С помощью этих переменных можно обрабатывать данные, объем которых до начала выполнения программы заранее не известен. Память под них выделяется блоками, которые связываются друг с другом. Такой способ хранения данных называется динамическими структурами.

Обращение к динамическим данным осуществляется через указатели. Это переменные специального вида, предназначенные для хранения адресов областей памяти. В указателе можно хранить адрес данных или программного кода. Указатель, как любой адрес байта памяти, по своей внутренней структуре представляет собой совокупность двух слов (данных типа word), трактуемых как сегмент и смещение.

Вопросы для проверки знаний.

1. Какова минимальной адресуемой единицы памяти в современных языках программирования, а также вычислительных системах ?

2. Сколько ячеек памяти можно адресовать при помощи 8-битных адресов ?

3. Что называют стандартной памятью ПК ?

4. В чем заключается принцип сегментированной адресации ?

5. Что называют сегментами и смещением адреса ?

6. С какими сегментами одновременно может работать программа в МП 8086 и какие сегментных регистра используются для адресации в них ?

7. Какие исходные данные задают полный адрес в МП 8086 и как он вычисляется ?

8. Что такое динамическая память ?

9. Каким образом происходит обращение к динамическим данным ?

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