Инструкциско множество

Од Википедија — слободната енциклопедија
Прејди на: содржини, барај

Инструкциско множество, или архитектура на инструкциско множество (ISA), е дел од компјутерската архитектура поврзана со програмирање, што содржи команди кои се разбирливи за една компјутерска архитектура. Инструкциското множество е збирот на сите зборови кои се користат за да се даде команда на хардверот на еден компјутер.

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

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

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

Преглед[уреди | уреди извор]

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

Класификација на инструкциски множества[уреди | уреди извор]

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

Теоретски важни видови се компјутерите со минимални инструкциски множества и компјутерите со едно инструкциско множество, но тие не се имплементирани во комерцијалните процесори. Уште една варијација се многу долгите инструкциски зборови (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) инструкција од МИПС, која дозволува селекција на изворни и дестинациски регистри и вклучување на мала константа.

Делови на инструции[уреди | уреди извор]

На традиционалните архитектури, инструкција вклучува opcode кој ја назначува операцијата што треба да се изврши, како ‘собери содржина од меморија до регистер’ и нула или повеќе операнди, кои може да назначат регистри, мемориски локации или буквално податоци.

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

Должина на инструкции[уреди | уреди извор]

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

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

Претставување[уреди | уреди извор]

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

Дизајн[уреди | уреди извор]

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

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

Имплементација на инструкциски множества[уреди | уреди извор]

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

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

Има два основни начини за градење контролна единица за да се имплементира описот (иако многу дизајни користат средни начини или компромиси):

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

Некои дизајни користат комбинација од hardwired дизајн и микрокод (microcode) за нивните контролни единици.

Поврзано[уреди | уреди извор]

Наводи[уреди | уреди извор]

  1. Crystal Chen; Greg Novick; Kirk Shimano (December 16, 2006). "RISC Architecture: RISC vs. CISC". cs.stanford.edu. Retrieved February 21, 2015.
  2. "Intel® 64 and IA-32 Architectures Software Developer's Manual". Intel Corporation. Retrieved 12 July 2012.