Способи адресації пам'яті: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Dmitry Kazany (обговорення | внесок)
Немає опису редагування
Dmitry Kazany (обговорення | внесок)
Рядок 7:
==СІSC-модель (архітектури "регістр-пам'ять")==
 
Як приклад [[CISC]]-моделі адресації пам'яті, розглянемо різноманітну палітру методів популярної деколиколись архітектури [[VAX-11]] і розглянемо її на прикладі [[архітектура системи команд|двохоперандной команди]] додавання ADD a,b (a:=a+b), де кожний [[операнд]] може бути як регістром, так і безпосередньо знаходитись в пам'яті. В таблиці зведені основні методи адресації VAX (загальна кількість їх перевищує за два десятки, але інші є похідними від наведених) за умови, що операнд а завжди перебуває в регістрі R1, а ефективна адреса операнда b обчислюється залежно від зазначеного в команді методу адресації.
 
Інформація про операнд міститься в його специфікаторі, формат якого варіюється, але для більшості методів адресації складається з полів «регістр» і «режим». Тобто, режим адресації задається полем «режим», а номер задіяного регістра втримується в поле «регістр». В режимі адресації по зсуву, в команді після полів режиму й регістра, з’являється додаткове поле із зазначенням величини самого зсуву. В режимі масштабування також застосовується розширення команди й у додатковому полі знаходиться специфікатор для третього задіяного регістра.
Реалізація абсолютної та безпосередньої адресації в машинах [[PDP]] і VAX досить цікава й використовує неявно, як залучений регістр, регістр лічильника команди (PC). Абсолютна адресація реалізується через непряму регістрову з автоінкрементом, а безпосередня – через непряму з автоінкрементом та дописуванням зсуву або константи безпосередньо після команди. При цьому регістр PC, у момент виконання команди завжди вказує на наступну після неї комірку пам'яті, яка містить адресу зсуву або константи, й обчислення абсолютної адреси відбудеться коректно. Після цього необхідно лише збільшити PC до адреси наступної команди. Це робиться шляхом додання до поточного значення лічильника одиниці (автоінкремента).
 
{| border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #f9f9f9 solid; font-size: 95%;"
{| border="1" cellpadding="2"
|'''Способ адресації'''
|'''Запис команди'''
Рядок 19:
|'''Застосування'''
|-
|'''[[Абсолютна адресація|Абсолютна (пряма)]]'''
|ADD R1,@#1000
|M[1000]
Рядок 25:
|Коли відома абсолютна (пряма) адреса операнда
|-
|'''[[Безпосередня адресація|Безпосередня]]'''
|ADD R1, #4
| -
Рядок 31:
|Один з операндів – константа (арифм. операції, перевірки умов)
|-
|'''[[Регістрова адресація|Регістрова]]'''
|ADD R1,R2
|R2
Рядок 49:
|Робота з вказівниками: якщо в R2 – адреса вказівника р, то ефективна адреса – це значення *p
|-
|'''[[Індексна адресація|За зсувом (базова, індексна)]]'''
|ADD R1,30(R2)
|M[R2+30]
Рядок 100:
|'''SPARC v9'''
|-
|'''За зсувомссувом'''
|LD R1,30(R2)<br>
ST R1,30(R2)
Рядок 112:
|ні
|-
|'''Регістрово-індекснаіндексний'''
|LDX R1,R2,R3 <br>
STX R1,R2,R3
Рядок 124:
|ні
|-
|'''РегістроваРегістровий з поновленням регістра'''
|LDU R1,50(R2)<br>
STU R1,50(R2)
Рядок 138:
|ні
|-
|'''Регістрово-індекснаіндексний з поновленням регістра'''
|LDUX R1,R2,R3<br>
STUX R1,R2,R3
Рядок 152:
|ні
|-
|'''Регістрова (похідна від адресації за зсувомссувом)'''
|LD R1,0(R2)
|R2
Рядок 162:
|так
|-
|'''Абсолютна (похідна від адресації за зсувомссувом)'''
|LD R1,500(R0)
|M[500]