Kas ir Asamblejas valoda?

Dažreiz to sauc par montāžu vai ASM, montāžas valoda ir zema līmeņa programmēšanas valoda.

Programmas, kas rakstītas montāžas valodās, apkopo montētājs. Katram montētājam ir savs montāžas valoda, kas paredzēta vienai konkrētai datora arhitektūrai.

Mašīnvaloda ir tikai virkne numuru, kas cilvēkiem nav viegli lasāms. Izmantojot ASM, programmētāji var uzrakstīt cilvēka lasāmas programmas, kas gandrīz precīzi atbilst mašīnas valodai.

Trūkums ir tas, ka viss, ko dators dara, ir precīzi jāapraksta precīzi. Priekšrocība ir tā, ka programmētājam ir maksimāla kontrole pār to, ko dara dators.

Kāpēc ASM ir "zema līmeņa" valoda?

Asambleju sauc par zema līmeņa programmēšanas valodu, jo pastāv (gandrīz) viena pret vienu saikne starp to, ko tā stāsta datoram, un to, ko dators dara. Kopumā vienā montāžas programmas rindā ir ne vairāk kā viena instrukcija datoram.

Kā ASM atšķiras no "augsta līmeņa" valodas?

Augsta līmeņa valodas nodrošina zema līmeņa operācijas, kas ļauj programmētājam vairāk koncentrēties uz to, ko viņi vēlas darīt, un mazāk par to, kā tas būtu jādara . Šāda veida programmēšana ir ērtāka un padara programmas vieglāk lasāmas zema līmeņa kontroles upuriem.

Programmas, kas rakstītas augsta līmeņa valodās, nekad nesakrīt ar montāžā ierakstīto programmu izejvielu ātrumu un efektivitāti. Augsta līmeņa valodu piemēri ir Python, Java, JavaScript, Clojure un Lisp.

Kas ir "vidēja līmeņa" valoda?

Vidēja līmeņa vai zemāka līmeņa valodas nodrošina dažas augsta līmeņa abstrakcijas, lai atvieglotu programmētāja dzīvi, vienlaikus nodrošinot piekļuvi zema līmeņa operācijām. Tos bieži izmanto operētājsistēmu rakstīšanai, tāpēc tos dažkārt sauc par sistēmas programmēšanas valodām .

Programmas, kas rakstītas vidēja līmeņa valodās, var izpildīt arī gandrīz vai gandrīz kā programmas, kas rakstītas montāžas valodā. Vidēja līmeņa programmēšanas valodu piemēri ir C, C ++, Ada, Nim un Rust.

Vai ASM ir pārnēsājams?

Tā kā montāžas valodas ir saistītas ar vienu konkrētu datora arhitektūru, tās nav pārnēsājamas. Programma, kas rakstīta vienā montāžas valodā, būtu pilnībā jāpārraksta, lai tā darbotos ar cita veida mašīnu.

Pārnesamība ir viena no augstākās valodas valodu priekšrocībām. C programmēšanas valoda bieži tiek saukta par "portatīvo montāžu", jo C kompilatori pastāv gandrīz katrai mūsdienu sistēmas arhitektūrai. Programma, kas rakstīta C, var prasīt dažas izmaiņas, pirms tā tiks apkopota citā datorā, bet galvenā valoda ir pārnēsājama.

Vispārīgi runājot, augstākā līmeņa valoda ir, jo mazāk ir jāveic izmaiņas, lai tā darbotos citā arhitektūrā. Zemākā līmeņa valodas - mašīnvaloda un montāžas valoda - nav pārnēsājamas.

Piemērs: Hello, World! 32 bitu montāžā, Windows

Šeit ir "Hello, World", kas rakstīts 32 bitu procesoram. Tas darbosies arī ar 64 bitu procesoru. Mēs to apkoposim un palaidīsim operētājsistēmā Windows 10.

 globālā _main extern _printf sadaļa .text _main: push message call _printf add esp, 4 ret message: db 'Hello, World!', 10, 0 

Lai sāktu, atveriet Notepad. Nokopējiet un ielīmējiet iepriekš minēto kodu jaunā teksta failā un saglabājiet failu kā hello.asm .

Lai apkopotu montāžu, mēs izmantosim NASM, Netwide Assembler. To var lejupielādēt vietnē http://www.nasm.us/.

 nasm -f win32 hello.asm 

Veicot šo komandu, NASM izveido objekta failu. Objekta failā ir mašīnas kods, bet tas nav gluži izpildāms fails. Mūsu objekta failu sauc par hello.obj .

Lai izveidotu izpildāmo versiju, mēs izmantosim 32 bitu versiju MinGW (minimālais GNU for Windows), kas nodrošinās gcc kompilatoru. To var lejupielādēt vietnē http://www.mingw.org/.

 gcc -o hello.exe hello.obj 
 Sveiki 
 Sveika pasaule! 

Piemērs: Hello, World! 64 bitu montāžā, Linux

Šeit ir "Hello, World", kas rakstīts 64 bitu Intel procesoram. Mēs apkoposim un palaidīsim to 64 bitu Linux.

 extern printf; C printf funkcija, ko sauc par sadaļu .data; Datu sadaļa, inicializētie mainīgie msg: db "Sveiki, pasaule!", 0; C virkne beidzas ar 0 fmt: db "% s", 10, 0; Printf formāts, "n", "0" sadaļa. Sākt koda sadaļu globālā galvenā; standarta gcc ievades punkta galvenais:; programmas iezīme ieejas punkta push rbp; iestatīts kaudzes rāmis, jāsaskaņo ar mov rdi, fmt mov rsi, msg mov rax, 0; var būt arī: xor rax, rax zvans printf; Zvanu C printf funkcija pop rbp; atjaunot kaudze mov rax, 0; normāls, nav kļūdu, atgriešanās vērtības ret; atgriezties 

Kopējiet un ielīmējiet šo programmu jaunā failā hello.asm .

Pēc tam kompilējiet komplektu ar NASM, kuru varat instalēt kopā ar savu pakotņu pārvaldnieku. Piemēram, izmantojot Ubuntu vai Debian, varat instalēt NASM, izmantojot apt:

 sudo apt update & & sudo apt instalēt nasmu 

Lai izveidotu objekta failu, palaidiet šo komandu:

 nasm -f elf64 hello.asm 

Objekta fails ir nosaukts hello.o .

Pēc tam izmantojiet gcc, lai saistītu šo objekta failu ar vajadzīgajām bibliotēkām datorā un apkopotu to izpildāmā failā ar nosaukumu hello :

 gcc hello.o -o hello 

Visbeidzot, palaidiet izpildāmo failu:

 ./Sveiki 
 Sveika pasaule! 

Atsauces nolūkā šī ir tā pati programma, kas rakstīta C:

 #include int main () {char msg [] = "Sveiciena pasaule"; printf ("% s n", msg); atgriešanās 0; } 

  • Skatiet atkļūdošanas kārtību citiem zemas līmeņa montāžas koda piemēriem un papildu informācijai par to, ko katrs rutīns dara.
  • Papildu montāžas valodas piemērus skatiet Happy Codings tīmekļa vietnē.

2GL, montētājs, zema līmeņa valoda, mašīnvaloda, programmēšanas noteikumi