Mihiztadura-lengoaia

Mihiztadura-lengoaia nemonikoak (laburdurak) erabiltzen duen behe-mailako programazio-lengoaia da, makina lengoaiaren parekoa baina modu sinbolikoan adierazita. Lengoaia horretan idatzitako programak makina-lengoaia bihurtzen dituen programari mihiztatzaile esaten zaio.

Sarrera 
Mihiztadura-lengoaian programazio lana eta hardwareren ezaugarriak bereizten dira. Honela ez ditugu ez memoriako helbide errealik, ez kode numerikorik erabili behar. Honen ordez instrukzioak sinbolikoki kodetzen dira. Instrukzio bakoitzari kode nemoniko bat dagokio, bere eginkizunarekin zerikusia duena.

Lengoaia hauek erabiltzen duten alfabetoa sinbolo edo nemoniko multzo batez osatuta dago. Lengoaia hauen ezaugarriak:
 Datuak atzitzeko helbide sinbolikoak erabiltzen dituzte, helbide bitarren ordez
 Iruzkinak onartzen ditu
 Agindu-bitarrak nemonikoen ordez aldatzen dira

Beste desberdintasun bat instrukzioen formatuan dago. Normalean, mihiztadura-lengoaian 4 elementu dituzte, batzuetan guztiak ez agertu arren: etiketa, agindu-kodea, eragigaiak eta oharrak.

Honela ere, mihiztadura-lengoaiak harreman oso estua du makina-lengoaiarekin, mihiztadura-lengoaiaz idatzitako programako instrukzio bakoitza makina-lengoaian ere instrukzio bat izango baita. Desberdintasuna kodeketan eta formatuan dago.

Lengoaiaren diseinua 
Konputagailuaren arkitekturaren arabera makina-lengoaia desberdina denez gero mihiztadura-lengoaia ere desberdinak izango dira. Historikoki IBM System/360 sistemarena izan zen hedatuena, baina hori aldatzen joan da eta gaur egun ohikoenak  ARM, MIPS, Intel x86 eta RISC dira. 

Edozein kasutan lengoaia horiek ezaugarri komunak dituzte diseinuaren ikuspuntutik.

Formatua 
Idatzi beharreko sententziak edo aginduak hiru motakoak dira:

 Aginduak: exekutatzera joango diren sententziak dira, eta besteak beste eragiketa-kode bat dute agindua adierazteko.
 Datuen definizioa edo erazagupena: aginduetan parte hartzen dituzten datuak modu sinbolikoan (etiketa batez) defini daitezke, gero aginduak irakurgarriagoak izan daitezen.
 Mihiztatze-direktibak: mihiztatze-prozesua gidatzeko sententziak dira, mihiztatzailearen lana modulatzeko.

Aginduak izango dira programaren lerro nagusiak, eta bertan agertu ohi diren elementuak ondokoak izan daitezke:

 Eragiketa-kodea: exekutatu beharreko eragiketa zehazten du: aritmetikoa, logikoak, konparaketa, jauzia...
 Eragigaiak: eragiketan parte hartzen duten elementuak dira. Eragiketa gehienetan datuak dira (erregistro orokorrak, memoriako posizioak, konstante zenbakizkoak edo alfabetikoak, datuetako etiketak... Batzuetan, Jauzietan batez ere, programaren posizio bat izan daiteke.
 Etiketa: aginduei izen sinboliko bat esleitzeko modua da eta aginduaren ezkerraldean zehaztu ohi da. Aginduetako etiketa horiek Jauzietan erabili ohi dira.

Adibideak 
Intel x86 lengoaian oinarritutako lehen adibideak
 MOV AL, 1h        ; Kargatu AL erregistroan 1 balioa
 MOV CL, 2h        ; Kargatu CL erregistroan 2 balioa
 MOV DL, 3h        ; Kargatu DL erregistroan 3 balioa
Erregistroak eta konstanteez gain eragigai sofistikatuagoak erabil daitezke
 MOV EAX, [EBX]	  ; Eraman EAXra EBXn gordetako helbideko 4 byteak, memoriakoak
 MOV [ESI+EAX], CL ; Eraman ESI+EAX helbidera CL erregistroaren edukia

Mihiztatzailea 
Mihiztatzaile terminoa mihiztadura-lengoaian idatzitako iturburu kodea makinak erabili eta uler dezakeen makina lengoaiara bihurtzeaz arduratzen den programa informatiko mota bati dagokio. Aplikazio hauek programak errazago idazteko helburuarekin sortu ziren; zuzenean bitar sisteman idaztea, makinak uler dezakeen bakarrean, ezinezkoa baitzaio edonori. Mihiztadura-lengoaietan gertatutako programazio-lengoaiaren eboluzioak mihiztatzailearen eboluzioa ere eragin zuen, gaur egun ezagutzen dugun konpiladore programa bilakatu arte.

Funtzionamendua 
Programak mihiztadura-lengoaian idatzitako fitxategia irakurri eta bertako kode mnemotekniko bakoitza eragiketa-kodeari eta bestelako elementuei (helbideratzeak, erregistroak...) dagokien sistema bitarrarekin ordezkatzen du, beti ere aurretik mihiztatzailearen aukeretan hautatu dugun plataformaren ezaugarriak kontuan hartuz.

Mihiztatzaile motak 
Hiru mihiztatzaile mota bereiz ditzakegu:

 Oinarrizko mihiztatzailea. Oso maila baxukoak dira, eta funtsean beraien lana instrukzio, parametro eta helbideak ezartzeko moduei izen sinbolikoak ezartzea da. Gainera, zuzentarau batzuk ezagutzen ditu non mihiztatzailearen zenbait parametroen funtzionamendua adierazten den.

 Mihiztatzaile modularra edo makro-mihiztatzailea. Oinarrizko mihiztatzaileen ondorengoak, oso hedatuak izan ziren 50. eta 60. hamarkadetan, maila altuko lengoaia zabaldua izan aurretik. Mihiztatzaile batek egin dezakeen guztia egiteaz gain, zuzentarau batzuk dauzka bere baitan makroinstrukzioak definitu eta gauzatzeko.

 32 bit-eko mihiztatzaile modularra edo maila altuko mihiztatzailea. 32 bits zituzten prozesatzaileen arkitektura berrien sorrera erantzuna emanez sortu ziren. Beraietako askok atzera egiteko gaitasuna dute eta 16 bits-eko estruktura duten programekin ere lan egin dezakete. Honela, aurrekoek egin ditzaketen gauzak egin ditzake, makroinstrukzioak erabili esaterako, eta gainera programazio estruktura konplexuagoak erabiltzea ahalbidetzen du, maila altuko lengoaien berezkoa.

Bilakaera 
Historikoki, programa ugari idatzi izan dira mihiztadura-lengoaiaz. Burroughs-eko MCP sistema eragilea (1961) izan zen lehen SEa ez zena osorik idatzi mihiztadura-lengoaiaz. Aplikazioak ere hasiera batean MLz idazten ziren baina COBOL, FORTRAN eta PL/I lengoaiak pixkanaka gailendu ziren helburu horretarako.

Mihiztadura-lengoaiaz osorik idatzitako programen adibide esanguratsuenen artean daude MS-DOS sistema eragilea, Turbo Pascal konpiladorea edo Lotus 1-2-3 kalkulu-orriaren lehen bertsioa. Bideo-jokoetan eraginkortasuna handitzeko ere, MLra jotzen zen, adibidez  1993ko NBA Arcade Jam sortzeko.

1980 eta 1990etako etxeko konputagailuen sistemetan ere ML nagusia zen, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga, eta Atari ST konputagailuetan esaterako, alternatiba zen BASIC interpretatua ez zelako nahiko eraginkorra konputagailu txiki horietan.

Denborarekin eta ordenagailuen ahalmen gorakorrarekin erabilera behera egin du goi-mailako lengoaiekin alderatuta, baina optimizatzeko tresna berriak dauden arren oraindik erabiltzen da hainbat nitxotan, esate baterako:

 SErekin lotuta behe-behe mailako programazioan, batez ere device driver-ak eta eten-maneiatzaileak garatzeko adibidez.
 Eskakizun handitako sistema txertatuetan denbora errealeko aplikazioetarako. 
 Kriptografiko sistema kritikoetan eraso batzuk saihesteko.
 Makina zaharretarako kodea idazteko.
 Alderantzizko ingeniaritzan kode bitarra interpretatzeko.

Erreferentziak

Ikus, gainera 
 Makina lengoaia

Kanpo estekak 

Sistema txertatuak