Što je skupni jezik?

Ponekad se naziva montaža ili ASM, asemblerski jezik je programski jezik niske razine.

Programi napisani na skupnim jezicima sastavljaju asembleri. Svaki asembler ima vlastiti asemblerski jezik, koji je dizajniran za jednu specifičnu arhitekturu računala.

Strojni jezik je samo niz brojeva, koji ljudima nije lako čitati. Koristeći ASM, programeri mogu pisati ljudski čitljive programe koji odgovaraju gotovo točno strojnom jeziku.

Nedostatak je da sve što računalo radi mora biti izričito opisano, precizno i ​​detaljno. Prednost je što programer ima maksimalnu kontrolu nad radom računala.

Zašto je ASM jezik "niske razine"?

Skupština se naziva programski jezik niske razine jer postoji (gotovo) jedan-na-jedan odnos između onoga što govori računalu i onoga što računalo radi. Općenito, jedan redak skupnog programa sadrži najviše jednu naredbu za računalo.

Kako se ASM razlikuje od jezika "visoke razine"?

Jezici na visokoj razini pružaju apstrakcije operacija niske razine koje omogućuju programeru da se više fokusira na opisivanje onoga što žele učiniti, a manje na način na koji to treba učiniti . Programiranje na ovaj način je praktičnije i čini programe lakšim za čitanje pri žrtvovanju kontrole niskih razina.

Programi napisani na jezicima visoke razine nikada neće odgovarati sirovoj brzini i učinkovitosti programa pisanih u skupštini. Primjeri jezika visoke razine uključuju Python, Java, JavaScript, Clojure i Lisp.

Što je jezik "srednje razine"?

Jezici srednje ili niže razine pružaju neke apstrakcije na visokoj razini kako bi život programera bio lakši, a istovremeno omogućuju pristup operacijama niske razine. Često se koriste za pisanje operativnih sustava, pa se ponekad nazivaju programski jezici sustava .

Programi napisani na jezicima srednje razine mogu također funkcionirati, ili gotovo isto tako, kao programi pisani na asemblerskom jeziku. Primjeri programskih jezika srednje razine uključuju C, C ++, Ada, Nim i Rust.

Je li ASM prenosiv?

Ne. Budući da su jezici za sastavljanje povezani s jednom određenom arhitekturom računala, nisu prenosivi. Program pisan na jednom asemblerskom jeziku morao bi biti u potpunosti prerađen kako bi se izvodio na drugom tipu stroja.

Prenosivost je jedna od glavnih prednosti jezika više razine. C programski jezik često se naziva "prijenosni sklop" jer C kompilatori postoje za gotovo svaku modernu arhitekturu sustava. Program napisan u C može zahtijevati neke promjene prije nego što se kompilira na drugom računalu, ali jezični jezik je prenosiv.

Općenito govoreći, jezik na višoj razini, manje promjene treba napraviti da bi se izvodio na drugoj arhitekturi. Jezici najniže razine - strojni jezik i asemblerski jezik - nisu prenosivi.

Primjer: Pozdrav, Svijet! u 32-bitnom sklopu, za Windows

Ovdje je "Hello, World" napisano za 32-bitni Intel procesor. Također će se izvoditi na 64-bitnom procesoru. Kompajlirat ćemo ga i pokrenuti ga na Windows 10.

 global _main extern _printf section .text _main: push poruka call _printf add esp, 4 ret poruka: db 'Pozdrav, Svijet!', 10, 0 

Za početak otvorite Notepad. Kopirajte i zalijepite gornji kod u novu tekstualnu datoteku i spremite datoteku kao hello.asm .

Za sastavljanje skupa koristit ćemo NASM, Netwide Assembler. Može se preuzeti na adresi //www.nasm.us/.

 nasm -f win32 hello.asm 

Kada pokrenete ovu naredbu, NASM stvara objektnu datoteku. Objektna datoteka sadrži strojni kod, ali nije sasvim izvršna datoteka. Naša objektna datoteka naziva se hello.obj .

Za izradu izvršne datoteke koristit ćemo 32-bitnu verziju MinGW-a (Minimalni GNU za Windows) koja će omogućiti gcc kompilator. Može se preuzeti na adresi //www.mingw.org/.

 gcc -o hello.exe hello.obj 
 zdravo 
 Pozdrav svijete! 

Primjer: Pozdrav, Svijet! u 64-bitnom sklopu, za Linux

Ovdje je "Hello, World" napisano za 64-bitni Intel procesor. Kompajlirat ćemo ga i pokrenuti ga na 64-bitnom Linuxu.

 extern printf; C printf funkciju, koja se naziva sekcija .data; Podatkovni odjeljak, inicijalizirane varijable msg: db "Zdravo, svijet!", 0; C niz završava s 0 fmt: db "% s", 10, 0; Printf format, "n", "0" odjeljak .text; Započnite dio odjeljka globalnog glavnog; standardna ulazna točka gcc glavna:; oznaka programa za ulaznu točku push rbp; postaviti stog okvir, mora biti usklađen mov rdi, FM rsi mov, msg RAC RAZ, 0; također može biti: xor rax, rax call printf; Pozovite funkciju C printf pop rbp; vraćanje stog mov rax, 0; normalno, bez pogreške, povratna vrijednost ret; povratak 

Kopirajte i zalijepite ovaj program u novu datoteku pod nazivom hello.asm .

Zatim sastavite skup s NASM-om, koji možete instalirati s upraviteljem paketa. Na primjer, na Ubuntu ili Debianu možete instalirati NASM koristeći apt:

 sudo apt update & & sudo apt instalirati nasm 

Izvedite ovu naredbu da biste stvorili objektnu datoteku:

 nasm -f elf64 hello.asm 

Objektna datoteka se zove hello.o .

Zatim upotrijebite gcc da povežete ovu objektnu datoteku s potrebnim knjižnicama na računalu i prevedite je u izvršnu datoteku nazvanu hello :

 gcc hello.o -o zdravo 

Na kraju pokrenite izvršnu datoteku:

 ./zdravo 
 Pozdrav svijete! 

Za referencu, to je isti program, napisan u C:

 #include int main () {char msg [] = "Pozdrav svijetu!"; printf ( "% s \ n", poruka); return 0; } 

  • Pogledajte rutine otklanjanja pogrešaka za druge primjere kodova niskih razina montaže i dodatne informacije o tome što svaka rutina radi.
  • Dodatne primjere asemblerskog jezika potražite na web-lokaciji Happy Codings.

2GL, Asembler, Niska razina jezika, Strojni jezik, Programski izrazi