Karh09 6

6. Начини за адресация на операндите. Граници на адресите.


страницата се нуждае от дописване/преглеждане


Подравняване на паметта

Съществува такова нещо като "подравняване". Казано накратко, подравнените в паметта данни започват от адреси, кратни на размера на машинната дума (4 байта в x86).
Процесорът може да работи с изравнени или неизравнени граници на данните. Ако се работи с изравнени адреси, при изчисляване на адреса се проверява дали това действително е така (дали адресът е от вида XX…X002 (в 32-битова реализация)). Подравняването е необходимо, защото връзката ОП-ЦП е 32(или 2х32) битова(в общия случай връзката е определен брой битове) и съответно както и да сме записали данните в ОП, трябва да подадем 32 бита по шината.
untitled15.JPG
Работата с подравнени данни има значителни преимущества. Тъй като процесорът чете по една машинна дума, информацията ще се прочете с едно адресиране. Така се гарантира, че ЦП ще изчаква бавното обръщение към паметта минимално време. Ако данните не са подравнени, то много е вероятно паметта да прави по едно обръщение в повече - забавя се работата на ЦП (ако 4-байтови данни не са подравнени, ще се извършат два пъти повече обръщения от нужното, което е много голямо забавяне).
Освен това, достъпът до неподравнени данни изисква по-сложни интегрални схеми. И още повече, ако двете поредни 4-байтови порции се намират в различни страници от паметта, забавянето за процесора се увеличава още повече.
Недостатък на подравнените данни е съхранението на данни с различна държина, когато се получават "дупки" в паметта.
untitled16.JPG

Начини за адресация

Непосредствен

Полето съдържа стойността на операнда който направо се подава на входа на АЛУ-то.
untitled17.JPG

Регистров

Физическият адрес се съхранява в регистър, чийто номер се подава като стойност на полето в инструкцията. Взима се стойността от определения регистър и се подава на входа на АЛУ-то.
untitled18.JPG

Регистров с отместване

Подава се съдържанието на регистър, към което се прибавя отмесване ("offset") - обикновено цяло 16/32-битово число със знак.
untitled19.JPG

Косвено регистров

В кода на инструкцията имаме адрес на регистър където се намира реалния адрес в паметта. Стойността на операнда се взима от ОП и се подава на входа на АЛУ-то.
untitled20.JPG

Паметно абсолютен

В инструкцията се намира адреса към ОП където се намира стойността на нашия операнд.
untitled21.JPG

Индексна форма

Подават се два регистъра, чиито съдържания се сумират. Идеята е единия регистър, да речем , да играе ролята на базов, а другия да съдържа относителното отместване спрямо базовия. По този начин се получава по-гъвкава програма, защото променяйки базовия адрес, можем да сменяме комплекта данни, които програмата използва, без да правим много промени по кода.
untitled22.JPG

Косвено паметен

В кода на инструкцията се намира адрес на регистър в който се съдържа адрес в ОП, където имаме отместване което ни праща на друго място в паметта.
untitled23.JPG

scaled

В кода на инструкцията имаме адресите на два регистъра и адрес, които събрани заедно формират адреса в ОП на нашия операнд.
untitled24.JPG

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License