Наредбено множество

**Наредбено множество**, или **архитектура на наредбено множество (ISA)** — дел од сметачката архитектура поврзана со програмирање, што содржи команди кои се разбирливи за една сметачка архитектура. Наредбеното множество е збирот на сите зборови кои се користат за да се даде команда на хардверот на еден сметач.

**ISA** вклучува и примитивни типови на податоци, наредби, регистри, адресни модови, мемориска архитектура, прекини и справување со исклучоци, и надворешни В/И.

Архитектура на наредбено множество вклучува спецификација на множеството на код-операции/opcodes (машински јазик) и примитивните команди имплементирани од одреден обработувач.

**Архитектура на наредбено множество** всушност е еден дел од сметачот кој е видлив за програмерот и пишувачот на компајлер.
Наредбеното множество е интерфејсот помеѓу сметачкиата програмска опрема и неговата машинска опрема, и така го овозможува независниот развој на овие две сметачки сфери.

## Преглед
Архитектура на сметачко множество се разликува од микроархитектура, која е множество на техники за обработувачкки дизајн користени, во одреден обработувач, за да се имплементира наредбеното множество. Обработувач со различни микроархитектури може да споделува чести наредбени множества. На пример, Интел Пентиум и АМД Атхлон имплементираат скоро идентични верзии на x84 наредбено множество, но имаат радикално различен внатрешен дизајн.

## Класификација на наредбени множества

Сметач со комплексни наредбени множества (CISC) има многу специјализирани наредби, дел од нив што се користат многу ретко во практични програми. Сметач со намалени наредбени множества (RISC) го поедноставува обработувачот со тоа што ефикасно ги имплементира наредбите кои се често користени во програмите, додека поретко користените операции се имплементирани како субрутини.

Теоретски важни видови се сметачите со минимални наредбени множества и сметачите со едно наредбено множество, но тие не се имплементирани во комерцијалните обработувачи. Уште една варијација се многу долгите наредбени зборови (VLIW) каде обработувачот прима многу наредби кодирани и вратени во еден наредбени збор.

## Машински јазик
Машинскиот јазик е изграден од дискретни искази и наредби. На обработувачката архитектура, дадена наредба може да назначува:
* Одредени регистри за аритметички, адресирачки или контролни функции
* Одредени мемориски локации и поместувања
* Одредени адресирачки методи користени за интерпретација на операнди
Покомплексни операции се изградени со комбинирање на овие едноставни наредби, кои се извршени секвенцно, или како што било одредено од контролата на проток наредбите.

### Наредбени видови
Примери за операции кои се чести за многу наредбени множества вклучуваат:

#### Справување со податоци и мемориски операции
* Постави (*set*) регистер на фиксна константна вредност.
* Копирај (*copy*) податок од мемориска локација во регистер или обратно.
* Читај (*read*) и пишувај (*write*) податоци од хардверски уреди.

#### Аритметички и логички операции
* Собери (*add*), одземи (*subtract*), помножи (*multiply*) или подели (*divide*) ги вредностите на два регистри, вметнувајќи го резултатот во регистер.
* Извршување на *bitwise* операции.
* Споредба (*compare*) на две вредности во регистри.

#### Контрола на проток операции
* Разгранување (*branch*) до друга локација во програм и извршување на наредба таму.
* Кондициско разгранување (*conditionally branch*) до друга локација ако одреден услов држи.
* Индиректно разгранување (*indirectly branch*) до друга локација.
* Повик (*call*) до друг блок код, додека се сочувува локацијата на наредната наредба како точка каде да се врати.

#### Кообработувачкки наредби
* Вчитување/складирање податоци до и од кообработувач, или размена со ЦПУ регистри.
* Извршување кообработувачкки операции.

### Комплексни наредби
Обработувачите може да содржат комплексни наредби во нивните наредбени множества. Една комплексна наредба прави нешто што може да се потребни многу наредби на друг сметач.

Некои примери за комплексни наредби вклучува:
* Зачувување многу регистри на куп одеднаш.
* Поместување големи блокови меморија.
* Сложени *integer* и *float-point* аритметики (синус, косинус, квадратен корен...)
* SIMD наредби, една наредба извршува операции на многу вредности паралелно.
* Комплексни наредби се почести кај CISC наредбени множества отколку кај RISC наредбени множества, но RISC наредбените множества може да ги содржат исто така.
Специјализирани обработувачкки видови како што е графичкиот обработувач (GPU) обезбедуваат комплексни наредбени множества. Но многу од овие специјализирани обработувачкки комплексни наредбени множества не се јавно достапни и се често пристапени само од развивачите на софтвер преку стандардизирани јазици од повисоко ниво и APIs.десно|мини|Една наредба може да има повеќе полиња, кои го одредуваат логичкиот оператор и може да вклучуваат изворни или дестинациски адреси и константни вредности. Ова е собери веднаш (add immediate) наредба од МИПС, која дозволува селекција на изворни и дестинациски регистри и вклучување на мала константа.|408x408пкс
### Делови на инструции
На традиционалните архитектури, наредба вклучува opcode кој ја назначува операцијата што треба да се изврши, како ‘собери содржина од меморија до регистер’ и нула или повеќе операнди, кои може да назначат регистри, мемориски локации или буквално податоци.

Во многу долги наредбени зборови (VLIW) архитектури, кои вклучуваат многу микрокод (microcode) архитектури, повеќе симултани opcodes и операнди се наведени во една наредба.

### Должина на наредби
Големината или должината на наредба широко варира, од малку колку што е 4 бита во некои микроконтролери до дури стотици битови во некои VLIW системи. Обработувачот користен во личен сметач, мејнфрејм и суперсметач имаат наредби со големина од 8 до 64 бита. Најдолгата можна наредба на x86 е 15 бајта (120 бита). Во наредбените множества, различни наредби може да имаат различни големини.

RISC наредбено множество нормално има фиксна наредбена ширина (често 4 бајта = 32 бита), додека типична CISC наредбено множество може да има наредби со различни големини (1 до 15 бајта за x86).

### Претставување
Наредбите што установуваат програма се ретко специфицирани користејќи ја нивната внатрешна, бројчена форма (машински код). Тие може да се специфицирани од програмерот користејќи асемблерски јазик или почесто тие може да се генерирани од програмски јазици од компајлери.

### Дизајн
Дизајнот на наредбени множества е комплексен проблем. Имало две етапи во историјата на микрообработувачите. Првата била CISC (сметач со комплексно наредбено множество), кој имал многу различни наредби. Во 1970те години, места како IBM истражувале и пронашле многу наредби во множеството кои може да се елиминираат. Ова резултирало во RISC (сметач со намалени наредбени множества), архитектура која користи помало множество од наредби.

Поедноставно множество на наредби може да понуди потенцијал за поголеми брзини, намалена обработувачкка големина и намалена потрошувачка на енергија. Како и да е, покомплексни множества може да оптимизираат чести операции, да ја подобрат ефикасноста на меморијата/кеш или да го поедностават програмирањето.

## Имплементација на наредбени множества
Било кое дадено наредбено множество може да се имплементира на различни начини. Сите начини на спроведување на одредено множество наредби обезбедува ист програмски модел, и сите имплементации на тоа наредбено множество можат да ги извршува истите бинарни изведувања. Различните начини на имплементација на наредбено множество дава различни размени помеѓу цената, изведувањето, потрошената енергија, големина итн.

Кога се дизајнира микроархитектура на процесот, инженерите користат блокови од “*hard-wired*” електронски кола (често дизајнирани одделно) како собирачи, мултиплексери, бројачи, регистри итн. Тогаш често се користи некој вид на јазик за трансфер на регистри за да се опише декодирањето и секвенцирањето на секоја наредба од архитектурата на наредбеното множество користејќи ја оваа физичка микроархитектура.

Има два основни начини за градење контролна единица за да се имплементира описот (иако многу дизајни користат средни начини или компромиси):
# Некои сметачки дизајни го “*hardwire*” целото наредбено множество декодирање и секвенцирање (како остатокот од микроархитектурата)
# Други дизајни употребуваат микрокод рутини или табели (или двете) да го направат ова – типично како на-чип ROM-ви или PLA (иако одделни RAM и ROM се користеле историски). The Western Digital MCP-1600 е постар пример, користејќи посветен, одделен ROM за микрокод.
Некои дизајни користат комбинација од *hardwired* дизајн и микрокод (microcode) за нивните контролни единици.

## Поврзано
* Сметачка архитектура
* Обработувачкки дизајн

## Наводи

Категорија:Централна обработувачка единица
Категорија:Обработка на наредби
Категорија:Микрообработувачи