Lankide:Mlulu8/Proba orria

Wikipedia, Entziklopedia askea

Historia[aldatu | aldatu iturburu kodea]

Mihiztadura-lengoaiaren kode baten lehen bertsioa 1947ko Coding for A.R.C. obran dago, Kathleen Booth eta Andrew Donald Booth bikote matematikariak sortua.[1]

Mihiztadura-lengoaiak, bigarren belaunaldiko lengoaiatzat hartzen direnak, 1950eko hamarkadan sortu ziren. Lehen belaunaldiko lengoaiekin konparatuta zuten erraztasuna begi-bistakoa zen. Ez zen gauza bera gogoratzea 10110000 01100001 (makina-lengoaiaz) eta MOV AL, 0x61 (mihiztadura-lengoaia).[2]

Hasieran, mihiztadura-lengoaiatik makina-lengoaiarako itzulpena eskuz egin behar zen, baina laster agertu ziren itzulpen-programak (neurri batean, itzultzea oso mekanikoa eta erraza zelako). Aurrerago, lengoaia bi horietan programatzea eia guztiz baztertuta geratu zen hirugarren belaunaldiko lengoaiak ageri zirelako, programen konplexutasuna eta makinaren arkitekturaren menpekotasuna murrizten baitzuten.

Eragozpen nagusiak hauek ziren:

  • Programa zenbat eta handiagoa izan, orduan eta handiagoa da konplexutasuna.
  • Prozesadorearen arkitekturaren mende dago.

Haren abantaila nagusia egikaritze-eraginkortasuna da.

Mihiztadura-lengoaiak 1950ean garatu ziren lehen aldiz, bigarren belaunaldiko programazio-lengoaia gisa aipatu zirenean. Adibidez, SOAP (Symbolic Optimal Assembly program) 1957ko IBM 650 konputagailuaren mihiztadura-lengoaia zen.[3] Mihiztadura-lengoaiek asko murriztu zituzten huts egiteko joera eta lehen belaunaldiko lengoaiekin programatzeko denbora, lehen ordenagailuekin behar baitzen, eta programatzaileak zenbaki-kodeen eta helbide-kalkuluen aspergarrietatik askatu zituzten. Denbora batez asko erabili ziren mota guztietako programazioetarako. Hala ere, 1980ko hamarkadan (1990koan mikrokonputagailuen kasuan), goi mailako lengoaiek ordeztu zituzten, programazioan produktibitate hobea lortzen baitzen.

Gaur egun, mihiztadura-lengoaiak nagusiki programa konpiladoreek kudeatzen eta sortzen dituzten arren, oraindik erabiltzen dira hardwarea zuzenean manipulatu behar denean, prozesadorearen agindu espezializatuetarako sarbidea emateko edo jarduera kritikoko arazoak konpontzeko. Ohiko erabilerak gailu, maila txikiko sistema txertatu eta denbora errealeko sistemetako kontroladoreak eta driverrak dira.

Historikoki, programa asko idatzi dira mihiztadura-lengoaiaz. Sistema eragileak mihiztadura-lengoaiaz soilik idatzi ziren, 1970ean eta 1980aren hasieran C programazio-lengoaia guztiz onartua izan zen arte. Gainera, aplikazio komertzial asko mihiztadura-lengoaiaz idatzi ziren, IBMren mainframe-etarako korporazio handiek idatzitako software kopuru handi bat barne.[3] COBOL eta FORTRAN lengoaiek lan haietako asko berenganatu zituzten aldi baterako, nahiz eta mihiztadura-lengoaiazko aplikazioak garatzeko azpiegiturak erakunde handi askok mantendu zituzten 90eko hamarkadako bukaera arte

Lehen mikrokonputagailu gehienetan eskuz egindako mihiztadura-lengoaiatan oinarritu ziren, sistema eragile eta aplikazio nagusi gehienak barne. Izan ere, sistema horiek baliabide-muga larriak zituzten, memoria- eta pantaila-arkitektura idiosinkrasikoak ezarri zituzten, eta sistema-zerbitzu mugatuak eta erroredunak eman zituzten. Hala ere, garaia hartan mikroordenagailu batean ez zegoen goi-mailako lengoaiazko lehen klaseko konpiladore egokirik. Faktore psikologiko batek ere zeregin garrantzitsua izan zezakeen: mikroordenagailuetako programatzaileen lehen belaunaldikoak ez ziren profesionalak, zaletuak baino ez ziren.

Testuinguru askoz komertzialago batean, mihiztadura-lengoaiak erabiltzeko arrazoi nagusiak hauek ziren: neurri eta gainkarga minimoetako programak sortzea, eta abiadura eta fidagarritasun handiagoa lortzea.

Mihiztadura lengoaia antzinan

Mihiztadura-lengoaiazko programa handien ohiko adibideak IBM PC DOS sistema eragileak eta beren lehen aplikazioak dira, hala nola Lotus 1-2-3 kalkulu-orria, eta konputagailu pertsonaletako Atari 800 familiako ia joko guztiak. 1990ean ere, kontsolako bideo-joko gehienak mihiztadura-lengoaiaz idatzi ziren, Megra Drive/Genesis eta Super Nintendo Entertainment System-erako joko gehienak barne. Industriako zenbait adituren arabera, mihiztadurakoa zen programazio-lengoaia onena Sega Saturn-en jarduera hobea lortzeko. Kontsola horretarako, jokoak garatu eta programatu behar ziren. NBA Jam arkade-joko ezaguna (1993) beste adibide bat da. Mihiztatzailea Commodore 64, Atari ST eta ZX Spectrum ordenagailuetako garapen primarioko lengoaia izan da luzaroan. Hori horrela izan zen, hein handi batean, sistema horietako BASICeko dialektoek exekuzio-abiadura eskasa eskaintzen zutelako, bai eta hardware erabilgarria erabat aprobetxatzeko ezaugarriak ere. Sistema batzuek, are nabarmenago Amigak, arazketa-ezaugarriak dituzten IDEak ere badituzte, eta makro oso aurreratuak, hala nola freeware ASM-One mihiztatzailea, Microsoft Visual Studiokoekin aldera daitezkeenak (ASM-Uno aurrekoa da).

VIC-20rako mihiztatzailea Don French-ek idatzi eta French Silv-ek argitaratu zuten. 1639 byteko luzera zuen, eta inoizko txikiena zela uste zuen egileak. Mihiztatzaileak ohiko helbideratze sinbolikoa eta karaktere edo kate hamaseitarren kateak definitzea onartzen zituen. Halaber, helbide-adierazpideak onartzen zituen, eta konbinatu zitezkeen zenbait eragiketekin: adizioa, kenketa, biderketa, AND logikoa, ORO logikoa eta esponentziaketa ere.

Terminologia[aldatu | aldatu iturburu kodea]

Atal honetan mihiztadura-lengoaiekin lotuta dauden zenbait termino azaltzen dira:

  • Makromihiztatzaile bat makroinstrukzioak erabiltzeko aukera ematen duen mihiztatzaile bat da, non mihiztadura-lengoaiazko testua izen baten bidez adieraz daitekeen, eta izen hori erabil daiteke gero testu hedatua beste kode batean txertatzeko.
  • "Kode irekia", mihiztadura-lengoaiazko programa baten barruan, makro baten definiziotik kanpo dagoen zatiari dagokio.
  • Zeharkako mihiztatzaile baten kasuan (ingelesez: cross assembler; ikus, halaber, zeharkako konpiladore, edo cross compiler), ordenagailu edo sistema eragile desberdinetan egiten dira batetik programa mihiztatzailearen exekuzioa makina-lengoaiazko kodea lortzeko (ostalari-sistema) eta bestetik makina-lengoaiazko objektu-programaren exekuzioa. Zeharkako mihiztatzeak software-garapena erraztu egiten du baliabiderik ez duten sistemetan, hala nola, sistema txertatuetan eta mikrokontrolagailuetan. Kasu horretan, lortutako objektu-kodea sistema hartzailera transferitu behar da, memoria baten bidez (ROM, EPROM, etab.), programagailu baten bidez (memoria gailuan bertan integratuta dagoenean, mikrokontrolagailuetan bezala), edo objektuaren kodearen bit-by-bit kopia zehatza erabiltzen duen datu-lotura baten bidez, edo kode horren testu-errepresentazio baten bidez (Intel hex edo Motorola S-record gertatzen den bezala).
  • Goi-mailako mihiztatzaile bat gehienetan goi-mailako lengoaiekin lotuta dauden abstrakzioak erabiltzeko aukera ematen duen programa da, hala nola kontrol-egiturak (IF/THEN/ELSE, DO CASE, etab.) eta goi-mailako zenbait datu mota abstraktuak: egiturak/erregistroak, batuketak, klaseak eta multzoak barne.[4]
  • Mikromihiztatzaile bat programa bat da, firmware izeneko mikroprograma bat prestatzen laguntzen duena, ordenagailu baten behe-mailako funtzionamendua kontrolatzeko.
  • Meta-mihiztatzaile bat "mihiztadura-lengoaia baten deskribapen sintaktikoa eta semantikoa onartzen duen eta horrekin lengoaia horretarako mihiztatzaile bat sortzen duen programa" da,[5] [6] edo mihiztadura- lengoaiazko iturburu-fitxategi bat onartzen du deskribapen sintaktiko-semantiko horrekin batera, eta deskribapen horren arabera muntatzen du iturburu-fitxategia azkenean makina-lengoaiazko objektu programa lortzeko. SDS 9 serieko[7] eta SDS Sigma-serieko[8] konputagailuetarako "Metad-Symbol" mihiztatzaileak meta-mihiztatzaileak dira.[9] Sperry Univac-ek[10] ere UNIVAC 1100/2200 serierako meta-mihiztatzaile[11] bat eman zuen.
  • Lineako mihiztatzaile bat (inline mihiztatzaile edo mihiztatzaile txertatu, ere bai) mihiztatze-kode bat da, goi-mailako hizkuntza-programa batean txertatuta dagoena. Horrelakoak hardwarerako zuzeneko sarbidea behar duten sistema-programetan erabiltzen dira gehienetan.

Mihiztatzeko lengoaia[aldatu | aldatu iturburu kodea]

Mihiztadura-lengoaiaz idatzitako programa batean prozesadore-aginduei dagozkien hainbat mnemoniko eta meta-agindu agertzen dira (eragiketak, zuzentarauak (directives), sasi-aginduak, eta sasi-eragiketak), iruzkinak eta datuak. Mihiztatadura-lengoaietan agertzen diren aginduak, oro har, opcode mnemonic bat (agindu baten kodea) eta eragigai bat izaten dira. Eragigaia zenbait datu, argumentu edo parametro dituen zerrenda bat izan daiteke.[12] Agindu batzuetan "inplizitu" egon daitezke eragigaiak; instrukzio horrek ez du eskatzen eragigairik. Programa mihiztatzaileak agindu horietako bakoitza memorian kargatu eta exekutatu daitekeen makina-lengoaiako agindu bihurtzen du .[12]

Adibidez, ondoko instrukzioak x86/IA-32 prozesadore bati adierazten dio, erregistro batean 8 biteko balio zehatz bat jartzeko. Instrukzio honetarako kode bitarra 10110 da, eta ondoren 3 biteko identifikadore bat, zein erregistrotan erabili behar den zehazten duena. AL erregistroaren identifikatzailea 000 denez, makina-lengoaiazko agindu honek AL erregistroan 01100001 datua jarriko du:

10110000 01100001

Kode informatiko bitar hori irakurgarriagoa izan daiteke gizakiaontzat zenbaki -sistema hamaseitarrez adierazita, honela:

B0 61

Hor, B0 esan nahi du "Jarri AL erregistroan honako balio hau", eta 61 da 01100001 balioaren errepresentazio hexadezimala (0110: 6; eta 0001: 1). Kontuz, gizakiontzat ohikoa den sistema hamartarrean 01100001 zenbaki bitar hori ez da 61, guretzat 97 zenbakia da.

8086 familiako mihiztadura-lengoaiatan, adibidez, MOV Mnemonikoa ("Mugitu"-ren laburpena) finkatzen du agindu mota horretarako, beraz, goiko makina-kodea honela idatz daiteke mihiztadura-lengoaian, azalpen-ohar batekin osatuta, 'puntu eta koma' karakterearen ondoren. Honela, askoz errazagoa da irakurtzea eta gogoratzea:

MOV AL, 61h       ; Load AL with 97 decimal (61 hex)

Mihiztadura-lengoaia batzuetan (honetan bezala) mnemoniko bera, MOV adibidez, datuak kargatu, kopiatu eta mugitzeko agindu-familia baterako erabil daiteke, non balioak modu desberdinetan adierazi daitezkeen: konstante bat, erregistro batean dagoen balioa, memoriako gelaxka batean dagoen balioa (atzipen zuzena), edo erregistro batean dagoen balioa memoriako helbide gisa hartuta memoriako helbide horretan dagoen balioa (zeharkako atzipena).

Beste mihiztatzaile batzuek opcode mnemonic bereziak erabiltzen dituzte, hala nola, L "balioa memoriatik erregistrora mugitzeko", ST "balioa erregistrotik memoriara mugitzeko", LR "balioa erregistrotik erregistrora mugitzeko" eta MVI "balioa eragigaitik memoriara mugitzeko" eta abar. Mnemonikoa beste agindu batzuetarako erabiltzen bada, horrek esan nahi du mnemonikoa hainbat agindu bitarren kode desberdinekin bat datorrela, datuak kenduta (adibidez, 61hlehengo adibidean), mnemonikoari jarraitzen dioten eragigaien arabera. Adibidez, x86/IA-32 konputagailuentzat, Intel-en mihiztadura-lengoaiaren sintaxiaren arabera MOV AL, AH aginduak esan nahi du AH erregistroaren edukia AL erregistrora kopiatu behar dela. Aginduaren forma hexadezimala hau da:

88 E0

Lehen byteak, 88h, identifikatzen du mugimendu bat byte-tamainako erregistro baten eta beste erregistro edo memoriaren artean. Bigarren byteak E0h kodetzen du (hiru bit-eremuekin) bi eragigaiak erregistroak direla, balioaren iturria AH erregistroa dela eta helmuga AL dela.

Halako kasu batean, mnemoniko berak agindu bitar bat baino gehiago irudikatu ditzakeenean, eragigaiak aztertuta erabakitzen du mihiztatzaileak zein agindu sortuko duen. Lehen adibidean, 61h eragigaia balio konstante bat (zenbaki hexadezimala) da eta ez da erregistro-izen bat, beraz, B0 instrukzioa bakarrik aplikatu daiteke. Bigarren adibidean, AH eragigaia erregistro-izen bat da eta ez da konstante numeriko bat (hexadezimala, hamarrekoa, oktala edo bitarra), beraz, 88 instrukzioa bakarrik aplikatu daiteke.

Mihiztadura-lengoaiak beti diseinatuta daude anbiguotasun hori sintaxiaren bidez ulertu eta ebatsi ahal izateko. Adibidez, Intel x86 mihiztadura-lengoaian, konstante hexadezimal batek digitu-zenbaki batekin hasi behar du, horrela 'A' hexadezimala (kode hamartarrean 10 zenbakia da)0Ah edo 0AH bezala idatziko da, ez AH, eta horrela ezin izango da AH erregistroaren izenarekin nahastu. (Arau bera aplikatu daiteke BH, CH eta DH erregistroen izenak bereizteko, baita erabiltzaileak H hizkiarekin bukatzen den edozein sinbolo definitzen duenean, sinbolo horretako letrak sistema hexadezimaleko zenbakiak ere baldin badira, noski, hala nola "BEACH" sinboloa.)

Jatorrizko adibidera bueltatuz, x86-ko 10110000 (B0) eragiketa-ḱodea 8 biteko balio bat kopiatzen du AL erregistroan, 10110001 (B1) CL erregistroan kopiatzen du eta 10110010 (B2) DL erregistroan. Agindu horiekin osa daitezke mihiztadura-lengoaiazko adibide hauek:

MOV AL, 1h ; Load AL with immediate value 1 
MOV CL, 2h ; Load CL with immediate value 2 
MOV DL, 3h ; Load DL with immediate value 3

MOV aginduaren sintaxia konplexuagoa ere izan daiteke, adibide hauek erakusten dutenez.[13]

MOV EAX, [EBX]	  ; Move the 4 bytes in memory at the address contained in EBX into EAX
MOV [ESI+EAX], CL ; Move the contents of CL into the byte at address ESI+EAX
MOV DS, DX        ; Move the contents of DX into segment register DS

Kasu bakoitzean, mihiztatzaileak diferente itzultzen du MOV mnemonikoa 88-8C, 8E, A0-A3, B0-BF, C6 edo C7 eragiketa-kodearekin batera azaltzen direnean, eta programatzaileak normalean ez du zertan jakin eta gogoratu nola egin hori.[14]

Erreferentziak[aldatu | aldatu iturburu kodea]

  1. (Ingelesez) CODING FOR A.R.C.. .
  2. BIOS. 2019-12-15 (Noiz kontsultatua: 2023-12-22).
  3. a b (Gaztelaniaz) «IBM - España» www.ibm.com (Noiz kontsultatua: 2023-12-22).
  4. (Ingelesez) High-level assembler. 2021-04-18 (Noiz kontsultatua: 2024-01-05).
  5. «meta-assembler | Encyclopedia.com» www.encyclopedia.com (Noiz kontsultatua: 2023-12-18).
  6. «meta-assembler | Encyclopedia.com» web.archive.org 2020-03-24 (Noiz kontsultatua: 2023-12-18).
  7. (Ingelesez) SDS 9 Series. 2023-07-21 (Noiz kontsultatua: 2024-01-05).
  8. (Gaztelaniaz) Serie SDS Sigma. 2023-02-09 (Noiz kontsultatua: 2024-01-05).
  9. https://bitsavers.org/pdf/sds/sigma/lang/900952G_metaSymbolLangRef_Oct75.pdf
  10. (Gaztelaniaz) UNIVAC. 2023-12-14 (Noiz kontsultatua: 2024-01-05).
  11. http://www.bitsavers.org/pdf/univac/1100/asm/UP-8453_MASM_Programmers_Ref_1977.pdf
  12. a b «Wayback Machine» web.archive.org (Noiz kontsultatua: 2023-12-18).
  13. «Guide to x86 Assembly» www.cs.virginia.edu (Noiz kontsultatua: 2023-12-18).
  14. Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference (PDF). Vol. 2. Intel Corporation. 1999. Archived from the original (PDF) on 2009-06-11. Retrieved 2010-11-18.