
- •Лекции по предмету:
- •Системы счисления
- •Перевод целого числа
- •Перевод дробной части числа
- •Перевод числа из 8-ой и 16-ой сс в 2-ую сс
- •Арифметические операции в 2-ой сс
- •Представление чисел в эвм
- •Представление чисел с фиксированной точкой
- •Прямой код
- •Обратный код
- •Дополнительный код:
- •Правило сложения в дополнительном коде:
- •Представление чисел с плавающей точкой.
- •Понятие об архитектуре эвм
- •Структура эвм:
- •Устройство управления
- •Арифметико – логическое устройство (алу)
- •Классификация памяти. Операции с памятью.
- •Устройства ввода/вывода
- •Программная модель микропроцессора Intel 80/86
- •Адресация памяти
- •Адресация памяти в командах Ассемблера
- •Общий принцип косвенной адресации в процессоре 8086
- •Организация программы на языке ассемблер
Адресация памяти
Память на шине процессора называется физической памятью. Она организована как последовательность байт. Каждый байт имеет уникальный адрес, называемый физическим. Интервал физических адресов образует адресное пространство. Оно определяется разрядностью шины адреса. В процессоре 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б.
Найти:
Линейный адрес переменной С, расположенной в этом сегменте за переменными А и В.
Если непосредственно за сегментом данных расположен сегмент кода, то каким может быть максимальный размер массива С, расположенного после переменных А и В, чтобы не выйти за пределы сегмента данных? Если сегмент кода начинается с а)2400h б)3400h
Каким будет смещение С[65522], если С – массив байт.
Решение:
ЛА=DS*10h+2h+4h=2320h*10h+6h=23200h+6h=23206h = 2320:0006h
23206h – начало массива
а)24000h - 23206h = A
б)34000h - 23206h > 64Кб
FFFFh-0006h=FFF9h
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
0Ah
0Ah
FFh
07h
08h
…
4808h
4809h
480Ah
480Bh
…
07h
08h
Такой порядок следования байта называется Low Endian. Противоположностью является порядок Big Endian – где первым указывается старший байт. Порядок Big Endian используется при передачи данных по сетям. Порядок Low Endian используется в процессорах фирмы Intel. Этот порядок полностью автоматизирован, т.е. при записи по заданному адресу число запишется в порядке Low Endian. При извлечении или считывании числа по заданному адресу число будет считываться в порядке Low Endian.