Assembler

Kategorie: Nezařazeno (celkem: 23165 referátů a seminárek)

Informace o referátu:

Příbuzná témata



Assembler

Assembler je programovací jazyk velice blízký strojovému kódu, též se nazývá jazyk symbolických adres. Název assembler se používá i pro překladač, který tento jazyk překládá do strojového kódu.

Assembler je programovací jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. Každá rodina procesorů má svůj vlastní odlišný assembler, protože ve strojovém kódu různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro assembler svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.

Společným rysem drtivé většiny assemblerů je, že kódovou jednotkou je zde jeden řádek.

Program v assembleru se skládá z

  • překladových direktiv - tyto direktivy ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Rovněž označují začátek a konec kódových sekcí.
  • instrukcí - symbolicky zapsané instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem
  • definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné
  • návěstí - návěstí umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť
  • maker - makra slouží pro nahrazení často používaných sekvencí assemblerovského kódu, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí
  • podmínkových bloků - podmínkové bloky dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem
  • definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného assemblerovského kódu


Příkladem jednoho řádku (tedy jednoho příkazu) assembleru může být následující zápis instrukce procesoru x86/i386 (např. Intel 80386):

mov  al, 61h

Která se přeloží na strojový kód:

10110000 01100001

který znamená přesun hexadecimální hodnoty 61 (97 dekadicky) do registru procesoru pojmenovaného „al“. Název instrukce „mov“ (zkratka anglického slova movepřesun) je následován seznamem parametrů. Tak vypadá typická instrukce assembleru.

Assembler zpravidla překládá zdrojový kód na několik průchodů. To je dané tím, že při prvním průchodu nejsou známé adresy a hodnoty definované za překládaným řádkem, ovšem i při dalších průchodech se mohou adresy posunout, protože délka instrukce může záviset na hodnotách adres a konstant, které byly v prvním průchodu neznámé, přičemž změnou původně předpokládané délky instrukce se mohou adresy opět posunout …

Terminologie

Anglické slovo assembler znamená sestavovatel a původně označuje pouze překladač, program, který sestavuje strojový kód. Programovací jazyk zpracovávaný takovým překladačem se v angličtině jmenuje assembly language.

Exaktní česká terminologie z tohoto vychází a jako assembler označuje pouze překladač, zatímco programovací jazyk označuje výhradně jazyk symbolických adres, kterýžto výraz popisuje základní nabízenou výhodu – odstranění nutnosti ručně přepočítávat veškeré adresy při změně programu. V praxi se ovšem toto pravidlo nepoužívá a termín assembler se zcela běžně používá pro pojmenování programovacího jazyka.

Program "Ahoj světe!"

(Napsáno pro NASM)

[org 100h]
[bits 16]
jmp START ; Nastavit pozici kurzoru.
; IN: dl = x, dh = y
curto:
xor bh,bh
mov ah,2
int 10h
ret ; Napsat barevne znaky, ale neposouvat kurzor.
; IN: al = char, bl = color, cx = count
putchar: xor bh,bh
mov ah,9
int 10h
ret ; Napsat znak a posunout kurzor
; IN: al = char
wrchar:
xor bh,bh
mov ah,0Eh
int 10h
ret ; Cist klavesu s cekanim
; OUT: al = ASCII code || 0, ah = scan code
inkey:
mov ah,0
int 16h
ret ; Napsat textovy retezec ukonceny binarni nulou.
; IN: ds:si -> null_terminated_string
writez:
l_writez1:
lodsb
or al,al
jz l_writez9
xor bh,bh
mov ah,0Eh
int 10h
jmp l_writez1
l_writez9:
ret msg1: db "Ahoj svete!", 13,10, 0 START:
push cs
pop ds
mov si,msg1
call writez END:
mov ax,4C00h
int 21h

Překladače assembleru

Existuje velké množství překladačů assembleru, pro x86 například:

pro jiné architektury:

  • AX166 – překladač firmy Amit pro procesory vycházející z 80C166


Programovací jazyky

ABAP | Ada | AppleScript | AWK | Assembler | C | C++ | C# | COBOL | ColdFusion | Clean | D | Eiffel | Erlang | Flex | Fortran | JADE | Java | JavaScript | Lisp | Lua | Oberon | Object Pascal | Objective-C | Pascal | Pawn | Perl | PHP | Python | REALbasic | REBOL | RPG | Ruby | SQL / PL/SQL | Tcl / Tcl/Tk | Visual Basic / VBScript | VB.NET | Visual FoxPro

Akademické: APL / J | Baltazar | Baltík | Karel | OCaml | Haskell | Scheme | Smalltalk | Logo | MATLAB | Mathematica | ML | Prolog

Ostatní: ALGOL | BASIC | Clipper | Forth | Goedel | Limbo | Miranda | Modula-2 / Modula-3 | MUMPS | PL/1 | Simula 67 | Brainfuck



Nový příspěvek


Ochrana proti spamu. Kolik je 2x4?



Na-mobil.cz

Spřátelené weby

Přidat stránku k oblíbeným

Nejnovější v diskusi

Diskusní fórum »

TIP: Chcete zkrátit dlouho chvíli sobě nebo blízkému?
Klikněte na Puzzle-prodej.cz a vyberte si z 5000 motivů skladem!
TIP: Hračky a hry za dobré ceny?
Klikněte na Hračky obchod.cz a vyberte si z tisícovky hraček skladem!