|
|||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
|
Додаткові режими адресації
Режими адресації
32-розрядних процесорів розроблені, виходячи з вимог утворення 32-бітового
зсуву. Іншими словами, вони призначені для 32-розрядних застосувань, в яких
сегменти даних або стека (як, втім, і сегменти команд) можуть мати розміри 232
= 4 Гбайт. Проте в реальному режимі розмір будь-якого сегменту обмежується величиною
216 = 64 Кбайт, і 32-бітові зсуви не
мають сенсу. З іншого боку, ніщо не заважає нам використовувати для
утворення 16-бітового зсуву 32-розрядні регістри (ЕВХ, ESI і інш.), якщо, звичайно,
їх реальний вміст не перевищуватиме величини Ffffh. Вказівка як операнди
команд 32-розрядних регістрів дозволяє використовувати додаткові можливості
32-розрядних процесорів по частині адресації пам'яті, що в деяких випадках
може виявитися корисним. Слід підкреслити, що мова йде тут тільки про
ті операнди, або, правильніше сказати, аргументах команди, які описують
непряму (через регістри) адресацію пам'яті.
Друга відмінність полягає в можливості масштабування вмісту індексного регістра, тобто множення його на заданий в команді коефіцієнт, який може набувати значень 1, 2, 4 або 8. Приклад такої адресації:
Ще раз підкреслимо, що додаткові режими непрямої адресації вимагають використання 32-розрядних регістрів. Команди
або inc word ptr [ЕАХ] [Сх*2] розглядаються асемблером,
як неправильні. Мал. 4.2. Режими непрямої
адресації з використанням 32-розрядних регістрів. Прочерк в другій колонці підкреслює, що регістр ESP не можна використовувати як індексного. Це не означає, що ESP не можна указувати як другий операнд:
Недопустима тільки конструкція,
в якій вміст ESP умножається на масштабуючий множник:
Корисно також відзначити, що зсув в команді
вигляду mov ЕАХ[ЕВХ][ЕСХ]+20 може бути тільки або 8-бітовим,
або 32-бітовим. 16-бітові зсуви не утворюються. Якщо вказана в команді
величина зсуву поміщається в байт, як це має місце в приведеному вище
прикладі команди, то зсув в коді команди займає 1 байт. Якщо ж величина
зсуву більше 255, то під нього в коді команди відводиться відразу 32 битий. Мал. 4.3. Режими непрямої
адресації з використанням 16-розрядних регістрів. Нагадаємо, що в 16-розрядному режимі допустимі не всі поєднання базових і індексних регістрів. Як базовий регістр можна використовувати тільки ВХ або ВР, а як індексний тільки SI або DI.
|
|
|||||||||||||||||||||||||||||||||||||||||||||
|