
Розширений набір команд і режими адресації 32-х розрядного процесора
МЕТА РОБОТИ : Ознайомитися з командами 386-го процесора Intel, що застосовуються в реальному режимі, їхнім використанням та особливостями виконання.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Опис команд 386-го процесора.
Крім захищеного режиму, 32 розрядних регістрів, у 386-му процесорі додали команди, що розширюють операційні ресурси процесора 8086-го і підвищують продуктивність і гнучкість системи в цілому. Розглянемо тільки нові команди – всі старі команди розширили свій синтаксис для сумісності з 32-бітними регістрами й режимами роботи.
Як позначення операндів можуть використовуватися:
r будь-який регістр
r16 16-ти pозpядний pегістp
r32 32-х pозpядний pегістp
m8 байт у пам'яті
m16 слово в пам'яті
m32 подвійне слово в пам'яті
imm8 байт-значення
imm16 слово-значення
Особливості адресації 32-разрядного МП:
при всіх режимахадресації можнавикористовувати32-разрядніr,disp,im
При непрямій адресації в якості базового або індексного можна використовувати РОН (крім ESP для індексу): mov ECX,[EAX][EDX]
Якщо використовується базово-індексна непряма адресація, то 32-розрядний індексний регістр можна помножити на scale = 2 або 4 або 8. Ефективна адреса EA=(base)+(index*scale)+disp32; scale – масштабний коефіцієнт для модифікації значення індексу. Для цього введено додатковий байт SIB scale index base
2 3 3
00 *1
01*2
10*4
11*8
EAX EAX
EBX EBX
ECX ECX
EDX + EDX
ESP EBP
ESI ESI
EDI EDI
Offset=Base+(Index*Scale)+DisplacementBase Index
1
2
*
3
4
None
8-bit +
16-bit
32-bit
Типи адресації 80386
В процесорі 80386 для запису ефективної адреси можливо використовувати будь-який 32-бітний регістр загального призначення як базовий, а також будь-який регістр загального призначення окрім ESP як індексний. Також з’явилась можливість множення індексного регістру на 2, 4 або 8, що полегшує роботу з масивами даних і два додаткових сегментних регістри – FS і GS.
Оскількибазовимтаіндекснимрегістромможебутибудь-який регістрзагального призначення,то для визначеннясегментумає значенняпослідовність регістрів:спочатку записується базовий регістр,а потім–індексний.ЯкщобазовийрегістрEBPабоESP– призначається сегментSS,в інших випадках–DS.
Приклади адресації 80386:
MOV BX, [ebx + ecx + 1] ; базовий регістр, індексний регістр і константа
MOV DX, gs:[edi] ; індексний регістр
MOV SI, [eax + 2*eax] ; базовий регістр, індексний регістр помножений на коефіцієнт
Команда завантаження в стек усіх регістрів процесора PUSHA (PUSHAD)
PUSHA = PUSH AX PUSHAD = PUSH EAX
PUSH CX PUSH ECX
PUSH DX PUSH EDX
PUSH BX PUSH EBX
Приклад :
; вхід в оброблювач переривання
Pusha ; зберегти регістри
... ; текст оброблювача
Popa ; відновити регістри