ду поля MOD R/M вказують на наявність другого адресного байта SIB. Структура форматів полів ModR/M і SIB байтів представлена ​​на рисунку 9. br/>
MOD R/M байт
MODREG/opcodeR/M
SIB байт
SSINDEXBASE Рис. 9. Формат полів ModR/M і SIB
Байт MOD R/M містить три поля:
) MOD - розряди 7 і 6 в комбінації з полем r/m визначає 32 можливих типи адресації (8 реєстрових і 24 індексних).
) REG - розряди 5, 4 і 3, які описують номер регістра, або є додатковими розрядами коду операції. Значення поля REG визначається першим байтом команди (байтом Коп). p align="justify">) R/M - розряди 2, 1 і 0, які можуть описувати регістр в якості місця розташування операнда або утворювати разом з полем MOD код режиму адресації.
Байт SIB включає наступні три поля:
) SS - розряди 7 і 6, що описують масштабний коефіцієнт.
) INDEX - розряди +5, 4 і 3, що описують номер індексного регістра.
) BASE - розряди 2, 1 і 0, що описують номер регістра бази.
Регістрові модифікатори для обчислення адреси представляють собою 32-розрядні регістри (наприклад, Еах) і описані нижче у таблиці 3, з урахуванням того, що поле r/m не дорівнює 100. Обчислення адреси за відсутності байта SIB виконується наступним чином. p align="justify"> MOD = 00. Обчислюється адресу виду DS: [r/m]. Поле r/m описує використовуваний регістр:
MOD = 01. До адресами, обчисленим за вищенаведеною таблицею, додається 8-розрядний зсув, так що при r/m = 000 адресу складе DS: [EAX + зсув]. p align="justify"> MOD = 10. Додається 32-розрядний зсув. При r/m = 000 адресу складе DS: [EAX + зсув]
MOD = 11. У полі r/m указан 8 - або 32 - розрядний регістр. Вибір розрядності регістру залежить від стану біта W - старший біт коду команди, визначального розрядність операції (8 або 32 розряду). Двухбітное поле mod показує місце розташування другого операнда і спосіб адресації. Зміст всіх полів в байтах коду операції наведено в таблиці 2. процесор програмний оперативний пам'ять
Приклад двохоперандних команди з байтом mod r/m представлений на малюнку 10.
Байт 0-код операцііБайт 1 - байтmod r/mdwregmodr/m Рис. 10. Двохоперандних команда байтом mod r/m
Таблиця 2
Поля в байтах коду операції
ПолеДліна (біт) Опісаніеw1Определяет розмір операнда в байт (w = 0) або в повний розмір (w = 1). Повний розмір становить 16 або 32 бітаd1В двохоперандних командах визначає напрямок передачі даних: з регістра в регістр/память (d = 0) або з регістра/пам'яті в регістр (d = 1) s1Определяет розширення 8-бітних безпосередніх даних до повного розміру (s = 1) чи ні (s = 0) reg3Определяет 8/16/32 - бітний регістр загального назначеніяmod r/m2, 3Спеціфікатор режиму адресацііssМасштабний множник (коефіцієнт) для режиму масштабированной індексної адресації: 00В = Х1, 01В = Х2, 10В = Х4, 11В = Х8index3Определяет регістр загального призначення, використовуваний як індексний регістрbase3Определяет регістр загального призначення, використовуваний як базовий регістрsreg22Определяет один з сегментних регістрів: 00B = ES, 01B = CS, 10B = SS, 11B = DSsreg33Определяет будь сегментний регістр: 000B = ES, 001B = CS, 010B = SS, 011B = DS, 100B = FS, 101B = GS (комбінації 110В і 111В не використовуються) tttn4В командах умовних переходів і установок визначає проверяемое умова
Таблиця 3
Формування ефективного адреси пам'яті
16-розрядний режім32-розрядний режімадресmodR/MадресmodR/M [BX + SI] [BX + DI] [BP + SI] [BP + DI] [SI] [DI] смещ16 [ВХ] 00000 001 010 011 100 101 110 111 [EAX] [ECX] [EDX] [EBX] [-] [-] смещ32 [ESI] [EDI] 00000 001 010 011 100 101 110 111 [BX + SI] + смещ8 [BX + DI] + смещ8 [BP + SI] + смещ8 [BP + DI] + смещ8 [SI] + смещ8 [DI] + смещ8 [ВР] + смещ8 [ВХ] + смещ801000 001 010 011 100 101 110 111смещ8 [EAX] смещ8 [ ECX] смещ8 [EDX] смещ8 [EBX] смещ8 [-] [-] смещ8 [EBP] смещ8 [ESI] смещ8 [ЕО1] 01000 001 010 011 100 101 110 111 [ВХ + SI] + смещ16 [ВХ + DI] + смещ16 [ВР + SI] + смещ16 [ВР + DI] + смещ16 [SI] + смещ16 [DI] + смещ16 [ВР] + смещ16 [ВХ] + смещ1610000 001 010 011 100 101 110 111смещ32 [Еах] смещ32 [ЕСХ] смещ32 [ЕDХ] смещ32 [ЕВХ] смещ32 [-] [-] смещ8 [EBP] смещ8 [ESI] смещ8 [EDI] 10000 001 010 011 100 101 110 111
Приклад двохоперандних команди з байтами mod r/m і sib представлений на малюнку 11.
Байт 0-код операцііdw
Байт 1 - байт mod r/...