Jazyk symbolických inštrukcií

Jazyk asembleru je programovací jazyk, ktorý sa dá použiť na priame zadanie úlohy počítaču. Jazyk assembleru sa takmer presne podobá strojovému kódu, ktorému počítač rozumie, len namiesto čísel používa slová. Počítač v skutočnosti nemôže priamo porozumieť programu v jazyku assembler. Môže však ľahko zmeniť program na strojový kód nahradením slov programu číslami, ktoré označujú. Program, ktorý to robí, sa nazýva assembler.

Programy napísané v jazyku assembleru sa zvyčajne skladajú z inštrukcií, čo sú malé úlohy, ktoré počítač vykonáva počas behu programu. Nazývajú sa inštrukcie, pretože programátor nimi dáva počítaču pokyny, čo má robiť. Časť počítača, ktorá sa riadi inštrukciami, je procesor.

Jazyk assembleru počítača je nízkoúrovňový jazyk, čo znamená, že sa dá použiť len na vykonávanie jednoduchých úloh, ktorým počítač priamo rozumie. Aby bolo možné vykonať zložitejšie úlohy, je potrebné povedať počítaču každú z jednoduchých úloh, ktoré sú súčasťou zložitej úlohy. Počítač napríklad nerozumie tomu, ako vytlačiť vetu na obrazovku. Namiesto toho mu musí program napísaný v assembleri povedať, ako má vykonať všetky malé kroky, ktoré sa podieľajú na vytlačení vety.

Takýto assembler by sa skladal z mnohých inštrukcií, ktoré spolu robia niečo, čo sa človeku zdá veľmi jednoduché a základné. Preto je pre človeka ťažké čítať program v assembleri. Naproti tomu vysokoúrovňový programovací jazyk môže mať jedinú inštrukciu, napríklad PRINT "Hello, world!", ktorá povie počítaču, aby za vás vykonal všetky malé úlohy.

Vývoj jazyka Assembly

Keď počítačoví vedci prvýkrát skonštruovali programovateľné stroje, naprogramovali ich priamo v strojovom kóde, čo je séria čísel, ktoré dávajú počítaču pokyny, čo má robiť. Písanie strojového jazyka bolo veľmi náročné a trvalo dlho, preto sa nakoniec vytvoril jazyk assembler. Jazyk assembleru je pre človeka ľahšie čitateľný a dá sa napísať rýchlejšie, ale stále je pre človeka oveľa ťažšie ho používať ako vysokoúrovňový programovací jazyk, ktorý sa snaží napodobniť ľudský jazyk.

Programovanie v strojovom kóde

Ak chce programátor programovať v strojovom kóde, musí vedieť, ako vyzerajú jednotlivé inštrukcie v binárnom (alebo hexadecimálnom) tvare. Hoci pre počítač je ľahké rýchlo zistiť, čo strojový kód znamená, pre programátora je to ťažké. Každá inštrukcia môže mať niekoľko podôb, z ktorých všetky pre ľudí vyzerajú len ako zhluk čísel. Akúkoľvek chybu, ktorú niekto urobí pri písaní strojového kódu, si všimne až vtedy, keď počítač urobí nesprávnu vec. Zistiť chybu je ťažké, pretože väčšina ľudí nedokáže pri pohľade na strojový kód určiť, čo znamená. Príklad toho, ako vyzerá strojový kód:

05 2A 00

Tento hexadecimálny strojový kód hovorí procesoru počítača x86, aby pridal 42 do akumulátora. Pre človeka je veľmi ťažké ho prečítať a pochopiť, aj keď pozná strojový kód.

Používanie jazyka Assembly namiesto toho

V jazyku assembleru môže byť každá inštrukcia zapísaná ako krátke slovo, ktoré sa nazýva mnemotechnika, za ktorou nasledujú ďalšie veci, ako sú čísla alebo iné krátke slová. Mnemotechnika sa používa preto, aby si programátor nemusel pamätať presné čísla v strojovom kóde potrebné na to, aby povedal počítaču, aby niečo urobil. Medzi príklady mnemotechník v jazyku assembleru patrí add, ktorý pridáva údaje, a mov, ktorý presúva údaje z jedného miesta na druhé. Keďže "mnemotechnika" je nezvyčajné slovo, niekedy sa namiesto neho používa výraz typ inštrukcie alebo len inštrukcia, často nesprávne. Slová a čísla za prvým slovom poskytujú viac informácií o tom, čo sa má vykonať. Napríklad veci nasledujúce za sčítaním môžu hovoriť o tom, aké dve veci sa majú sčítať, a veci nasledujúce za mov hovoria o tom, čo sa má presunúť a kam sa to má umiestniť.

Napríklad strojový kód v predchádzajúcej časti (05 2A 00) možno v assembleri zapísať ako:

 pridať ax,42

Asemblerový jazyk tiež umožňuje programátorom jednoduchšie zapisovať skutočné údaje, ktoré program používa. Väčšina jazykov assembleru má podporu pre jednoduché vytváranie čísel a textu. V strojovom kóde by sa každý iný typ čísla, napríklad kladné, záporné alebo desatinné, musel ručne konvertovať na binárne a text by sa musel definovať po jednom písmene ako čísla.

Jazyk Assembly poskytuje tzv. abstrakciu strojového kódu. Pri používaní assembleru programátori nemusia poznať podrobnosti o tom, čo čísla pre počítač znamenajú, to namiesto nich zistí assembler. Jazyk assembleru vlastne stále umožňuje programátorovi používať všetky funkcie procesora, ktoré by mohol používať so strojovým kódom. V tomto zmysle má jazyk assembleru veľmi dobrú, vzácnu vlastnosť: má rovnakú schopnosť vyjadrovať veci ako vec, od ktorej abstrahuje (strojový kód), a zároveň sa oveľa ľahšie používa. Z tohto dôvodu sa strojový kód takmer nikdy nepoužíva ako programovací jazyk.

Demontáž a ladenie

Keď sú programy hotové, sú už transformované do strojového kódu, aby ich procesor mohol skutočne spustiť. Niekedy však, ak je v programe chyba (omyl), programátori budú chcieť vedieť povedať, čo robia jednotlivé časti strojového kódu. Disassemblery sú programy, ktoré programátorom pomáhajú urobiť to tak, že transformujú strojový kód programu späť do jazyka assembleru, ktorý je oveľa zrozumiteľnejší. Disassemblery, ktoré menia strojový kód na jazyk assembleru, robia opak asemblerov, ktoré menia jazyk assembleru na strojový kód.

Organizácia počítačov

Na pochopenie fungovania programu v jazyku assembler je potrebné pochopiť, ako sú počítače organizované, ako zdanlivo fungujú na veľmi nízkej úrovni. Na najjednoduchšej úrovni majú počítače tri hlavné časti:

  1. hlavná pamäť alebo pamäť RAM, v ktorej sú uložené údaje a inštrukcie,
  2. procesor, ktorý spracúva údaje vykonávaním inštrukcií, a
  3. vstup a výstup (niekedy skrátene I/O), ktoré umožňujú počítaču komunikovať s vonkajším svetom a ukladať údaje mimo hlavnej pamäte, aby ich mohol neskôr získať späť.

Hlavná pamäť

Vo väčšine počítačov je pamäť rozdelená na bajty. Každý bajt obsahuje 8 bitov. Každý bajt v pamäti má aj adresu, čo je číslo, ktoré hovorí, kde sa daný bajt v pamäti nachádza. Prvý bajt v pamäti má adresu 0, ďalší má adresu 1 atď. Rozdelenie pamäte na bajty umožňuje jej adresovanie na bajty, pretože každý bajt dostane jedinečnú adresu. Adresy bajtových pamätí sa nemôžu použiť na označenie jedného bitu bajtu. Bajt je najmenšia časť pamäte, ktorú možno adresovať.

Aj keď sa adresa vzťahuje na konkrétny bajt v pamäti, procesory umožňujú používať niekoľko bajtov pamäte za sebou. Najčastejšie sa táto funkcia využíva na použitie 2 alebo 4 bajtov v rade na reprezentáciu čísla, zvyčajne celého čísla. Na reprezentáciu celých čísel sa niekedy používajú aj jednotlivé bajty, ale keďže majú iba 8 bitov, môžu obsahovať iba 2 8alebo 256 rôznych možných hodnôt. Použitím 2 alebo 4 bajtov v riadku sa zvýši počet rôznych možných hodnôt na 2 16, 65536, resp. 2 32, 4294967296.

Keď program používa bajt alebo niekoľko bajtov v rade na reprezentáciu niečoho, ako je písmeno, číslo alebo čokoľvek iné, tieto bajty sa nazývajú objekt, pretože sú súčasťou tej istej veci. Aj keď sú všetky objekty uložené v rovnakých bajtoch pamäte, zaobchádza sa s nimi, akoby mali "typ", ktorý hovorí, ako sa majú bajty chápať: buď ako celé číslo, alebo znak, alebo nejaký iný typ (napríklad neceločíselná hodnota). Strojový kód možno tiež považovať za typ, ktorý sa interpretuje ako inštrukcie. Pojem typ je veľmi, veľmi dôležitý, pretože definuje, aké veci sa môžu a nemôžu robiť s objektom a ako sa majú interpretovať bajty objektu. Napríklad nie je platné uložiť záporné číslo do objektu s kladným číslom a nie je platné uložiť zlomok do objektu s celým číslom.

Adresa, ktorá ukazuje na viacbajtový objekt (je jeho adresou), je adresou prvého bajtu tohto objektu - bajtu, ktorý má najnižšiu adresu. Na okraj treba poznamenať, že podľa adresy objektu nemožno určiť jeho typ - a dokonca ani jeho veľkosť. V skutočnosti nemôžete ani zistiť, aký typ objektu je, keď sa naň pozriete. Program v jazyku assembler musí sledovať, na ktorých pamäťových adresách sa nachádzajú ktoré objekty a aké sú tieto objekty veľké. Program, ktorý to robí, je typovo bezpečný, pretože robí s objektmi len také veci, ktoré sú bezpečné pre ich typ. Program, ktorý to nerobí, pravdepodobne nebude fungovať správne. Všimnite si, že väčšina programov v skutočnosti explicitne neukladá, aký je typ objektu, len dôsledne pristupuje k objektom - s tým istým objektom sa vždy zaobchádza ako s rovnakým typom.

Procesor

Procesor vykonáva inštrukcie, ktoré sú uložené ako strojový kód v hlavnej pamäti. Okrem možnosti prístupu do pamäte na ukladanie dát má väčšina procesorov niekoľko malých, rýchlych priestorov s pevnou veľkosťou na uchovávanie objektov, s ktorými sa práve pracuje. Tieto priestory sa nazývajú registre. Procesory zvyčajne vykonávajú tri typy inštrukcií, hoci niektoré inštrukcie môžu byť kombináciou týchto typov. Nižšie je uvedených niekoľko príkladov jednotlivých typov v jazyku assembly x86.

Inštrukcie, ktoré čítajú alebo zapisujú do pamäte

Nasledujúca inštrukcia jazyka x86 prečíta (načíta) dvojbajtový objekt z bajtu na adrese 4096 (0x1000 v šestnástkovej sústave) do 16-bitového registra s názvom 'ax':

        mov ax, [1000h]

V tomto jazyku assembleru hranaté zátvorky okolo čísla (alebo názvu registra) znamenajú, že číslo sa má použiť ako adresa na údaje, ktoré sa majú použiť. Použitie adresy na poukázanie na údaje sa nazýva indirekcia. V tomto ďalšom príklade sa bez hranatých zátvoriek do iného registra, bx, v skutočnosti načíta hodnota 20.

        mov bx, 20

Keďže sa nepoužilo žiadne presmerovanie, do registra sa vložila samotná hodnota.

Ak sa operandy (veci, ktoré nasledujú za mnemotechnickým príkazom) objavia v opačnom poradí, inštrukcia, ktorá niečo načíta z pamäte, to namiesto toho zapíše do pamäte:

        mov [1000h], ax

Tu pamäť na adrese 1000h dostane hodnotu ax. Ak sa tento príklad vykoná hneď po predchádzajúcom príklade, 2 bajty na adresách 1000h a 1001h budú 2 bajty celého čísla s hodnotou 20.

inštrukcie, ktoré vykonávajú matematické alebo logické operácie

Niektoré inštrukcie vykonávajú veci ako odčítanie alebo logické operácie ako nie:

Príklad strojového kódu uvedený v tomto článku by bol v jazyku assembleru:

        pridať sekeru, 42

Tu sa sčítajú hodnoty 42 a ax a výsledok sa uloží späť do ax. V assembleri x86 je tiež možné takto kombinovať prístup do pamäte a matematickú operáciu:

        pridať ax, [1000h]

Táto inštrukcia pripočíta hodnotu 2 bajtov celého čísla uloženého na 1000h k ax a odpoveď uloží do ax.

        alebo ax, bx

Táto inštrukcia vypočíta or obsahu registrov ax a bx a výsledok uloží späť do ax.

Inštrukcie, ktoré rozhodujú o tom, aká bude ďalšia inštrukcia

Inštrukcie sa zvyčajne vykonávajú v poradí, v akom sa objavujú v pamäti, teda v poradí, v akom sú napísané v assembleri. Procesor ich jednoducho vykonáva jednu po druhej. Aby však procesory mohli robiť zložité veci, musia vykonávať rôzne inštrukcie na základe toho, aké údaje im boli zadané. Schopnosť procesorov vykonávať rôzne inštrukcie v závislosti od toho, aký je výsledok niečoho, sa nazýva vetvenie. Inštrukcie, ktoré rozhodujú o tom, aká má byť ďalšia inštrukcia, sa nazývajú inštrukcie vetvenia.

V tomto príklade predpokladajme, že niekto chce vypočítať množstvo farby, ktoré bude potrebovať na vymaľovanie štvorca s určitou dĺžkou strany. Z dôvodu úspory z rozsahu mu však obchod s farbami nepredá menšie množstvo farby, ako je potrebné na natretie štvorca s rozmermi 100 x 100.

Aby zistili množstvo farby, ktoré budú potrebovať na základe dĺžky štvorca, ktorý chcú vymaľovať, vymysleli tento súbor krokov:

  • od dĺžky strany odpočítajte 100
  • ak je odpoveď menšia ako nula, nastavte dĺžku strany na 100
  • vynásobte dĺžku strany samou sebou

Tento algoritmus možno vyjadriť nasledujúcim kódom, kde ax je dĺžka strany.

        mov bx, ax     sub bx, 100    jge continue   mov ax, 100 continue: mul ax

Tento príklad zavádza niekoľko nových vecí, ale prvé dva príkazy sú známe. Skopírujú hodnotu ax do bx a potom od bx odčítajú 100.

Jedna z nových vecí v tomto príklade sa nazýva label, čo je pojem, ktorý sa vo všeobecnosti vyskytuje v jazykoch assembleru. Štítkom môže byť čokoľvek, čo si programátor želá (pokiaľ to nie je názov inštrukcie, čo by asembler zmiatlo). V tomto príklade je značkou "continue". Asembler ho interpretuje ako adresu inštrukcie. V tomto prípade je to adresa mult ax.

Ďalším novým konceptom sú vlajky. V procesoroch x86 mnohé inštrukcie nastavujú v procesore "príznaky", ktoré môže ďalšia inštrukcia použiť na rozhodnutie, čo má urobiť. V tomto prípade, ak bx bolo menšie ako 100, sub nastaví príznak, ktorý hovorí, že výsledok bol menší ako nula.

Ďalšou inštrukciou je jge, čo je skratka pre "Jump if Greater than or Equal to". Je to inštrukcia vetvenia. Ak príznaky v procesore určia, že výsledok bol väčší alebo rovný nule, namiesto toho, aby procesor jednoducho prešiel na ďalšiu inštrukciu, skočí na inštrukciu na značke continue, čo je mul ax.

Tento príklad funguje dobre, ale väčšina programátorov by ho nenapísala. Inštrukcia odčítania správne nastavila príznak, ale zároveň zmenila hodnotu, s ktorou operuje, čo si vyžadovalo skopírovanie ax do bx. Väčšina jazykov assembleru umožňuje použitie porovnávacích inštrukcií, ktoré nemenia žiadny z odovzdávaných argumentov, ale napriek tomu správne nastavujú príznaky, a assembler x86 nie je výnimkou.

        cmp ax, 100    jge continue   mov ax, 100 continue: mul ax

Namiesto toho, aby sme od ax odčítali 100, zistili, či je toto číslo menšie ako nula, a priradili ho späť k ax, ax zostane nezmenené. Príznaky sú stále nastavené rovnakým spôsobom a skok sa vykoná v rovnakých situáciách.

Vstup a výstup

Hoci vstup a výstup sú základnou súčasťou počítačov, v jazyku assembleru neexistuje jediný spôsob, ako ich realizovať. Je to preto, že spôsob fungovania vstupov a výstupov závisí od nastavenia počítača a operačného systému, ktorý na ňom beží, nielen od toho, aký má procesor. V časti s príkladmi príklad Hello World používa volania operačného systému MS-DOS a príklad po ňom používa volania systému BIOS.

V jazyku assembleru je možné vykonávať I/O. V jazyku assembler sa dá všeobecne vyjadriť všetko, čo je počítač schopný urobiť. Avšak napriek tomu, že v jazyku assembleru existujú inštrukcie na sčítanie a vetvenie, ktoré vždy vykonajú tú istú vec, v jazyku assembleru neexistujú inštrukcie, ktoré by vždy vykonávali I/O.

Dôležité je uvedomiť si, že spôsob, akým funguje I/O, nie je súčasťou žiadneho jazyka assembleru, pretože nie je súčasťou fungovania procesora.

Asemblerové jazyky a prenosnosť

Hoci assembler nie je priamo spúšťaný procesorom, ale strojovým kódom, má s ním stále veľa spoločného. Každá rodina procesorov podporuje iné funkcie, inštrukcie, pravidlá pre to, čo môžu inštrukcie robiť, a pravidlá pre to, aké kombinácie inštrukcií sú kde povolené. Z tohto dôvodu rôzne typy procesorov stále potrebujú rôzne asemblerové jazyky.

Keďže každá verzia jazyka assembler je viazaná na rodinu procesorov, chýba mu niečo, čo sa nazýva prenosnosť. Niečo, čo má prenosnosť alebo je prenosné, sa dá ľahko preniesť z jedného typu počítača na iný. Zatiaľ čo iné typy programovacích jazykov sú prenosné, jazyk assembler vo všeobecnosti prenosný nie je.

Asembler a vysokoúrovňové jazyky

Hoci jazyk assembleru umožňuje jednoducho využívať všetky funkcie procesora, v moderných softvérových projektoch sa nepoužíva z viacerých dôvodov:

  • Vyjadrenie jednoduchého programu v assembleri si vyžaduje veľa úsilia.
  • Hoci jazyk assembleru nie je tak náchylný na chyby ako strojový kód, stále poskytuje len veľmi malú ochranu pred chybami. Takmer všetky assemblerové jazyky nevynucujú typovú bezpečnosť.
  • Jazyk assembleru nepodporuje správne programátorské postupy, ako je modularita.
  • Hoci je každá jednotlivá inštrukcia jazyka assembleru ľahko pochopiteľná, je ťažké povedať, aký bol zámer programátora, ktorý ju napísal. V skutočnosti je jazyk assembleru programu taký ťažko zrozumiteľný, že spoločnosti sa neobávajú, že by ľudia rozobrali (získali jazyk assembleru) ich programov.

V dôsledku týchto nevýhod sa na väčšinu projektov používajú vysokoúrovňové jazyky ako Pascal, C a C++. Umožňujú programátorom vyjadriť svoje myšlienky priamejšie namiesto toho, aby sa museli starať o to, čo má procesor robiť na každom kroku. Nazývajú sa vysokoúrovňové, pretože myšlienky, ktoré môže programátor vyjadriť v rovnakom množstve kódu, sú zložitejšie.

Programátori píšuci kód v kompilovaných vysokoúrovňových jazykoch používajú na transformáciu svojho kódu do jazyka assembleru program nazývaný kompilátor. Kompilátory sa píšu oveľa ťažšie ako asemblery. Takisto vysokoúrovňové jazyky nie vždy umožňujú programátorom využívať všetky funkcie procesora. Je to preto, že vysokoúrovňové jazyky sú navrhnuté tak, aby podporovali všetky rodiny procesorov. Na rozdiel od asemblerových jazykov, ktoré podporujú len jeden typ procesora, sú vysokoúrovňové jazyky prenosné.

Aj keď sú kompilátory zložitejšie ako assemblery, desaťročia výroby a výskumu kompilátorov ich urobili veľmi dobrými. V súčasnosti už nie je veľký dôvod používať pre väčšinu projektov jazyk assembler, pretože kompilátory zvyčajne dokážu zistiť, ako vyjadriť programy v jazyku assembler rovnako dobre alebo lepšie ako programátori.

Príklady programov

Program Hello World napísaný v x86 Assembly:

adosseg .model small .stack 100h .data hello_message db 'Hello, World! ',0dh,0ah,'$' .code main proc mov ax,@data mov ds,ax mov ah,9 mov dx,offset hello_message int 21h mov ax,4C00h int 21h main endp end main

Funkcia, ktorá vypíše číslo na obrazovku pomocou prerušenia BIOS-u napísaného v asembleri NASM x86. Modulárny kód je možné napísať v assembleri, ale vyžaduje si to dodatočné úsilie. Všimnite si, že všetko, čo sa nachádza za bodkočiarkou na riadku, je komentár a asembler ho ignoruje. Uvádzanie komentárov v kóde v jazyku assembler je veľmi dôležité, pretože veľké programy v jazyku assembler sú veľmi ťažko zrozumiteľné.

; void printn(int number, int base); printn:         bp      mov     bp, sp push    ax         push    bx      push    cx      push    dx      push    si      mov     si, 0   mov        ax, [bp + 4]   ; číslo        mov     cx, [bp + 6]   ; základňa gloop:      inc        si             ; dĺžka reťazca        mov     dx, 0          ; nula dx      div        cx             ; delenie základom     cmp     dx, 10         ; je to ge 10? jge        num     add     dx, '0'        ; pridajte nulu k dx   jmp     anum num:      add        dx, ('A'- 10)  ; hexadecimálna hodnota, pridaj 'A' k dx - 10. anum:  push    dx               ; vložte dx na zásobník.       cmp     ax, 0          ; máme pokračovať?         jne     gloop  mov     bx, 7h         ; pre prerušenie tloop:        pop     ax               ; získajte jeho hodnotu        mov     ah, 0eh        ; pre prerušenie         int     10h            ; zapísať znak dec     si             ; zbaviť sa znaku         jnz     tloop  pop     si      pop     dx      pop     cx      pop     bx      pop        ax      pop     bp      ret    

Otázky a odpovede

Otázka: Čo je to montážny jazyk?


Odpoveď: Jazyk assembleru je programovací jazyk, ktorý sa môže použiť na priame určenie toho, čo má počítač urobiť. Je takmer rovnaký ako strojový kód, ktorému počítač rozumie, s tým rozdielom, že namiesto čísel používa slová.

Otázka: Ako počítač rozumie programu v assembleri?


Odpoveď: Počítač v skutočnosti nemôže priamo porozumieť programu v assembleri, ale môže ho ľahko zmeniť na strojový kód nahradením slov programu číslami, ktoré označujú. Tento proces sa vykonáva pomocou assemblera.

Otázka: Čo sú inštrukcie v jazyku assembler?


Odpoveď: Inštrukcie v jazyku assembleru sú malé úlohy, ktoré počítač vykonáva pri spúšťaní programu. Nazývajú sa inštrukcie, pretože dávajú počítaču pokyny, čo má robiť. Časť počítača zodpovedná za vykonávanie týchto inštrukcií sa nazýva procesor.

Otázka: Aký typ programovacieho jazyka je assembler?


Odpoveď: Jazyk assembler je nízkoúrovňový programovací jazyk, čo znamená, že sa dá použiť len na vykonávanie jednoduchých úloh, ktorým počítač priamo rozumie. Na vykonávanie zložitejších úloh je potrebné rozdeliť každú úlohu na jednotlivé komponenty a poskytnúť inštrukcie pre každý komponent samostatne.

Otázka: Ako sa to líši od vysokoúrovňových jazykov?


Odpoveď: Vysokoúrovňové jazyky môžu mať jednotlivé príkazy, ako napríklad PRINT "Hello, world!", ktoré povedia počítaču, aby automaticky vykonal všetky tieto malé úlohy bez toho, aby ich bolo potrebné špecifikovať jednotlivo, ako by ste to museli urobiť v prípade programu v assembleri. Vďaka tomu sú vysokoúrovňové jazyky pre ľudí ľahšie čitateľné a zrozumiteľné ako assemblerové programy zložené z mnohých jednotlivých príkazov.

Otázka: Prečo môže byť pre ľudí ťažké čítať program v assembleri?


Odpoveď: Pretože na zložitú úlohu, ako je napríklad vytlačenie niečoho na obrazovku alebo vykonanie výpočtov na súboroch údajov - veci, ktoré sa zdajú byť veľmi základné a jednoduché, keď sú vyjadrené prirodzeným ľudským jazykom - sa musí špecifikovať veľa jednotlivých inštrukcií, takže môže existovať veľa riadkov kódu tvoriacich jednu inštrukciu, čo ľuďom, ktorí nevedia, ako počítače vnútorne fungujú na takej nízkej úrovni, sťažuje sledovanie a interpretáciu toho, čo sa v nich deje.

AlegsaOnline.com - 2020 / 2023 - License CC3