Ортогоналан скуп наредби
У рачунарском инжењерству, ортогонални скуп инструкција је скуп инструкција архитектуре где сви типови инструкција могу користити све начини адресирања. Он је „ортогонални“ у смислу да инструкцијски тип и адресни мод варирају независно. Ортогонални скуп инструкција не намеће ограничења која захтевају да одређена инструкција користи одређени регистар.[1]
Ортогоналност у пракси
[уреди | уреди извор]У многим CISCрачунарима, инструкција може да приступи или регистру или меморији, обично на више различитих начина. Ово чини CISC рачунаре лакшим за програмирање, јер уместо да морају да памте хиљаде појединачних инструкција, ортогонални скуп инструкција дозвољава да програмер запамти само неколико десетина до неколико стотина оперативнох кодова (као што су: "ADD", "SUBTRACT", "MULTIPLY", "DIVIDE", и други), и сет од три до десет адресних режима (као што су: "FROM REGISTER 0", "FROM REGISTER 1", "FROM MEMORY", и други). DEC PDP-11 и Motorola 68000 рачунарске архитектуре су примери готово ортогоналних скупова инструкција.
The PDP-11
[уреди | уреди извор]Са изузетком његових инструкција у покретном зарезу, PDP-11 је скоро комплетно ортогонални сет. Свака по типу целобројна инструкција је могла радити на или 1-бајтном или 2-бајтном целобројном вредношћу и могла је да приступи подацима ускладиштеним у регистрима, укладиштеним као делови инструкција, ускладиштеним у меморију, или ускладиштеним у меморију са показивачем на адресу у регистру. Чак је и програмски бројач и показивач стека могао да буде погођен обичним инструкцијама користећи обичне типове података. У ствари, непостедни тип (у оквиру инструкција као што је: ADD #4, R1 (R1 = R1 + 4)) је имплементиран као тип „региструј индиректно, аутоматски припадај“ и наводећи програмски бројач (R7) као регистар у циљу коришћења референце за индиректност и аутоматско припадање.
Пошто је PDP-11 био октално-оријентисани рачунар (адресни режим 0-7, регистри R0–R7) имао је (електронски) осам начина адресирања. Кроз коришћење стек поинтера (R6) и програмског бројача (R7) као референцнног регистра, могли се адресирати на десет начина.
VAX-11
[уреди | уреди извор]VAX-11 је продужена верзија PDP-11, овај систем био је ортогонални за све типове података, укључујући и децималне типове (мада су инструкције као сто су 'ADD' биле подељене на варијанте као што су ADDB, ADDW, ADDL, ADDP, ADDF, или бајт, реч, дуга реч). Као и PDP-11, стек поинтер и програмски бројач били су у општем регистру фајла (R14 и R15).
Општи облик VAX-11 инструкције био би :
opcode [ operand ] [ operand ] ...
Свака компонента је један бајт, вредност opcode је у опсегу 0-255, и сваки операнд се састоји од два дела, горња 4 бита одређују адресни режим, а доња 4 бита (обично) означавају број регистра (R0–R15).
За разлику од октално-оријентисаних рачунара PDP-11, VAX-11 постојале су и хексадецимално-оријентисани рачунари (4-битни под-бајт). ово је довело до 16 логичких адресних режима (0–15), међутим, адресни режими 0-3 били су „кратко непосредни“ за непосредне податке од 6 бита или мање (2 доња бита адресног режима била су 2 горња бита непосредних података, када би примили осталих 4 бита тог адресираног податка). Пошто су начини адресирања режима 0-3 били идентични, ово је чинило 13 (електронских) адресних режима, али као и код PDP-11, употреба стек поинтера (R14) и програмског бројача (R15) чинила је укупно 15 концептуалних адресних режима (заједно са асемблером који је преводио изворни код у стварни стек поинтер или програмски бројач).
MC68000
[уреди | уреди извор]Моторолини дизајнери покушали су да направе склоп асемблерских језика ортогоналним док би основни машински језик био нешто мањи. За разлику од PDP-11, MC68000 је користио одвојене регистре за складиштење података и адреса података у меморији.
На нивоу бита, особа која би писала асемблер (или код са отклањање грешака) јасно би видела да симболичке инструкције могу постати било који или неколико различитих op-кодова. Овај компромис је дао скоро исте погодности као и тотално ортогонални рачунар, а ипак је дао процесорским дизајнерима слободу да користе битове у инструкцијама много ефикасније него на читно ортогоналном нивоу.
8080 и слични дизајни
[уреди | уреди извор]8-битни Интел 8080 (као и 8085 и 8051) микропроцесор био је у основи незнатно проширен акумулаторско-заснован дизајн и стога не ортогоналн. Програмер или компилатор асемблерког језика морао да буде свестан које операције су могуће на сваком регистру: Већина 8-битних операција могла је да се врши само на 8-битном акумулатору (A регистру), док је 16-битна операција могла да се врши само на 16-битном показивачу/акумулатору (ХЛ-регистар пар), док једноставне операције, као што су проширења, су биле могуће на свих седам 8-битних регистара. То је углавном због жеље да задрже сви opcodes дужине један бајт и да се одржи компатибилност изворног кода са оригиналним Интел 8008 (ЛСИ - имплементација процесора Датапоинт 2200-а).
Бинарно-компатибилан З80 касније додат префикс-код да побегне из овог 1-бајт ограничења и омогући моћнији скуп инструкција. Иста основна идеја је била за Интел 8086, мада, како би се омогућила радикалнија екстензија, бинарна-компатибилност са 8080 није овде покушана, већ је 8086 дизајниран као више редовно и потпуно 16-битни процесор који је компатибилан са 8008, 8080, 8085. Она одржава неки степен не-ортогоналности због високе густине кода. 32-битно продужење ове архитектуре која је уведена са 80386, била је нешто више ортогонална упркос чувању свих инструкција као и код 8086. Међутим, стратегија кодирања даље показује многе трагове из 8008 и 8080 (и З80); на пример, један-бајт кодирања остаје за одређене честе операције као што су push и pop регистари и константе, и примарни акумулатор, ЕАКС, краће кодирање од других регистара на одређеним врстама операција.
RISC доба
[уреди | уреди извор]Потпуно ортогонална архитектура можда није највише ефикасна архитектура. Касних 1970тих истраживање IBM-а (и слични пројекти) показали су да је већина ових „ортогоналних“ начина адресирања игнорисана од стране већине програма. Можда неки од битова који су коришћени да се изрази потпуно ортогонални скуп инструкција, уместо тога могли бити употребљени да изрази више виртуелних адреса бита или изабрати из редова више регистара.
У RISC доба, рачунарски дизајнери настојали да постигну баланс који су мислили да је најбољи. Конкретно, већина RISC рачунара, док је још увек била веома ортогонална у односу на које инструкције могу процесуирати који типова података, сада су се вратили на „учитај/сними“ архитектуру. У овим архитектурама, само врло мало меморије референтне инструкције може да приступи главној меморији и само у сврху утовара података у регистрима или чување регистара података назад у главну меморију, само неколико начина адресирања може бити на располагању, а ови режими могу да варирају у зависности од да ли се инструкција односи на податке или подразумева пренос контроле (скока). Насупрот томе, подаци морају бити у регистрима пре него што се може управљати на стране других упутства у сету инструкција рачунара. Ова трговина је направљена ван експлицитно да омогући коришћење много већих регистер сетова, продужених виртуелних адреса и више непосредних података (подаци уписани директно у оквиру наставе рачунара).
Референце
[уреди | уреди извор]- ^ Null, Linda; Lobur, Julia (2010). The Essentials of Computer Organization and Architecture. Jones & Bartlett Publishers. стр. 287—288. ISBN 978-1-4496-0006-8.