Vyšlo v týdeníku Computerworld č. 49/94 v roce 1994
Vytištěno z adresy: http://www.earchiv.cz/a94/a449c120.php3

Assembly

Říkat počítači, co přesně má dělat, lze více různými způsoby a na různých úrovních: lze jej například programovat v některém vyšším programovacím jazyku procedurálního či neprocedurálního charakteru nebo na vyšší úrovni používat vhodný generátor aplikací apod.

Počítač lze ovšem programovat i na nejnižší možné úrovni, kterou je úroveň jeho strojového kódu - na této úrovni mu programátor sestavuje program přímo z jeho strojových instrukcí. Tím samozřejmě odpadá potřeba překladu neboli nahrazování obecnějších a abstraktnějších příkazů vyššího programovacího jazyka celými skupinami strojových instrukcí - to má na starosti program zvaný překladač.

Ovšem sestavit program přímo ze strojových instrukcí a předat jej počítači v takové formě, jaké rozumí a v jaké je schopen příslušný program skutečně vykonat, znamená vyjádřit jej i se všemi jeho instrukcemi a jejich operandy, (i s případnými daty) v číselné (přesněji binární) podobě. To je samozřejmě možné udělat "ručně", ale kdo to někdy zkoušel, jistě mi dá za pravdu, že tudy cesta nevede. Problém je totiž v tom, že tato činnost je sice rutinní povahy, ale pro člověka je značně náročná. Tak náročná , že při ní většinou zapomíná na to podstatné (na vlastní programování) a že se doslova utápí ve zcela mechanických činnostech, jako jsou převody z desítkového do binárního tvaru či zjišťování v tabulce, jaký číselný kód má ta která instrukce, jaký má přesný formát apod. Ještě náročnější jsou pak výpočty číselných adres, které je nutné používat jako operandy skokových instrukcí či instrukcí volání, ale které si při takovémto způsobu programování přímo ve strojovém kódu vypočítává programátor sám a "ručně".

O chybách, kterých se přitom obvykle dopoustí, raději ani nemluvíme.

Přitom je ale v zásadě možné programovat "kulturně" i na úrovni strojového kódu, tzn. takovým způsobem, při kterém je programátor v maximální možné míře zbaven všech rutinních činností a může se plně soustředit na vlastní programování. Programátorovi lze ulehčit možností zapisovat jednotlivé strojové instrukce i s jejich operandy nikoli v číselném tvaru, ale ve tvaru symbolickém a stejně tak možností označovat význačné adresy v programu symbolickými návěštími a ty pak používat všude tam, kde je potřeb a se na příslušné adresy odkázat (například pro vyjádření cílové adresy skokové instrukce apod.). Čeština si pro právě naznačenou možnost zavedla dokonce i výstižné pojmenování: příslušný jazyk označuje jako jazyk symbolických instrukcí nebo též: jazyk symbolických adres.

Právě naznačená možnost programování v jazyku symbolických instrukcí (resp. v jazyku symbolických adres) však vyžaduje, aby existoval někdo, kdo převede symbolický program do příslušného číselného tvaru. Takovýto převod přitom nebude překladem - alespoň ne v tom smyslu, jak je používán v souvislosti s vyššími programovacími jazyky, kde při překladu dochází k nahrazování jednotlivých obecnějších příkazů vyššího programovacího jazyka celými sekvencemi strojových instrukcí. V našem případě naopak dochází k transformaci stylem 1 ku 1, kdy jedna strojová instrukce, vyjádřená v symbolickém tvaru, je nahrazena svým ekvivalentem, vyjádřeným v číselném tvaru. V angličtině se takovýto postup označuje jako assembly, což v doslovném překladu znamená "sestavení". Programu, který toto sestavení zajišťuje, se pak říká assembler (a v českém kontextu obvykle s jedním "s").

Řekne-li se tedy v angličtině "assembler", je tím v užším slova smyslu míněn pouze program, který zajišťuje právě naznačené sestavení. V širším slova smyslu je ale stejným termínem označován i jazyk, který tento program přijímá a převádí do číselného tvaru - tedy to, pro co si čeština (na rozdíl od angličtiny) našla výstižné označení "jazyk symbolických instrukcí" (resp. jazyk symbolických adres). I v češtině se ale dnes používá termín "asembler" jak pro samotný sestavovací program, tak i pro příslušn ý jazyk - jinak bychom vlastně ani nemohli mít žádné učebnice programování v asembleru, žádné programy (či alespoň části programů) psané v asembleru apod.

Když už jsme se ale dostali k otázce programování v asembleru: Má něco takového v dnešní době ještě vůbec smysl - jsou-li k dispozici všechny ty překladače vyšších programovacích jazyků, které navíc dokáží dosti efektivně optimalizovat kód, který generují? Odpověď je kladná: I v dnešní době se mnohdy vyplatí napsat v asembleru některé kritické části aplikací či operačního systému - kritické co do rychlosti či nároků na paměť apod. Programování v asembleru totiž stále ještě dává programátorům nejlepší možnosti "šít programy na míru" konkrétním počítačům a specifickým potřebám, což se může s výhodou uplatnit například u nejrůznějších ovladačů, obslužných rutin přerušení apod. Zřejmě se ale již nesetkáme s tím, že by se v asembleru psaly celé aplikace - asembler jako nástroj programování je totiž mnohem méně efektivní než kterýkoli programovací jazyk vyšší úrovně.