Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._7.doc
Скачиваний:
3
Добавлен:
05.05.2019
Размер:
182.78 Кб
Скачать

2.1. Пряма адресація

Це найпростіший вид адресації операнда в пам'яті, оскільки ефективна адреса міститься в самій команді і для її формування не використовується ніяких додаткових джерел чи регістрів. Ефективна адреса береться безпосередньо з поля зміщення машинної команди (див. рис. 3.1, лекц. 3), яке може мати розмір 8, 16, 32 біт. Це значення однозначно визначає байт, слово або подвійне слово, розташовані в сегменті даних.

Пряма адресація може бути двох типів:

  • Відносна пряма адресація. Використовується для команд умовних переходів для вказівки відносної адреси переходу. Відносність такого переходу полягає в тому, що в полі зміщення машинної команди міститься 8, 16 або 32-бітне значення, яке в результаті роботи команди буде додаватися до вмісту регістра покажчика команд ip/eip. У результаті такого додавання виходить адреса, за якою і здійснюється перехід. Наприклад:

jс m1 ;перехід на мітку m1, якщо прапор cf = 1

mov al,2

...

m1:

Незважаючи на те, що в команді вказана деяка мітка в програмі, асемблер обчислює зміщення цієї мітки щодо наступної команди (в нашому випадку це mov al,2) і підставляє його в сформовану машинну команду jc.

  • Абсолютна пряма адресаія. У цьому випадку ефективна адреса є частиною машинної команди, але формується ця адреса тільки із значення поля зміщення в команді. Для формування фізичної адреси операнда в пам'яті мікропроцесор додає це поле до зсунутого на 4 біт значення сегментного регістра. У команді асемблера можна використовувати декілька форм такої адресації. Наприклад:

mov ax,dword ptr [0000] ;записати слово за адресою ds:0000 в регістр ax

Але така адресація застосовується рідко - зазвичай коміркам, що використовуються у програмі, присвоюються символічні імена. В процесі трансляції асемблер обчислює і підставляє значення зміщень цих імен у сформовану ним машинну команду в полі зміщення в команді (див. рис. 3.1). У результаті виходить так, що машинна команда прямо адресує свій операнд, маючи, фактично, в одному зі своїх полів значення ефективної адреси. Наприклад:

data segment

per1 dw 5

...

data ends

code segment

mov ax,data

mov ds,ax

...

mov ax,per1 ;записати слово per1 (його фізична адреса ds:0000) в ax

Ми отримаємо той самий результат, що і при використанні команди mov ax,dword ptr [0000].

Інші види адресації відносяться до непрямих. Слово "непрямий" у назві цих видів адресації означає те, що в самій команді може перебувати лише частина ефективної адреси, а інші його компоненти знаходяться в регістрах, на які вказують своїм вмістом байт mod-r/m і, можливо, байт sib.

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