Un conjunt d'instruccions, repertori d'instruccions, joc d'instruccions o ISA (de l'anglés instruction set architecture, «arquitectura del conjunt d'instruccions») és una especificació que detalla les instruccions que una unitat central de processament pot entendre i eixecutar, o el conjunt de tots els comandos implementats per un disseny particular d'una CPU. El terme descriu els aspectes del processador generalment visibles per a un programador, inclosos els tipos de senyes natives, les instruccions, els registres, la arquitectura de memòria i les interrupcions, entre atres aspectes. Existixen principalment tres tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) i SISC (Simple Instruction Set Computing). La arquitectura del conjunt d'instruccions (ISA) s'ampra a voltes per a distinguir este conjunt de característiques de la microarquitectura, que són els elements i tècniques que s'ampren per a implementar el conjunt d'instruccions. Entre estos elements es troben les microinstruccions i els sistemes de caché. Processadors en diferents dissenys interns poden compartir un conjunt d'instruccions; per eixemple, el Intel Pentium i AMD Athlon implementen versions casi idèntiques del conjunt d'instruccions x86, encara que tenen dissenys diferents.

Ellenguage màquina

editar

El llenguage màquina està construït a partir dels estats discrets o instruccions. En l'arquitectura de processament, una instrucció donada pot especificar molt be:

  • Registres particulars per a operacions aritmètiques, de direccionament o de control.
  • Ubicacions particulars de la memòria.
  • Modos de direccionament per a interpretar als operants: «Si vols que la màquina canvie un foc cremat puja't a l'escala, alcança el foc, lleva el foc cremat, posa el foc nou, baixa de l'escala, lleva l'escala». Les operacions més complexes es construïxen a partir d'estes, que (en una màquina Von Neumann) s'eixecuten secuencialmente, o segons el control de fluix. Moltes o poques de les operacions disponibles incloses en la majoria de conjunts són:
  • Desplaçament.
    • Establir un registre a un valor constant.
    • Moure senyes des d'una posició de memòria a un registre i viceversa. Açò es realisa per a obtindre senyes per a operacions matemàtiques i el seu almagasenament.
    • Llegir i escriure senyes des de dispositius d'hardware.
  • Operacions matemàtiques.
    • Sumar, restar, multiplicar o dividir dos registres i colocar el resultat en algun d'ells.
    • Realisar operacions bit a bit, tenint el AND i el OR de cada bit en un parell de registres, o el NOT de cada bit en un registre.
    • Comparar dos valors que es troben en registres (per eixemple, si són iguals o si un és major que un atre).
  • Afecten al fluix de programa.
    • Botar a una atra posició del programa i eixecutar instruccions allí.
    • Botar a una atra posició si es complix certa condició.
    • Botar a una atra posició, pero salvant la posició actual per a poder tornar (realisar una cridada, per eixemple call printf). Algunes computadores inclouen instruccions "complexes". Dites instruccions poden prendre moltes instruccions en atres equips. Estes es caracterisen per instruccions que necessiten varis passos, com el control de múltiples unitats funcionals. Alguns eixemples són:
  • Aforro de registres en la pila.
  • Moure grans blocs de memòria.
  • Complexes operacions and/or en aritmètica de menge flotant, tals com el sen o la raïl quadrada.
  • Instruccions que combinen ALU en un operant de la memòria més que de registres. Un tipo complex de l'instrucció que ha aplegat a ser particularment popular recentment és SIMD (Single Instruction, Multiple Data), una operació que realise la mateixa operació aritmètica en péntols múltiples de senyes al mateix temps. SIMD tenen la capacitat de manipular vectores i matrius grans en temps mínim. Les instruccions de SIMD permeten la paralización fàcil dels algoritmes implicats comunament en sò, image, i el procés video. Vàries implementacions de SIMD s'han dut al mercat baix noms comercials tals com MMX, 3DNow! i AltiVec. Dissenyar sistemes d'instruccions és molt complex. En un principi varen existir dos tipos de sistemes, un modo de classificar-els és per complexitat arquitectònica. El primer tipo era el CISC (Complex Instruction Set Computer) que tenia moltes instruccions diferents. En els anys 70s, en IBM varen fer una investigació en la que varen trobar que moltes instruccions en el sistema podrien ser eliminades. El resultat va ser el segon tipo, el RISC (Reduced Instruction Set Computer), una arquitectura que utilisa un sistema més chicotet d'instruccions. Un conjunt d'instruccions més simple pot oferir el potencial per a velocitats més altes, tamany reduït del processador, i un consum d'energia menor. No obstant, un conjunt més complex pot optimisar operacions comunes, millorar memòria/eficiència de caché, o simplificar la programació.

Implementació del conjunt d'instruccions

editar

Qualsevol conjunt d'instruccions es pot implementar de vàries maneres. Totes les maneres d'implementar un conjunt d'instruccions donen el mateix model programat, i totes poden fer funcionar els mateixos eixecutables binaris. Les vàries maneres d'implementar un conjunt d'instruccions donen diverses compensació entre el cost, el funcionament, el consum d'energia, el tamany, etc. En dissenyar microarquitecturas, els ingeniers varen usar blocs de circuits electrònics “durament-conectats” (dissenyat a sovint per separat) per eixemple, els multiplexors, els contadors, els registres, les ALU, etcétera. Un cert tipo dellenguage de transferència de registres és a sovint usat per a descriure la codificació i la seqüència de cada instrucció d'ISA usant esta microarquitectura física. Hi ha també alguns nous dissenys de CPU que compilan el conjunt d'instrucció a una RAM escribible o FLASH dins de la CPU (tal com el processador Recursiv i el Imsys Cjip), o FPGA (computació reconfigurable). Western Digital MCP-1600 és un eixemple antic, usant una ROM dedicada, separada del microcódigo. ISA es pot també emular en software per un intérpret. Naturalment, per l'interpretació de “overhead”, és més llent que eixecutar programes directament sobre l'hardware emulat. Hui, és pràctica per als venedors de nous ISA o microarquitecturas posar emuladors del software a disposició dels desenrolladors de programes informàtics ans que l'implementació de l'hardware estiga llista. Els detalls de l'implementació tenen una influència forta en les instruccions particulars seleccionades per al conjunt d'instrucció. Per eixemple, moltes implementacions de l'instrucció “pipline” permeten solament una càrrega de memòria (lloeu) o almagasén en memòria (store) per instrucció, duent a càrrega-almagasena arquitectura (RISC). Per un atre eixemple, algunes maneres d'implementar l'instrucció “pipline” varen dur a un recalat de retardo. La demanda de processament de senyal digital d'alta velocitat ha espentat en el sentit contrari, forçant l'implementació d'instrucció de manera particular. Per eixemple, per a realisar els filtres digitals és prou insuficient, l'instrucció del MAC en un processador típic de senyal digital (DSP) es deu implementar usant una arquitectura d'Harvard que puga dur una instrucció i dos paraules de senyes simultàneament, i requerix un sol cicle.

Disseny

editar

Densitat del còdic

editar

En computadores antigues, la memòria del programa era costosa, aixina que minimisar el tamany d'un programa per a assegurar que va a cabre en la memòria llimitada era a sovint central. Aixina el tamany combinat de totes les instruccions va necessitar realisar una tasca particular, la densitat del còdic, era una característica important de qualsevol sistema d'instrucció. Les computadores en alta densitat del còdic també tenien a sovint instruccions complexes per a l'entrada del procediment, les tornades parametrizados, els llaços, etc. No obstant, "instruccions CISC" combinen simplement una operació bàsica de la ALU, tal com "add", en l'accés d'un o més operants en memòria (usant modos de direcció tals com a directe, indirecte, indexat). Certes arquitectura poden permetre dos o tres operants (inclós el resultat) directament en memòria o poden permetre realisar funcions tals com l'increment automàtic de la busca. RISC, varen anar els primers implementats en profunditat en el periodo de ràpit creiximent de les memòries de subsistema, es reduïx el còdic en la finalitat de simplificar el circuit d'aplicació i en això tractar d'aumentar el rendiment a través de les freqüències de rellonge més elevades i l'us de més registres. Les instruccions RISC solen realisar només una operació, com una "suma" de registres o una "càrrega" d'una posició de memòria en un registre, també solen utilisar una llongitut d'instruccions fixes, mentres que un conjunt d'instruccions típiques CISC té instruccions molts més curtes que esta llongitut fixa. Les instruccions de llongitut fixa són menys complicades de manejar que les instruccions d'ample variable, per vàries raons (per eixemple: no tindre que comprovar si una instrucció s'estén a abdós costats d'una llínea de caché o ellímit de memòria virtual de la pàgina), i per lo tant un poc més fàcil d'optimisar la velocitat. No obstant, com els equips RISC normalment requerixen més i més per a implementar les instruccions que eixecuten una determinada tasca, fan menys òptim l'us de l'ample de banda i de la memòria caché. Les computadores mínimes del conjunt d'instruccions (MISC) són una forma de màquina apilada, a on hi ha poques instruccions separades (16-64), per a poder cabre instruccions múltiples en una sola paraula de màquina. Estos tipos de núcleus duen a sovint poc silici per a implementar-se, aixina que poden ser observades fàcilment en un FPGA o en una forma multinúcleo. La densitat del còdic és similar al RISC; la densitat creixent de l'instrucció és compensada requerint més de les instruccions primitives per a fer una tasca.

Número d'operant

editar

El conjunt d'instruccions pot ser classificat pel número màxim d'operants explícitament especificats en les instruccions (en els eixemples que seguixen, a, b i c es referixen a celes de memòria, mentres que reg1 i successius es referixen als registres de la màquina).

0-operant, també cridada màquina de pila: totes les operacions aritmètiques s'eixecuten en la part superior d'una o dos posicions de la pila, push i pop són les instruccions utilisades per a accedir a la memòria: push a, push b, add, pop c.

1-operant (màquines d'una direcció), també cridades màquines d'acumulador, inclosa en la majoria de les primeres computadores i molts microcontroladors chicotets: la majoria d'instruccions especifiquen un operant explícit a la dreta (un registre, una posició de memòria, o una constant) i un operant a l'esquerra: lloeu a, add b, store c.

2-operant, la majoria de les màquines CISC i RISC entren en esta categoria:
CISC – lloeu a, reg1, add reg1, b; store reg1, c
RISC – càrregues que requerixen la memòria explícita, les instruccions serien: lloeu a,reg1; lloeu b,reg2; add reg1,reg2; store reg2,c

3-operant, permet una millor reutilisació de les senyes: CISC - ben una sola instrucció: add a, b, c, o més generalment: move a,reg1; add reg1,b,c com la majoria de les màquines es llimiten a dos operants de memòria. RISC - Per la gran cantitat de bits necessaris per a codificar els tres registres, este esquema no sol estar disponible en els processadors RISC en chicotetes instruccions de 16 bits: lloeu a,reg1; lloeu b,reg2; add reg1+reg2->reg3; store reg3,c. Més operants, algunes màquines CISC permeten una varietat de modos de direccionament que permeten més de 3 operants (registres o accessos a memòria), com el VAX "POLY", instrucció d'evaluació de polinomi.

Característiques desijables

editar

Les característiques que es pretén que tinga un conjunt d'instruccions són quatre, principalment:


  • Complet: que es puga realisar en un temps finito qualsevol tasca eixecutable en un ordenador (computable o decidible).
  • Eficient: que permeta alta velocitat de càlcul sense exigir una elevada complexitat en la seua UC i ALU i sense consumir excessius recursos (memòria), és dir, deu complir la seua tasca en un temps raonable minimisant l'us dels recursos.
  • Autocontenidas: açò és, que continguen en sí mateixes tota l'informació necessària per a eixecutar-se.
  • Independents: que no depenguen de l'eixecució d'alguna atra instrucció. Es pot comprovar que per a que un conjunt d'instruccions siga complet solament es necessiten quatre instruccions:
  • Escritura.
  • Moure a l'esquerra una posició i llegir.
  • Moure a la dreta una posició i llegir.
  • Parar. En esta idea es basen les arquitectura RISC, no obstant, en este conjunt no es pot conseguir l'eficiència del repertori d'instruccions per lo que en la pràctica el conjunt sol ser més ampli en benefici de conseguir un millor rendiment, tant en us de recursos com en consum de temps.

Tipos d'instruccions i eixemples

editar

Transferència de senyes

editar

Copien senyes d'un orige a un destí, sense modificar l'orige i normalment sense afectar als flags o indicadors de condició. Poden transferir paraules, fraccions de paraules (bytes, mija paraula) o blocs complets de n bytes o paraules. Estes operacions poden ser:

  • registre a registre.
  • registre a memòria.
  • memòria a registre.
  • memòria a memòria.
Nemotécnicos més freqüents
  • move copia el contingut d'un registre (o memòria) a un atre.
  • store copia el contingut d'un registre a memòria.
  • lloeu còpia el contingut d'una posició de memòria a un registre.
  • move block copia un bloc de senyes d'una posició de memòria a una atra.
  • move multiple còpia de l'orige en vàries posicions de memòria.
  • exchange intercanvia el contingut de dos operants.
  • clear posa a 0 el destinto (tots els bits).
  • set posa a 1 el destí (tots els bit).
  • push introduïx una senya en la capçalera de la pila (indicada pel SP).
  • pop trau una senya de la capçalera de la pila (indicada pel SP).

Instruccions aritmètiques

editar

Són efectuades per la ALU i solen canviar els flags o indicadors de condició.


Nemotécnicos més freqüents
  • add: suma.
  • add with carry: suma en carrege.
  • subtract: resta.
  • subtract with borrow: resta tenint en conte el deute anterior.
  • increment: incrementa en 1 un valor.
  • decrement: decrementa en 1 un valor.
  • multiply: multiplica.
  • dividix: dividix.
  • extend: aumenta l'operant de tamany.
  • negate: canvia de signe.
  • absolute: valor absolut. Poden tindre instruccions per a tractar en números en BCD i inclouen operacions en menge flotant, lo que s'identifica en una 'f' abans del nom del nemotécnico com per eixemple: fabsolute

Instruccions de comparació

editar

Solen precedir a una instrucció de forcall condicional i modifiquen els flags. No cal pensar que les instruccions de bot condicional depenen d'este repertori, ya que lo únic que fa el bot condicional és consultar els flags i bota si precedix, pero no depén de cap instrucció de comparació. (de fet qualsevol operació aritmètica realisada anteriorment a un bot condicional pot provocar que este "ix-te").

Nemotécnicos més freqüents
  • compare: resta els dos operants pero no almagasena el resultat, solament modifica els flags.
  • test: compara un cert valor especificat en el 0.

Instruccions llògiques

editar

Realisen operacions booleanas "bit a bit" entre dos operants. Com les aritmètiques també modifiquen els flags.

Nemotécnicos més freqüents
  • and: el "i" llògic.
  • or: el "o inclusivo" llògic.
  • xor: el "o exclusiu" llògic.
  • not: la negació llògica. (complement a 1, no confondre en el canvi de signe "negate" que és el complement a 2).

Instruccions de desplaçament

editar

Poden ser aritmètic o llògic i poden incloure o no rotacions. Poden ser d'esquerra a dreta.

Nemotécnicos més freqüents
  • shift: desplaçament aritmètic o llògic.
  • rotate: rotació en o sense carrege.

Instruccions de bits

editar

Comproven un bit de l'operant i el seu valor ho reflectixen en l'indicador de zero. Poden posar un bit a 0 o complementar-ho.

Nemotécnicos més freqüents
  • bit test: comprova un bit.
  • bit clear: comprova un bit i ho posa a 0.
  • bit set: comprova un bit i ho posa a 1.

Instruccions de control

editar

Permeten modificar la seqüència normal d'eixecució d'un programa, pot fer-se per bot condicional relatiu o absolut. Es classifiquen en quatre grups:

  1. bot incondicional
  2. bot condicional
  3. cridada a subrutina
  4. gestió de les interrupcions

Poden ser condicionals o incondicionals, se solen especificar com jump o branch, i en el cas dels condicionals se sol cridar jcond o bcond, a on cond és una o més lletres que indiquen la condició que ha de complir-se per a que el bot es produïxca.

Incondicional

Bota sense comprovar cap condició.

Nemotécnicos més freqüents: jump o branch.
Condicional

Bota si la condició es complix.

Nemotécnicos més freqüents: jcond o bcond.

Cridades a subrutina

editar

Invoca l'eixecució de funcions anteriorment definides.

Nemotécnicos més freqüents: call (cridada) i ret (tornada).

Gestió d'interrupcions

editar

S'usen per a cridar a les rutines de servici d'interrupció i açò es pot fer per hardware o be per software. Necessita una instrucció similar a return per a retornar al context anterior pero restablint l'estat de la màquina, per a no afectar a l'aplicació a la qual es va interrompre (iret).

Instruccions d'entrada i eixida

editar

Són instruccions de transferència llevat que l'orige/destine de dit fluix és un port d'un dispositiu d'entrada i eixida. Estes instruccions poden donar-se per mig de dos alternatives:

  1. I/S "mapeada" en memòria: els perifèrics tenen direccions assignades de la MP per lo que no es necessiten instruccions especials i les operacions es realisen en les ya vistes, com són: lloeu, store i move.
  2. I/S independent: necessiten unes instruccions especials per a indicar-li al processador que nos estem referint al mapa de direccions d'I/S, ya que este mapa i el mapa de memòria són disjuntos.
Nemotécnicos més freqüents
  • input o read: permet llegir informació d'un port i traslladar-la a memòria principal.
  • output o write: permet escriure informació en un port d'un dispositiu.
  • test i/o: llig informació de control d'un perifèric.
  • control i/o: envia informació de control cap a un perifèric.


Instruccions de control i miscelànees

editar

Nemoténicos més freqüents:

  • halt: deté l'eixecució del programa fins que una interrupció arranca un atre programa.
  • wait: servix per a detindre l'eixecució d'un programa fins que succeïx un determinat event que no és una interrupció (una atra condició externa al primer programa).
  • nop: no realisa cap operació, servix per a reblir buits en un programa o temporizar esperes.
  • enable: habilita les interrupcions.
  • disable: deshabilita les interrupcions.
  • test and set: s'utilisa per a l'implementació de l'exclusió mútua, açò és, que un processador no puga accedir a un determinat recurs que està sent usat per un atre processador en eixe mateix moment. S'usen com a semàfors, açò és, es declara una variable sancera que tindrà el valor 0 si el recurs esta lliure i 1 si està sent utilisat, de manera que si un processador comprova i el semàfor està en 1 tindrà que esperar fins que este canvie a 0 (1 = semàfor roig i 0 = semàfor vert).

Vore també

editar

Referències

editar