Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОП - лекции.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
292.66 Кб
Скачать

Адресация памяти

Память на шине процессора называется физической памятью. Она организована как последовательность байт. Каждый байт имеет уникальный адрес, называемый физическим. Интервал физических адресов образует адресное пространство. Оно определяется разрядностью шины адреса. В процессоре 80.86 – 20разрядов => шина 1м

В процессора 80386 – 32 Разрядов => 4гб

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

Сегментация – это механизм, обеспечивающий разбиение памяти на отдельные независимые адресные пространства.

Подкачка – механизм поддержки большего адресного пространства памяти при фактическом использовании меньшего объёма памяти + дисковое пространство.

Эти механизмы могут использоваться совместно или по отдельности. Адрес, используемый в программе, называется логическим адресом. Устройство сегментации или механизм сегментации преобразует логический адрес в некоторый промежуточный адрес несегментированного адресного пространства, который называется линейным адресом. Механизм замещения страниц окончательно преобразует линейный адрес в физический.

Физический адрес

Механизм замещения страниц

Линейный адрес

Механизм сегментации

Логический адрес

При использовании сегментной адресации программа может одновременно использовать несколько поименованный адресных пространств, называемых сегментами.

Например: команды расположены в сегменте команд. Стек – расположен в сегменте стека. Данные – в сегменте данных.

Ширина адресной шины микропроцессора 80.86 равна 20разрядам это позволяет адресовать 1Мб памяти. Однако разрядность регистров адресующих память, составляет 16 бит, поэтому при формировании линейного адреса используется следующая схема:

ЛА – линейный адрес

Поскольку адрес образуется из 2 компонент его запись имеет следующий формат:

Адрес элемента : адрес смещения

Пример:

0400:0020

ЛА = 400h * 10h + 20h = 4020h

Следует помнить, что один и тот же адрес может быть представлен различным способом.

0400:0020 = 0401:0010 = 0402:0000

Компиляторами используется нормализованная адресация.(последний пример-0402:0000)

Сегментный адрес определяется содержимым одного из сегментных регистров. В каждый момент времени программе доступно 6 сегментов. При выборе команды из памяти линейный адрес формируется через сегментный регистр CS.

При обращении к данным или дополнительным сегментным регистрам используется сегментный регистр DS и заданное в команде смещение.

При обращении к стеку используется сегментный регистр SS и указатель стека регистр SP.

Линейный адрес никогда не может перейти за границу 64Кб сегмента на который указывает сегментный регистр, поэтому максимальный размер сегмента = 64Кб.

Пример:

Адрес начала сегмента данных DS = 2320h в начале сегмента расположены 2 переменные. Переменная А=2б , В=4б.

Найти:

  1. Линейный адрес переменной С, расположенной в этом сегменте за переменными А и В.

  2. Если непосредственно за сегментом данных расположен сегмент кода, то каким может быть максимальный размер массива С, расположенного после переменных А и В, чтобы не выйти за пределы сегмента данных? Если сегмент кода начинается с а)2400h б)3400h

  3. Каким будет смещение С[65522], если С – массив байт.

Решение:

  1. ЛА=DS*10h+2h+4h=2320h*10h+6h=23200h+6h=23206h = 2320:0006h

23206h – начало массива

а)24000h - 23206h = A

б)34000h - 23206h > 64Кб

FFFFh-0006h=FFF9h

  1. 65522 = FFF2h;

Offset = 6h + FFF2h = FFF8h

С сегментацией связано понятие ближнего и дальнего адреса.

Ближний вызов называется NEAR

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

Разновидностью ближнего перехода является короткий переход SHORT. В нём смещение задаётся не двумя, а 1 байтом. Такой переход используется в командах условных переходов, позволяет перейти на ячейку отстоящую от -128 до +127 байт от места перехода.

Команда loop выполняет короткий переход.

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

Примечание:

Следует помнить, что при хранении данных в памяти младшие байты хранятся по младшему адресу, а старшие по старшему.

Например:

Имеем слово = 2 байта = 0401h

Старший байт = 04h

Младший байт = 01h

При записи этого слова по адресу 4806h(адрес слова)

01h

04h

4805h

4806h

4807h

4808h



0807FF0Ah

  1. 0Ah

  2. 0Ah

    FFh

    07h

    08h

    4808h

    4809h

    480Ah

    480Bh

    FFh
  3. 07h

  4. 08h

Такой порядок следования байта называется Low Endian. Противоположностью является порядок Big Endian – где первым указывается старший байт. Порядок Big Endian используется при передачи данных по сетям. Порядок Low Endian используется в процессорах фирмы Intel. Этот порядок полностью автоматизирован, т.е. при записи по заданному адресу число запишется в порядке Low Endian. При извлечении или считывании числа по заданному адресу число будет считываться в порядке Low Endian.