Mihiztadura-lengoaia
Mihiztadura-lengoaia nemonikoak (laburdurak) erabiltzen duen behe-mailako programazio-lengoaia da, makina lengoaiaren parekoa baina modu sinbolikoan adierazita.[1] Lengoaia horretan idatzitako programak makina-lengoaia bihurtzen dituen programari mihiztatzaile esaten zaio.
SarreraAldatu
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 diseinuaAldatu
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.[2]
Edozein kasutan lengoaia horiek ezaugarri komunak dituzte diseinuaren ikuspuntutik.
FormatuaAldatu
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.
AdibideakAldatu
Intel x86 lengoaian oinarritutako lehen adibideak[3]
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[4]
MOV EAX, [EBX] ; Eraman EAXra EBXn gordetako helbideko 4 byteak, memoriakoak MOV [ESI+EAX], CL ; Eraman ESI+EAX helbidera CL erregistroaren edukia
MihiztatzaileaAldatu
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.[5]
FuntzionamenduaAldatu
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 motakAldatu
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.
BilakaeraAldatu
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.
ErreferentziakAldatu
- ↑ Arbelaitz, Olatz; Arregi, Olatz; Etxeberria, Izaskun; Garay, Nestor; Martin, Jose-Ignazio; Muguerza, Javier; Rodriguez, Clemente; Arruabarrena, Agustin et al.. (2004). Makina-hizkuntza : oinarrizko konputagailu baten egitura, agindu-multzoa eta programazioa. Universidad del País Vasco, Servicio Editorial = Euskal Herriko Unibertsitatea, Argitalpen Zerbitzua ISBN 84-8373-592-X. PMC 433600969. (Noiz kontsultatua: 2021-02-10).
- ↑ (Ingelesez) McGregor, Jim. «The Difference Between ARM, MIPS, x86, RISC-V And Others In Choosing A Processor Architecture» Forbes (Noiz kontsultatua: 2022-11-21).
- ↑ body., Intel Corporation, issuing. Intel architecture software developer's manual. ISBN 1-55512-272-8. PMC 652410922. (Noiz kontsultatua: 2022-11-21).
- ↑ «Guide to x86 Assembly» www.cs.virginia.edu (Noiz kontsultatua: 2022-11-21).
- ↑ Arbelaitz, Olatz; Arregi, Olatz; Etxeberria, Izaskun; Garay, Nestor; Martin, Jose-Ignazio; Muguerza, Javier; Rodriguez, Clemente; Arruabarrena, Agustin et al.. (2004). Makina-hizkuntza : oinarrizko konputagailu baten egitura, agindu-multzoa eta programazioa. Universidad del País Vasco, Servicio Editorial = Euskal Herriko Unibertsitatea, Argitalpen Zerbitzua ISBN 84-8373-592-X. PMC 433600969. (Noiz kontsultatua: 2021-02-10).