Čo je jazyk zhromaždenia?

Niekedy označovaný ako montáž alebo ASM, montážny jazyk je nízkoúrovňový programovací jazyk.

Programy napísané v montážnych jazykoch zostavuje assembler. Každý assembler má svoj vlastný montážny jazyk, ktorý je určený pre jednu špecifickú architektúru počítača.

Strojový jazyk je len séria čísel, čo nie je pre ľudí ľahké čítať. Pomocou ASM môžu programátori naprogramovať čitateľné programy, ktoré zodpovedajú takmer presne strojovému jazyku.

Nevýhodou je, že všetko, čo robí počítač, musí byť popísané explicitne, presne. Výhodou je, že programátor má maximálnu kontrolu nad tým, čo robí počítač.

Prečo je ASM "low-level" jazyk?

Zhromažďovanie sa nazýva programovací jazyk nízkej úrovne, pretože existuje (takmer) vzťah medzi tým, čo hovorí počítaču, a tým, čo počítač robí. Všeobecne platí, že jeden riadok montážneho programu obsahuje maximálne jednu inštrukciu pre počítač.

Ako sa líši ASM od jazyka „na vysokej úrovni“?

Jazyky na vysokej úrovni poskytujú abstrakcie operácií na nízkej úrovni, ktoré umožňujú programátorovi zamerať sa viac na opis toho, čo chcú robiť, a menej na to, ako by sa to malo robiť . Programovanie týmto spôsobom je pohodlnejšie a uľahčuje čítanie programov pri obetovaní nízkoúrovňového ovládania.

Programy napísané vo vyšších jazykoch nikdy nezodpovedajú prvotnej rýchlosti a efektívnosti programov napísaných v zhromaždení. Medzi príklady vysokoúrovňových jazykov patria Python, Java, JavaScript, Clojure a Lisp.

Čo je jazyk strednej úrovne?

Jazyky strednej úrovne alebo nižšej úrovne poskytujú niektoré abstrakcie na vysokej úrovni, ktoré uľahčujú programátorovi život a zároveň poskytujú prístup k nízkoúrovňovým operáciám. Často sa používajú na písanie operačných systémov, preto sa niekedy nazývajú systémové programovacie jazyky .

Programy napísané v jazykoch strednej úrovne môžu fungovať rovnako alebo takmer rovnako ako programy napísané v jazyku zhromaždenia. Medzi príklady programovacích jazykov strednej úrovne patria C, C ++, Ada, Nim a Rust.

Je prenosný ASM prenosný?

Nie. Pretože jazyky zostavovania sú viazané na jednu konkrétnu architektúru počítača, nie sú prenosné. Program napísaný v jednom montážnom jazyku by musel byť úplne prepísaný, aby mohol bežať na inom type stroja.

Prenosnosť je jednou z hlavných výhod jazykov vyššej úrovne. Programovací jazyk C sa často nazýva "prenosná montáž", pretože kompilátory C existujú pre takmer každú modernú architektúru systému. Program napísaný v jazyku C môže vyžadovať určité zmeny predtým, ako sa bude kompilovať na inom počítači, ale hlavný jazyk je prenosný.

Všeobecne povedané, jazyk vyššej úrovne je, tým menej zmien je potrebné urobiť, aby mohol bežať na inej architektúre. Jazyky s najnižšou úrovňou - strojový jazyk a jazyk montáže - nie sú prenosné.

Príklad: Dobrý deň, Svet! v 32-bitovej zostave, pre Windows

Tu je "Hello, World" napísané pre 32-bitový procesor Intel. Spustí sa aj na 64-bitovom procesore. Zostavíme a spustíme ho na Windows 10.

 global _main extern _printf oddiel .text _main: push message call _printf pridať esp, 4 ret message: db 'Hello, World!', 10, 0 

Ak chcete začať, otvorte program Poznámkový blok. Skopírujte a vložte kód vyššie do nového textového súboru a súbor uložte ako hello.asm .

Na zostavenie zostavy použijeme NASM, Netwide Assembler. Môžete si ho stiahnuť na adrese http://www.nasm.us/.

 nasm -f win32 hello.asm 

Keď spustíte tento príkaz, NASM vytvorí objektový súbor. Objektový súbor obsahuje strojový kód, ale nie je to úplne spustiteľný súbor. Náš objektový súbor sa nazýva hello.obj .

Na vytvorenie spustiteľného súboru použijeme 32-bitovú verziu MinGW (Minimal GNU for Windows), ktorá bude poskytovať prekladač gcc. Môžete si ho stiahnuť na adrese http://www.mingw.org/.

 gcc -o hello.exe hello.obj 
 Ahoj 
 Ahoj, Svet! 

Príklad: Dobrý deň, Svet! v 64-bitovej zostave, pre Linux

Tu je "Hello, World" napísané pre 64-bitový procesor Intel. Zostavíme a spustíme ho na 64-bitovom Linuxe.

 extern printf; funkcia C printf, ktorá sa nazýva sekcia .data; Časť údajov, inicializované premenné msg: db "Hello, world!", 0; C reťazec končí s 0 fmt: db "% s", 10, 0; Formát printf, "n", sekcia "0" .text; Begin code section global main; štandardný hlavný vstupný bod gcc:; označenie programu pre vstupný bod push rbp; nastaviť rám zásobníka, musí byť zarovnaný pohyb rdi, fmt mov rsi, msg mov rax, 0; môže byť tiež: xor rax, rax call printf; Call C printf funkcia pop rbp; obnoviť stack mov rax, 0; normálna, žiadna chyba, návratová hodnota ret; spiatočný 

Skopírujte a vložte tento program do nového súboru s názvom hello.asm .

Potom zostavte zostavu s NASM, ktorú môžete nainštalovať so správcom balíkov. Napríklad v Ubuntu alebo Debiane môžete nainštalovať NASM pomocou apt:

 sudo apt update && sudo apt nainštalovať nasm 

Ak chcete vytvoriť súbor s objektom, spustite tento príkaz:

 nasm -f elf64 hello.asm 

Súbor objektu sa nazýva hello.o .

Potom pomocou gcc prepojte tento objektový súbor s potrebnými knižnicami v počítači a skompilovajte ho do spustiteľného súboru s názvom hello :

 gcc hello.o-ahoj 

Nakoniec spustite spustiteľný súbor:

 ./Ahoj 
 Ahoj, svet! 

Toto je ten istý program napísaný v jazyku C:

 #include int main () {char msg [] = "Ahoj svet n"; printf ( "% s \ n", MSG); návrat 0; } 

  • Pozrite si rutiny ladenia pre ďalšie príklady kódu nízkej úrovne zostavenia a ďalšie informácie o tom, čo robí každá rutina.
  • Ďalšie príklady jazyka montáže nájdete na webovej stránke Happy Codings.

2GL, Assembler, Nízkoúrovňový jazyk, Strojový jazyk, Termíny programovania