Typy assemblerov

Prečo existujú rozličné assemblery?
O assembleroch som už napísal prakticky všetko. Takže len zhrniem, prečo je nutné aby existovalo veľa typov assemblerov. Assemblery sú totiž závislé od:

- architektúry procesora   

 

- operačného systému     

 

Okrem toho vznikajú často pre ten istý procesor rôzne distribúcie assemblerov. Odlišujú sa syntaxou, prípadne bežia pod rôznymi operačnými systémami. Najpopulárnejšia distribúcia sa väčšinou stáva aj oficiálnym assemblerom pre daný procesor a operačný systém.
Architektúry procesorov
Pod architektúrou procesora rozumieme základné usporiadanie jednotlivých funkčných častí procesora z hľadiska ich vzájomného vzťahu a úloh, ktoré plnia. Uvádzam konkrétne assemblery pre architektúry:

- Intel x86

- AMD x86-64

- Motorola 6800

- MOS Technology 6502

- z/Architecture

Obr.1 Prehľad rôznorodosti assemblerov pre rôzne architektúry

X86 assemblery

Do X86 architektúry zaraďujeme procesory od Intel 8008 cez Pentium 4, Intel Core, AMD Athlon 64, Opteron atď... Do tejto architektúry patrí väčšina najpoužívanejších procesorov súčasnosti a preto sa assemblermi tejto architektúry budem zaoberať podrobnejšie.

Obr.2 Assemblery x86 rodiny procesorov
2 syntaxe x86 assemblerov
Pre x86 JSA, ktoré prekladajú x86 assemblery existujú 2 rôzne syntaxe. Prvou je Intel syntax, ktorá sa používa vo Windowse. V minulosti sa pre Unix/Linux operačné systémy používala AT&T syntax. V súčasnosti sa ale pod Unixom používa aj Intelovská syntax.

Spomeniem len základné rozdiely v syntaxi:

» V AT&T sa píše najprv zdroj a potom cieľ, v Intelovskej naopak

» Hodnoty majú prefix $ a registre %

» Rozdielny zápis adresovania

» movl mem_location(%ebx,%ecx,4), %eax pre AT&T syntax

» mov eax, dword [ebx + ecx*4 + mem_location] pre Intel syntax

Najpopulárnejšie distribúcie X86 assemblerov

GAS (GNU assembler)

- využíva AT&T syntax

- je vytvorený pre Unix operačné systémy

- cross-assembler, beží na rôznych architektúrach CPU

- je back-end pre GNU kompilátory (Kód napísaný vo VPJ, sa prevedie najprv do symbolického kódu, potom ho GAS preloží do strojového kódu)

 

MASM (Macro assembler)

- využíva Intel syntax

- vyvinul ho Microsoft

- silná podpora makier

- Microsoft ho používa na písanie najnižších súčastí MS Windows

- vyvíjaný od 1980

- kombatibilný pre všetky Intel procesory

- neprenosný na iný OS

 

FASM (Flat assembler)

- open source Intel assembler, Intel syntax

- podporuje IA32 a X86-64 architektúry

- podpora makier

- beží pod DOS, Windows, Unixové OS (Linux, OpenBSD, atď.), MenuetOS, OctaOS, DexOS, SkyOS, Solar_OS

- bol využitý k napísaniu OS ako MenuetOS, OctaOS

 

NASM (Netwide assembler)

- používa Intel syntax

- podpora Windows aj Linux

- okrem iného podporuje 64bit X86 architektúry

- oproti MASM, viac prenositeľný

- oproti TASM, lacnejší

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