Závislosť assembleru od operačného systému

Je jasné,že ak napíšeme kód a preložíme ho assemblerom pre napr. x86 architektúru, ťažko môžeme očakávať takú istú funkcionalitu aj na procesore s inou architektúrou. Lenže ak by sme aj prenášali kód medzi x86 procesormi v tomto prípade, ale medzi rôznymi operačnými systémami, mohli by sme mať problémy. Programy napísané v assembleri sú ťažko prenosné medzi rôznymi operačnými systémami, pretože často obsahujú pevné systémové volania – funkcie poskytované operačným systémom a tie sa každým operačným systémom menia. Existujú 2 základné dimenzie prenosnosti kódov napísanúých v SOJ medzi operačnými systémami:

1. Je možné úrčitý kód napísaný v nejakom symbolickom jazyku použiť v inom operačnom systéme?

Na túto otázku sa ľahko zodpovie podľa toho, či daný assembler beží pod daným OS. Zoznam pre x86 architektúru je v tabuľke nižšie.

2. Je možné rozbehnúť aplikáciu ktorá bola preložená v určitom assembleri v inom OS len rekompilovaním?

V súčasnosti to dokáže len HLA(high level assembler) vďaka HLA knižnici. Tento assembler je už blízky vyšším prog. jazykom ale stále dokáže pracovať priamo s inštrukciami procesora.

x86 assemblery , Linux vs Windows

Asi najznamejšou architektúrou je x86. Napriek tomu, že strojový kód pre danú architektúru je univerzálny , nájdu sa rozdiely medzi programovaním v SOJ v rôznych OS. Rozoberiem problematiku programovania v 2och najznámejších a to Windows a Linux

- Pre Linux je najobľúbenejší assembler NASM s podobnou syntaxou ako MASM, ale dosť sa používa aj univerzálny GAS s AT&T synatoxu.

- Pre Windows je najpoužívanejší assembler MASM s Intel syntaxou.

- Zoznam softvérových prerušení a ich funkcií je iný pre Linux aj Windows

- Zoznam knižníc pre programovanie je odlišný pre Linux a Windows

Ako zabezpečit prenositeľnosť medzi OS

Niekedy je možné zabezpečíť prenositeľnosť programov preložených assemblerom medzi OS na tej istej platforme. Spôsoby volania sa medzi operačnými systémami niekedy líšia len málo alebo vôbec a pri menšom úsilí je možnosť zabezpečit prenositeľnosť napríklad napojením na C knižnicu, ktorá je od OS nezávislá. Napríklad mnoho vecí v libC závisí na preprocesore, ktorý vykoná OS-špecifické a C-špecifické úpravy pred kompilácou. Niektoré funkcie a symboly ani neexistujú mimo preprocesoru. Horšie je že veľkosť polí a štruktúr ale aj definícií ako napríklad typedef off_t sú v stojovo orientovanom jazyku nedostupná bez konfiguračných súborov a odlišujú sa dokonca medzi rôznymi verziami Linuxu, za predpokladu ,že parametrami volaných funkcií je niečo iné ako jednoduché integre a ukazovateľe. FASMLIB ponúka knižnicu prenositeľnú medzi Windows a Linux, ale je stále veľmi neúplná.

Zaujímavosť na záver

V minulosti bolo programovanie v SOJ pod MSDos oveľa obľúbenejšie ako pod Unixom. Dôvod bol jednoduchý. MSDos počítače mali integrovné Intel mikroprocesory a tým pádom bol menší problém s prenosnosťou programov. Unix bežal naopak na procesoroch mnohých rôznych rodín.

Odkazy na stránky s podobným obsahom

Stanislav, Adam: What is int 80h?
http://www.int80h.org/

DOS function codes
http://spike.scu.edu.au/~barry/interrupts.html

GNU C Library
http://www.gnu.org/software/libc/

Slovník skratiek

  • JSA - jazyky symbolických adries
  • VPJ - vyššie programovacie jazyky
  • CPU - procesor
  • ISA - inštrukčná sada
  • ASM - assembler
  • OS - operačný systém

Diskusia