Asembla lingvo: Malsamoj inter versioj

[kontrolita revizio][kontrolita revizio]
Enhavo forigita Enhavo aldonita
Revizio de 19:45, 14 feb. 2016 farita de Doesle (diskuto | kontribuoj) multe pli bonis
plibonigoj
Linio 1:
'''Asembla komputillingvo''' estas skribosistemo por la maŝina lingvo, kiun uzas specifa komputila arĥitekturoarkitekturo, 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 estasebliĝ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. KiamPlej ofte vera programado estas farita en asembla lingvo uzante pli altnivelajn kapablojn de la lingvo (kielminimume nomojn, ofte eĉ makroojn), la 1-al-1-rilato perdiĝas.
 
Ĉiu komputilaprocesora arĥitekturoarkitekturo havas sian propran maŝinan lingvon, kaj tial propran asemblan lingvon (la ĉi-supra ekzemplo estas de la i386). Ĉ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. DumKvankam ĉ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.
Linio 11:
Similaj bazaj operacioj estas uzeblaj en preskaŭ ĉiuj instrukciaroj.
 
* kopii / movi
* movado
** prenikopii valorondatumon el reĝistro al alia reĝistro
** movikopii datumon el memora loko al reĝistro aŭ inverse
* komputi
* komputado
** aldoni, subtrahi, (parte eĉ multipliki aŭ dividi la) valorojn deen du reĝistroj, metante la rezulton en reĝistron
** perbite kombini du reĝistrajn valorojn per logika "kaj/" aŭ logika "aŭ" aŭ logika "malinkluziva "
* kompari kaj utiligi kondiĉojn
** nuligi reĝistran valoron aritmetike aŭ per logika ne
* efikiregi 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:
Linio 27 ⟶ 28:
* movi grandajn memorblokojn
* alta aritmetiko ([[sinuso]], [[kosinuso]], [[kvadrata radiko]], ktp.)
* alta logiko (CRC32 aŭ eĉ kriptografio)
* apliki unu operacion (ekz.ekzemple aldonadon) al aro de valoroj
 
La nomoj de la instrukcioj varias laŭ la asembla lingvo por diversaj procesoroj. Ankaŭ por la sama procesoro estaspovas 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 ==
 
Ekzemploj validas por procesoroj Intel '''x86''' kaj similaj.
 
{| border=1
| Instrukcio || Signifo
|-
| '''nop''' || operacioinstrukcio, kiu nenion faras
|-
| '''jmp''' || [[senkondiĉa trairo]]
Linio 57 ⟶ 65:
|-
| '''or''' || [[laŭbita logika AŬ]]
|-
| '''nop''' || operacio, kiu nenion faras
|-
| '''not''' || [[laŭbita logika NE]]
|-
| '''ret''' || [[reveno el funkciosubrutino]]
|}
 
La instrukcio ''mov'' kutime havas du argumentojn kaj estas skribita en la formo <code>mov a, b</code>. La direkto de kopiado de la datumoj dependas de la konkreta varianto de asembla lingvo. Povas esti aŭ de ''a'' al ''b'' aŭ inverse.
 
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 <code>add a, b</code> povas signifi, ke la valoro ''a+b'' estas konservita en ''a'' aŭ en ''b''.
Linio 81 ⟶ 85:
== Uzo de asembla lingvo ==
 
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.
Linio 87 ⟶ 91:
== Eksteraj ligiloj ==
 
{{EL}}* http://www.nasm.us/
{{EL}}* http://flatassembler.net
{{EL}}* http://c2.com/cgi/wiki?LearningAssemblyLanguage (angla) <!-- _PPR_: (Lerno, Lernante, Scienco) Asembleo Lingvo -->
 
[[Kategorio:Programlingvoj]]