Asembla lingvo

El Vikipedio, la libera enciklopedio
(Alidirektita el Asembla Komputillingvo)
Jump to navigation Jump to search

Asembla komputillingvo estas skribosistemo por la maŝina lingvo, kiun uzas specifa komputila arkitekturo, legebla de homoj. Maŝina lingvo, nura sinsekvo de bitoj, estas legebligita anstataŭigante la numerajn valorojn per vico da ordonsimboloj kaj valoroj (tial en Esperanto oni ankaŭ uzas la nomon simbola maŝinkodo).

Malkiel en altnivelaj lingvoj ebliĝas 1-al-1-traduko de asembla kodo kaj maŝinkodo, do komputiloj povas traduki en ambaŭ direktoj sen perdi informojn. Transformi asemblan en maŝinan kodon estas farita per asemblilo, la alia direkto per malasemblilo. Plej ofte vera programado estas farita en asembla lingvo uzante pli altnivelajn kapablojn de la lingvo (minimume nomojn, ofte eĉ makroojn), la 1-al-1-rilato perdiĝas.

Ĉiu procesora arkitekturo havas sian propran maŝinan lingvon, kaj tial propran asemblan lingvon. Ĉi tiuj lingvoj malsamas pro la nombro kaj speco de operacioj kiujn ili subtenas. Ili ankaŭ povas havi malsamajn grandecojn kaj nombrojn de reĝistroj, kaj malsamajn reprezentmanierojn de datumtipoj en memoro. Kvankam ĉiuj ĝeneralcelaj komputiloj kapablas fari escene la samajn aferojn, la maniero malsamas.

Aldone, multoblaj aroj de mnemonikaj simboloj aŭ asembla sintakso povas ekzisti por unuopa instrukciaro. En ĉi tiuj kazoj, la plej populara estas kutime tio uzata en la dokumentaro de la fabrikanto.

Maŝinaj instrukcioj[redakti | redakti fonton]

Similaj bazaj operacioj estas uzeblaj en preskaŭ ĉiuj instrukciaroj.

  • kopii / movi
    • kopii datumon el reĝistro al alia reĝistro
    • kopii datumon el memora loko al reĝistro aŭ inverse
  • komputi
    • aldoni, subtrahi, (parte eĉ multipliki aŭ dividi) valorojn en du reĝistroj, metante la rezulton en reĝistron
    • perbite kombini du reĝistrajn valorojn per logika "kaj" aŭ logika "aŭ" aŭ logika "malinkluziva aŭ"
  • kompari kaj utiligi kondiĉojn
  • regi fluon de programo
    • salti al alia loko en la programo (kutime instrukcioj estas traktataj sinsekve)
    • salti al alia loko, sed konservi la pozicion de la sekva instrukcio kiel revenlokon
    • reiri al la lasta revenloko
    • kondiĉe salti

Specifaj instrukciaroj ofte havas unuopajn aŭ malmultajn instrukciojn por oftaj komplikaj operacioj (porj kiuj normale necesus multaj unuopaj instrukcioj), ekzemple:

  • movi grandajn memorblokojn
  • alta aritmetiko (sinuso, kosinuso, kvadrata radiko, ktp.)
  • alta logiko (CRC32 aŭ eĉ kriptografio)
  • apliki unu operacion (ekzemple aldonadon) al aro de valoroj

La nomoj de la instrukcioj varias laŭ la asembla lingvo por diversaj procesoroj. Ankaŭ por la sama procesoro povas ekzisti pluraj malsimilaj variantoj de asembla lingvo. Tamen estas nomoj de instrukcioj, kiuj estas ofte la samaj en diversaj asemblaj lingvoj.

Kelkaj ĉefaj maŝinaj instrukcioj x86[redakti | redakti fonton]

Ekzemploj validas por procesoroj Intel x86 kaj similaj.

Instrukcio Signifo
nop instrukcio, kiu nenion faras
jmp senkondiĉa trairo
mov kopiado
cmp komparo
and laŭbita logika KAJ
sub subtraho
dec malpligrandigo je 1
inc pligrandigo je 1
add adicio
mul multipliko
div divido
xor laŭbita logika malinkluziva AŬ
or laŭbita logika AŬ
not laŭbita logika NE
ret reveno el subrutino

La instrukcio mov havas du argumentojn kaj estas skribita en la formo mov a, b. La direkto de kopiado de la datumoj dependas de la konkreta varianto de asembla lingvo. Povas esti aŭ de a al b aŭ inverse.

Kalkulaj instrukcioj kutime havas du argumentojn. Ekzemple adicio aldonas unu el la argumentoj al la alia. Same kiel pri kopiado, kien estas skribita la rezulto dependas de la konkreta varianto de asembla lingvo. Do add a, b povas signifi, ke la valoro a+b estas konservita en a aŭ en b.

Ordonoj de asembla lingvo[redakti | redakti fonton]

Aldone al kodoj por maŝinaj instrukcioj, asemblaj lingvoj havas kromajn ordonojn por asembli datumblokojn kaj doni adreslokojn al instrukcioj aŭ kodo.

Ili kutime havas simplan simbolan kapablon por difini valorojn kiel simbolajn esprimojn, kiuj estas evaluitaj je asembla tempo, ebligante verki kodon kiu estas pli facile legi kaj kompreni.

Ili ankaŭ kutime havas makroan lingvon por plifaciligi la kreon de komplikaj pecoj de kodo aŭ datumoj.

Uzo de asembla lingvo[redakti | redakti fonton]

Estas iom da polemiko pri la utileco de asembla lingvo. En multaj kazoj, modernaj tradukiloj povas transformi kodon de altnivelaj lingvoj en maŝinan kodon kiu funkcias preskaŭ same rapide kiel mane verkita kodo en asembla lingvo. Sed pli frue asembla lingvo estis pli malpli devo por kreado de utilaj programoj, tradukiloj de altnivelaj lingvoj aŭ ne ekzistis aŭ ties rezulta kodo estis nepraktike larĝa kaj ruliĝis tro lante.

Tamen, kelkaj kalkuloj povas ankoraŭ hodiaŭ esti transformitaj en pli rapidan kodon per asemblilo, kaj kelkaj malaltnivelaĵoj estas pli facile fareblaj en asembla lingvo. Sistemdependaj taskoj faritaj de operaciumoj simple ne povas esti esprimitaj en altnivelaj lingvoj. Multaj tradukiloj transformas kodon de altnivelaj lingvoj en asemblan lingvon antaŭ ol plene traduki, do la asembla kodo povas esti vidita por sencimigaj kaj optimumigaj celoj.

Eksteraj ligiloj[redakti | redakti fonton]