Nahoru
 

Cesta překládání programu do nul a jedniček

Ať už jste programátor nebo ne, určitě pro vás není těžké pochopit zápisy, jako „c = a + b“. Přesně takto vypadá velmi základní příkaz ve vyšších programovacích jazycích, jako např. C, C++, C#, Java a spoustu dalších. Víme však, že počítač užívá pouze jedničky a nuly. Jak se tedy z výrazu „c = a + b“ dostaneme do jedniček a nul?

Cesta to není jednoduchá a vyžaduje složitou kompilaci. Dostaneme se hned přes několik vrstev kódů, o kterých někteří programátoři ani neví. Pokusím se je co nejnázorněji ukázat a vzdáleně vysvětlit, co vše muselo být vyvinuto a s čím si již nemusíme lámat hlavy.

V dnešní době se programy tvoří nejčastěji ve formě „vyššího programovacího jazyka“. Je to jazyk, který mohou lidé srozumitelně číst. Ten následně přeložíme do jazyka symbolických instrukcí neboli Assembleru. Assembler už přehlednost značně ztěžuje, avšak vyvíjet na něm není nemožné. Jazyk symbolických instrukcí přeložíme do čistých jedniček a nul, jež ovládají procesor pomocí řadiče. No a výsledkem jsou elektrické signály, které si těžko dokážeme představit.

Vyšší programovací jazyk -> Assembler -> Jedničky a nuly -> Řídící signály
Obrázek č. 1: Jednotlivé vrstvy překladu

Vyšší programovací jazyk

Jestliže se podíváme na základy nějakého vyššího programovacího jazyka, tak ty jsou pochopitelné téměř pro každého. Určitě vás nepřekvapí, že kód

 int a = 10;
int b = 20;
int c = a + b;

nemusí být nutně srozumitelný na 100 % (např. klíčové slovo „int“ spoustu lidí nezná), avšak vydedukujeme, že proměnná „c“ bude obsahovat součet 10 + 20.

U vyšších programovacích jazyků je nutno podotknout, že ať jej napíšeme na jakémkoliv stroji, jeho interpretace se nezmění. To u nižších vrstev bohužel neplatí.

S jedničkami a nulami však tento zápis nic společného nemá. Proto byly vytvořeny tzv. „kompilátory“, jež dokáží krásně srozumitelný kód přeložit do jazyka symbolických instrukcí, který nazýváme „Assembler“. Assembler už tak „krásný“ není.

Jazyk symbolických instrukcí (Assembler)

Jestliže jste si prohlédli úryvek kódu výše a řekli si, že je to opravdu intuitivní, u jazyka symbolických instrukcí vás tento pocit bohužel nečeká. Jak bychom přeložili součet dvou proměnných?

 ldi r16, 10
ldi r17, 20
ldi r18, 0
add r18, r16
add r18, r17

Nic moc, že ano? Naneštěstí, tento kód platí pouze pro některé procesory, jelikož každá výpočetní jednotka má svou unikátní sadu příkazů. O to se ve vyšších programovacích jazycích nemusíme starat, díky bohu.

Vidíte také, že místo dvou řádků máme nyní pět. Proto vůbec vyšší jazyky vznikly. Assembler znamená spoustu redundantního kódu navíc. Ten nás stojí čas a tím pádem i peníze.

Dobrá zpráva je, že hned za assemblerem máme slibované jedničky a nuly.

Jedničky, nuly a řídící signály

Konečně jsme dosáhli zápisu v jedničkách a nulách. Co s nimi? Nahrajeme je do paměti a spustíme. Co se bude dít? Řadič procesoru si je vytáhne z paměti a rozhodne, co s tím.

Náš kus kódu, zkompilovaný jako kompletní program, by v binární podobě mohl vypadat asi takto:

 :0000 0010 0000 0000 0000 0000 0000 0010 0000 0000 0000 0000 1111 1100
:0000 1010 0000 0000 0000 0000 0000 0000 0000 1010 1110 0000 0001 0100 1110 0001 0010 0000 1110 0000 0010 0000 0000 1111 0010 0001 0000 1111 1011 1000
:0000 0000 0000 0000 0000 0000 0000 0001 1111 1111

Dle mého názoru naprosto nevyhovující pro vyvíjení větších aplikací.

Nyní nám z jedniček a nul vznikají řídící signály, jež rozhodují, co a kde provádět. Můžou například využít jednotku pro součet, pro bitový posun, uložit něco do paměti nebo sepnout připojené výstupy. Na této úrovni se již bavíme čistě abstraktně, jelikož elektrické signály si lze jen velmi obtížně představit.


Cesta od „normálního“ zápisu programu do skutečného provedení není krátká. Díky kolegům programátorům se však nemusíme starat o velkou spoustu věcí. Díky kompilátorům nás nezajímá, na jakém procesoru vlastně děláme nebo o to, zda budeme data ukládat v této či oné paměti. Programováním ve vyšších jazycích šetříme spoustu času a tím pádem i peněz. Umožňuje nám to vyvíjet technologie kupředu daleko rychleji.