Závislosť od procesora
Rozdiely medzi architektúrami procesorov
Assemblery pracujú priamo s procesormi. Majú prístup k inštrukčnej sade, registrom ale aj pamäti.
Pre každú rodinu procesorov sú tieto atribúty odlišné. Zhrniem základné rozdiely medzi procesormi:
- rôzny počet registrov
- rôzna funkcionalita registrov
- rôzna veľkosť registrov (8bit, 16bit, 32 bit, 64bit)
- rôzne oprávnenia prístupu k registrom
- rôzne inštrukčné sady
- rôzne veľkosti inštrukcií
- rôzne módy vykonávania inštrukcií
- rôzna ortogonalita inštrukčnej sady
Rôzne procesory - rôzne assemblery
Keď vidíme, v koľkých atribútoch sa procesory medzi sebou líšia, je logické, že pre každú
architektúru procesorov musí existovať špeciálny assembler. Práve stým súvisí aj najväčší problém
JSA a tým je prenosnosť programov medzi rôznymi architektúrami procesorov. Nestačí totiž len prekompilovať
zdrojový kód assemblerom príslušného procesoru. Ten assembler nebude poznať množstvo inštrukcií, ktoré assembler
na pôvodnom procesore poznal. Assembler nebude poznať niektoré registre, ktoré assembler na pôvodnom procesore poznal.
A takto by sme mohli vymenuvávať problémy kompatibility donekonečna.
Jeden procesor - rôzne assemblery
Dokonca sa stretávame aj stým, že pre 1 typ procesorov existuje množstvo rôznych distribúcií assemblerov.
Odlišujú sa v syntaxi, prípadne bežia pod iným operačným systémom.
Obr.1 Zoznam assemblerov pre rôzne architektúry procesorov
Syntaktické rozdiely assemblerov
Je nemožné aby som vymenoval všetky syntaktické rozdiely medzi assemblermi rôznych architektúr procesorov.
Preto len zľahka načrtnem situáciu nasledujúcim obrázkom, ktorý porovnáva syntax, ktorú podporujú assemblery
procesorov Zilong Z80 a Intelovské i8008, i8080, i8086. Vidíme, že aj napriek tomu, že všetky procesory vykonávajú
niekedy tie isté inštrukcie, ich zápisy sú rôzne a tým pádom sú rôzne aj assemblery, ktoré ich prekladajú.
Obr.2 Syntaktické rozdiely medzi assemblermi rôznych architektúr procesorov