Полтавський Військовий Інститут Зв'язку
Кафедра схемотехніки радіоелектронних систем
1. Типи адресації операндів МП IA-32.
Існують такі способи адресації:
Пряма адресація. При такій адресації адреса операнда вказана безпосередньо в команді.
Непряма адресація. При такій адресації у форматі команди вказується номер (ім'я) регістра, у якому зберігається адреса комірки пам'яті, яка містить операнд.
Безпосередня адресація. У першому байті команди з безпосередньою адресацією розміщується код операції. Значення операндів заносяться в команду під час програмування і знаходяться у другому і третьому байтах. Цими значеннями зазвичай є деякі константи. У процесі виконання програми значення операндів залишаються незмінними, оскільки вони разом із командою розміщуються в ПЗП. Використання такого способу не потребує адреси операндів.
Автоінкрементна (автодекрементна) адресація. Адреса операнда обчислюється так само, як і при непрямій адресації, а потім здійснюється збільшення вмісту регістра: на один-для звернення до наступного байта, на два - для звернення до наступного слова. Розмір операнда визначається кодом операції.
Сторінкова адресація. Під час використання сторінкової адресації пам'ять поділяється на ряд сторінок однакової довжини. Адресація сторінок здійснюється або з програмного лічильника, або з окремого регістра сторінок. Адресація пам'яті всередині сторінок здійснюється адресою, що міститься в команді.
Індексна адресація. Для утворення адреси операнда до значення адресного поля команди додається значення вмісту індексного регістра (SI або DI), яке називається індексом.
Відносна адресація. При відносній адресації адреса операнда визначається додаванням вмісту програмного лічильника або іншого регістра із зазначеним у команді числом.
Базова адресація. Ефективна адреса операнда ЕА обчислюється складанням вмісту базових регістрів ВХ або ВР і зміщенням (8- або 16-розряднє число).
Базова-індексна адресація. Ефективна адреса операнда ЕА дорівнює сумі вмісту базових регістрів ВХ або ВР, індексних регістрів SI або DI та зміщення. Базова та індексна адресація застосовуються для звернення до елементів одновимірного масиву, Базова - індексна - до двовимірного масиву.
Дотепер ми вживали терміни "виконавча (або ефективна) адреса" і "внутрішньосегментний зсув" як синоніми, що є вірним лише для єдиного, найпростішого режиму адресації, що називається прямою адресацією. У дійсності ж система команд МП ІA_32 передбачає 11 режимів адресації, у більшості з яких зсув є лише одним з компонентів, використовуваних для обчислення ефективної адреси. При цьому тільки в двох випадках операнди не зв'язані з пам'яттю. Це операнд - вміст регістра, що береться з будь-якого регістра процесора і безпосередній операнд, що утримується в самій команді. Інші дев'ять режимів так чи інакше звертаються до пам'яті.
При звертанні до пам'яті ефективна адреса ЕА обчислюється по формулі:
EA = Base +Index* Scale +Disp
з використанням наступних компонентів:
- Зсув (Dіsplacement або Dіsp) - 8, 16 або 32-бітне число, включене у команду;
- База (Base) - вміст базового регістра. Звичайно використовується для вказівки на початок деякого масиву;
- Індекс (Іndex) - вміст індексного регістра. Звичайно використовується для вибору елемента масиву;
- Масштаб (Scale) - множник (1, 2, 4 або 8), зазначений у коді інструкції. Цей елемент використовується для вказівки розміру елемента масиву, доступний тільки при 32-бітній адресації.
Окремі доданки в цій формулі можуть бути відсутніми.
Обчислення ефективної адреси пояснюється схемою, представленої на рис. 1. Можливі режими адресації представлені в таблиці 1.
Процесори ІA-32 можуть працювати з 32-бітною або 16-бітною адресацією. 16-бітна адресація функціонує так само, як у МП І8086, при цьому як компоненти адреси використовуються молодші 16 біт відповідних регістрів. Як говорилося вище, у реальному режимі за замовчуванням використовується 16-бітна адресація, однак є можливість для поточної інструкції переключитися на 32-бітну. При 32-бітній адресації застосовуються розширені 32-розрядні регістри і додаткові режими з масштабуванням індексу. Однак значення ефективної адреси, що обчислюється, усе рівно не може вийти за 64-килобайтний бар'єр - при спробі використання ЕА, що виходить за межу сегмента генерується виключення #GP (General Protectіon Fault).
ЕА
Рис. 1. Обчислення ефективної адреси
Таблиця 1
Режим
Адреса
Пряма адресація
EA = Disp
Непряма регістрова адресація
EA = Base
Базова адресація
EA = Base +Disp
Індексна адресація
EA = Index +Disp
Масштабована індексна адресація
EA = Index* Scale +Disp (*)
Базово-індексна адресація
EA = Base +Index
Масштабована базово-індексна адресація
EA = Base +Index* Scale (*)
Базово-індексна адресація зі зсувом
EA = Base +Index +Disp (*)
Масштабована базово-індексная адресація зі зсувом
Страницы: 1, 2