Lankide:IIrureta88/Proba orria

Wikipedia, Entziklopedia askea

Mihiztadura-lengoaia (ingelesez assembly language eta asm laburdura) edo mihiztatzailea informatikako behe-mailako programazio-lengoaia sinbolikoa da.[1][2]

Lengoaia honetan idatzitako agindu bakoitzetik makina-lengoaiako agindu bakarra sortzen da gero. Prozesadorearen oinarrizko agindu mota bakoitza (makina-lengoaiako agindu bakoitza) izen mnemotekniko baten bidez adierazten da, ez kode bitarrean makina-lengoaian bezala; zenbakiak digitu hamartarrekin idazten dira, ez kode bitarrean makina-lengoaian bezala. Mihiztadura.lengoaiako aginduen eta makina-kodearen aginduen arteko korrespondentzia zuzena da, ia erabatekoa. Hala, prozesadore-arkitektura bakoitzak bere mihiztatze-lengoaia du, goi-mailako programazio-lengoaia gehienek ez bezala. Hizkuntza horiek hainbat arkitekturaren artean eramangarriak izan ohi dira, baina, interpretatu edo konpilatu egin behar dira.[3][4]

Agindua MIPS mihiztadura-

lengoaian

Agindua MIPS makina-lengoaian Adibidearen azalpena
addi $s2, $t8, 37 001000 11000 10010 0000 0000 0010 0101 addi operazioaren kodea '001000' da (batuketa bat egitea.

37 da batu behar den balioa ('0000 0000 0010 0101')[5]

Mihiztatzaile izeneko programa bat erabiltzen da mihiztadura-lengoaiaren sententziak ordenagailuaren makina-kodera itzultzeko. Mihiztatzaileak erraz itzultzen ditu aginduen izen mnemonikoak makina-lengoaiako aginduetara (kode bitarrean), eta berdin aginduetan azaltzen diren datuekin. Hori goi-mailako lengoaiekin kontrastean dago, non agindu bakar batek normal bat makina-ĺengoaiako agindu asko ematbihurtu ohi da.

Mihiztatzaile sofistikatu askok mekanismo gehigarriak eskaintzen dituzte programa errazago garatzeko, mihiztatze-prozesua kontrolatzeko eta arazketa-laguntza emateko. Mihiztatzaile moderno gehienek makroak definitzeko erraztasuna eskaintzen dute (beherago deskribatua), eta makro mihiztatzaile deitzen zaie.

Batez ere softwarearen garapeneko hasieran erabili zen mihiztadura-lengoaia, historikoki. artean goi-mailako lengoaia indartsurik ez zegoenean eta konputagailuen baliabideak oso mugatuak izaten zirenean. Gaur egun, maiz erabiltzen da giro akademikoan eta ikerketetan, batez ere hardwarea zuzenean manipulatu behar denean, errendimendu handia behar denean edo baliabide kontrolatuak eta murriztuak erabili behar direnean. Gailu-kontrolagailuen garapenean (ingelesez, device drivers) eta sistema eragileen garapenean ere erabiltzen da, makina-aginduetara zuzenean sartu behar delako. Gailu programagarri askok (mikrokontrolatzaileak, esaterako) oraindik mihiztatzailea erabiltzea dute aldaketak egiteko modu bakarra.

Ezaugarriak[aldatu | aldatu iturburu kodea]

Mihiztadura-lengoaiaz idatzitako programak antza handia du programa mihiztatzaileak lortuko duen objektu-programarekin, gero makinak exekutatu duenarekin; baina lehenago, fitxategi itzuli hori estekatze-programa baten bidez lotzen da beharrezko izan daitezkeen beste kode zati lagungarri batzuekin (beste liburutegi edo fitxategi batzuetatik hartuta); horrela, azken programa exekutagarri bat osatuko da. Normalean, programa mihiztatzaileak gai dira exekutagarriak lotzeko, edo zeregin hori gauzatzeko programa estekatzaile batekin batera datoz.

Mota honetako lengoaiak sortzeko helburua programak errazago idaztea da, zuzenean kode bitarrean idaztea konplikatuegia baita. Kode hori da ordenagailuak asimilatzen duen kode bakarra. Lengoaiak lotura estua du programa exekutatu behar duen konputagailuaren arkitekturarekin.

Mihiztadura-lengoaiak mihiztatzea eta beste edozein lengoaia konpilatzea oso diferenteak dira, izan ere, mihiztadura-programa askoz ere errazagoa da; izan ere, kasurik sinpleenetan, aginduen etiketak kode bitarrera itzuli besterik ez du egin behar, eta, horrez gain, konpiladoreak askoz ere konplexuagoak dira, giza-hizkuntzatik askoz hurbilago bat interpretatu behar baitute, hizkuntzaren sintaxia eta askoz tresna matematiko konplexuagoak behar baitituzte.

Bestalde, mihiztatzaile bat (ingelesez assembler) mihiztadura-lengoaia batean idatzitako iturburu-kode sinboliko hori itzultzeaz arduratzen da, makina-lengoaiaz dagoen programa informatiko bat lortuko du fitxategi batean, etamikroprozesadoreak kode hori zuzenean exekutatu ahal izango du. Mihiztadura-lengoaietatik abiatuta programazio-lengoaien bilakaerak programa mihiztatzaile horien bilakaera eragin zuen, gaur egun konpilatzaile gisa ezagutzen den bera egiten baitzuten. Programak mihiztatzaile-lengoaian idatzitako fitxategia irakurtzen du, eta sistema bitarrean agertzen den mnemotekniko bakoitzaren ordez.

Mihiztadura-lengoaiazko iturburu-kodea duten fitxategiak ASCII testu-fitxategiak dira, eta '.ASM' luzapena izaten dute.

  • Mihiztadura-lengoaian idatzitako kodeak badu ulertzeko zailtasun pixka bat, bere egitura makina-lengoaiaren antzekoa baita, hau da, behe-mailako lengoaia da.
  • Mihiztadura-lengoaia ez da oso eramangarria da, hau da, mikroprozesadore batentzat idatzitako kode bat aldatu egin behar izan daiteke beste makina batean erabiltzeko. Arkitektura desberdina duen makina batera aldatzean, oro har, erabat berridatzi behar izaten da.
  • Mihiztadura-lengoaia batean aditua den programatzaile batek egindako programak askoz azkarragoak izaten dira, eta sistemaren baliabide gutxiago kontsumitzen dute (RAM memoria eta ROM) goi-mailako lengoaia batetik konpilatutako programa baliokideak baino. Mihiztadura-lengoaian kontu handiz programatzean, azkarrago exekutatzen diren eta goi-mailako lengoaiarekin baino espazio txikiago hartzen duten programak sor daitezke.
  • Mihiztadura-lengoaia baten bidez, oso zehatz kontrolatzen dira mikroprozesadore batek egiten dituen lanak, eta, horren bidez, goi-mailako lengoaian programatzeko zailak eta/edo ez-eraginkorrak diren kode-segmentuak sor daitezke; izan ere, besteak beste, mihiztadura-lengoaian PUZaren beraren aginduak erabil daitezke, normalean goi-mailako lengoaietan eskuragarri ez daudenak.
  • Era berean, errutina batek exekutatzean zenbat denbora behar duen ere kontrola daiteke, eta exekutatzen ari den bitartean ez eten.

Funtsezko kontzeptuak[aldatu | aldatu iturburu kodea]

Mihiztatzailea[aldatu | aldatu iturburu kodea]

Programa mihiztatzaile batek objektu-kodea sortzen du, aginduen mnemoteknikoak eta horien sintaxia kontuan hartuz, eragiketa eta atzipen-moduak zenbaki-balio bihurtuko ditu. Errepresentazio horrek, normalean, eragiketa-kode bat ("opcode") du, baita beste kontrol-bit eta datu batzuk ere. Mihiztatzaileak adierazpen konstanteak ere kalkulatzen ditu, eta identifikatzaileak ebazten ditu memoriako posizioetarako eta beste entitate batzuetarako.[6] Erreferentzia sinbolikoak erabiltzea mihiztatzaileen funtsezko ezaugarria da, programa aldatu ondoren kalkulu aspergarriak eta eskuzko helbideen eguneratzeak saihestu ahal izateko. Mihiztatzaile gehienek badituzte, halaber, kodean testu-ordezkapena egiteko makroak.

Zenbait mihiztatzailek instrukzio-multzoetan berariazko optimizazio-mota sinple batzuk ere egin ditzakete. Horren adibide zehatz bat hornitzaile batzuen x86 mihiztatzaile nonahikoak izan daitezke. Dimentsionatzean, horietako gehienek aginduetan ordezkapenak egin ditzakete (programaren exekuzioko jauzi luzeak, jauzi labur edo erlatiboen ordez), hala eskatuz gero. Beste batzuek, gainera, jarraibideak berrantolatu edo txerta ditzakete, hala nola RISC arkitekturetarako mihiztatzaile batzuk, PUZeko pipelinea ahalik eta modurik eraginkorrenean ustiatzeko zentzuzko agindu-programazioa optimizatzen lagun dezaketenak.

Mihiztatzaileak 1950eko hamarkadatik daude eskuragarri, makina-lengoaiaz harantzago egindako lehen urratsa izan zen, goi-mailako programazio-lengoaiak asmatu aurretik, hala nola Fortran, Algol, COBOL eta Lisp. Zenbait itzultzaile-mota eta kode erdiautomatikoko kode-sorgailu ere izan dira, mihiztatzaleen eta goi-mailako lengoaien antzeko ezaugarriak dituztenak, eta Speedcode da adibiderik ezagunenetako bat.

CPU jakin baterako sintaxi desberdina duten zenbait mihiztatzaile egon daitezke, edo agindu multzo bateko arkitekturarako. Adibidez, x86 familiako prozesadore batean erregistro bati memoria-datuak gehitzeko instrukzio bat hau izan liteke: add eax,[ebx], Intelen jatorrizko sintaxian; hori, baina, addl (%ebx),%eax izango zen GNU mihiztatzaileak erabiltzen duen AT&T sintaxian. Itxura desberdinak izan arren, forma sintaktikoek zenbakizko makina-kode bera sortzen dute. Mihiztatzaile berak modu desberdinak izan ditzake forma sintaktikoen aldaketak eta interpretazio semantiko zehatzak eskaini ahal izateko (adibidez, FASMsyntax, TASMsyntax, modu ideala, etab., x86 mhiztatze-programazioaren kasu berezian) .

Ziklo kopurua[aldatu | aldatu iturburu kodea]

Bi mihiztatzaile mota daude, iturburu-kodea begiratzeko beharrezko diren aldi kopurua oinarri dutenak (zenbat aldiz irakurtzen duen mihiztatzaileak iturria) objektu-kodearen artxiboa sortzeko.

  • Urrats bakarreko mihiztatzaileek iturburu-kodea behin bakarrik prozesatzen dute. Definitu aurretik erabilitako ikurren kasuan, mihiztatzaileak "Errata" emango du definizioaren ondoren, eta artean definitu gabeko ikurrak non erabili diren esango dio linkerrari edo kargagailuari.
  • Urrats anitzeko mihiztatzaileek taula bat sortzen dute lehenengo irakurraldian, sinbolo guztiak eta haien balioak dituena, eta, ondoren, taula erabiltzen dute kodea sortzeko.

Bi kasuetan, mihiztatzaileak hasierako urratsetan agindu bakoitzaren tamaina zehaztu behar du, ondorengo sinboloen helbideak kalkulatzeko. Horrek esan nahi du, baldin eta ondoren zehaztutako eragigai bati dagokion eragiketa baten tamaina eragigaiaren motaren edo distantziaren araberakoa bada, mihiztatzaileak zenbatespen ezkorra egingo duela lehenengo eragiketarekin dagoenean, eta, beharrezkoa bada, bat edo gehiagorekin lotuko duela. "eragiketarik gabeko" jarraibideak, atzeko pasabide batean edo akatsetan. Peephole optimizazioa duen mihiztatzaile batean, helbideak birkalkula daitezke paseen artean, kode ezkorra helburuaren distantzia zehatzera egokitutako kode batekin ordezteko.

Urrats bateko mihiztatzaileak erabiltzeko arrazoi nagusia memoriaren tamaina eta mihiztatze-abiadura izan ziren sarritan, bigarren urrats batek eskatzen du sinboloen taula memorian gordetzea (zuzeneko erreferentziak erabiltzeko), iturburu-programaren zinta atzera errebobinatu eta irakurtzea, edo paper zulatuko txartel- edo zinta-estalki bat berriz irakurtzea. Memoria askoz handiagoak zituzten atzeko ordenagailuek (bereziki diskoen biltegiratzeak), irakurketa hori gabe beharrezko prozesamendu guztia egiteko lekua zuten. Mihiztatzaile multipasoaren abantaila da erratarik ez izateak lotura-prozesua (edo programaren karga, mihiztatzaileak zuzenean kode exekutagarria sortzen badu) azkarragoa izatea eragiten duela.

Adibidea: hurrengo kode-zatian, urrats bateko mihiztatzaile batek S2 aginduko mihiztatzean BKWD atzeko erreferentziaren norabidea zehaztu lezake, baina ezin izango luke FWD aurreko erreferentziaren helbidea zehaztu S1 adarraren deklarazioa mihiztatzean; izan ere, FWD mugagabea izan daiteke. Bi pasadako mihiztatzaile batek bi helbideak 1. pasean zehaztuko lituzke; eta beraz, 2. pasadan kodea sortzean ezagunak lirateke.

S1 B FWD
...
FWD EQU *
...
BKWD EQU *
...
S2 B BKWD

Goi-mailako mihiztatzaileak[aldatu | aldatu iturburu kodea]

Goi-mailako mihiztatzaile sofistikatuenek lengoaia-abstrakzioak eskaintzen dituzte, hala nola:

Erreferentziak[aldatu | aldatu iturburu kodea]

«Mihiztadura-lengoaia - ZT Hiztegi Berria» zthiztegia.elhuyar.eus (Noiz kontsultatua: 2023-12-09)

«Introduction to Assembly Language» (en anglè www.swansontec.com.s). [Consulta: 14 maig 2017]

https://www.davidsalomon.name/assem.advertis/asl.pdf

  1. «Mihiztadura-lengoaia - ZT Hiztegi Berria» zthiztegia.elhuyar.eus (Noiz kontsultatua: 2023-12-09).
  2. Fundazioa, Elhuyar. «ensamblador» Elhuyar Hiztegia (Noiz kontsultatua: 2023-12-09).
  3. Introduction to Assembly Language. www.swansontec.com.
  4. Verle, Milan. 5.1 Elements of Assembly Language | Architecture and programming of 8051 MCUs. learn.mikroe.com.
  5. (Ingelesez) «4.4: Machine Code for the Addi Instruction» Engineering LibreTexts 2020-06-26 (Noiz kontsultatua: 2024-01-04).
  6. Salomon, David (February 1993) [1992]. Written at California State University, Northridge, California, US. Chivers, Ian D. (ed.). Assemblers and Loaders (PDF). Ellis Horwood Series In Computers And Their Applications (1 ed.). Chicester, West Sussex, UK: Ellis Horwood Limited / Simon & Schuster International Group. pp. 7, 237–238. ISBN 0-13-052564-2. Archived (PDF) from the original on 2020-03-23. (Noiz kontsultatua: 2023-12-22)