Ce este limba de asamblare?

Uneori denumit asamblare sau ASM, limbajul de asamblare este un limbaj de programare la nivel scăzut.

Programele scrise în limbi de asamblare sunt compilate de un asamblator. Fiecare asamblator are propriul limbaj de asamblare, care este proiectat pentru o arhitectură specifică a calculatorului.

Limba mașinii este doar o serie de numere, ceea ce nu este ușor pentru oameni să citească. Utilizând ASM, programatorii pot scrie programe care pot fi citite de om și care corespund aproape exact limbii mașinii.

Dezavantajul este că tot ceea ce face computerul trebuie să fie descris în mod explicit, în detaliu precis. Avantajul este că programatorul are un control maxim asupra a ceea ce face computerul.

De ce este ASM un limbaj "la un nivel scăzut"?

Adunarea se numește limbaj de programare la nivel scăzut, deoarece există (aproape) o relație unu-la-unu între ceea ce spune computerului și ceea ce face computerul. În general, o linie a unui program de asamblare conține maximum o instrucțiune pentru computer.

Cum diferă ASM de un limbaj "de nivel înalt"?

Limbile de nivel înalt oferă abstracții de operații la nivel scăzut, care permit programatorului să se concentreze mai mult pe descrierea a ceea ce dorește să facă și mai puțin asupra modului în care ar trebui făcut . Programarea în acest mod este mai convenabilă și face programele mai ușor de citit la sacrificarea controlului la nivel scăzut.

Programele scrise în limbi de nivel înalt nu se vor potrivi niciodată cu viteza brută și eficiența programelor scrise în ansamblu. Exemple de limbi de nivel înalt includ Python, Java, JavaScript, Clojure și Lisp.

Ce este un limbaj de nivel mediu?

Limbile de nivel inferior sau de nivel inferior oferă unele abstracții la nivel înalt pentru a ușura viața programatorului, oferind în același timp acces la operații la nivel inferior. Ele sunt adesea folosite pentru a scrie sisteme de operare, astfel încât acestea sunt uneori numite limbi de programare a sistemului .

Programele scrise în limbile de nivel mediu pot funcționa și ele, sau aproape la fel de bine, și programele scrise în limba de asamblare. Exemple de limbi de programare de nivel mediu includ C, C ++, Ada, Nim și Rust.

Este ASM portabil?

Nu. Deoarece limbile de asamblare sunt legate de o arhitectură specifică a computerului, ele nu sunt portabile. Un program scris într-o limbă de asamblare ar trebui să fie complet rescris pentru ca acesta să ruleze pe un alt tip de mașină.

Portabilitatea este unul dintre principalele avantaje ale limbilor de nivel superior. Limba de programare C este adesea numită "ansamblu portabil", deoarece compilatoarele C există pentru aproape orice arhitectură modernă a sistemului. Un program scris în C poate necesita unele modificări înainte ca acesta să se compileze pe un alt computer, dar limba centrală este portabilă.

În general vorbind, limbajul de nivel superior este, mai puține schimbări trebuie făcute pentru ca acesta să funcționeze pe o altă arhitectură. Limbile de nivel inferior - limbajul mașinii și limba de asamblare - nu sunt portabile.

Exemplu: Bună ziua, lume! în asamblare pe 32 de biți, pentru Windows

Aici este "Hello, World" scris pentru un procesor Intel pe 32 de biți. Acesta va rula, de asemenea, pe un procesor pe 64 de biți. Ne vom compila și vom rula pe Windows 10.

 global _main secțiune externă _printf .text _main: mesaj de apel apel _printf add esp, 4 mesaj ret: db 'Hello, World!', 10, 0 

Pentru a începe, deschideți Notepad. Copiați și inserați codul de mai sus într-un fișier text nou și salvați fișierul ca hello.asm .

Pentru a compila ansamblul, vom folosi NASM, Netwide Assembler. Acesta poate fi descărcat de la //www.nasm.us/.

 nasm -f win32 hello.asm 

Când executați această comandă, NASM creează un fișier obiect. Un fișier obiect conține codul mașinii, dar nu este chiar un fișier executabil. Fișierul obiect se numește hello.obj .

Pentru a crea executabilul, vom folosi versiunea pe 32 de biți a programului MinGW (Minimal GNU for Windows) care va furniza compilatorul gcc. Acesta poate fi descărcat de la //www.mingw.org/.

 gcc -o hello.exe hello.obj 
 Salut 
 Salut Lume! 

Exemplu: Bună ziua, lume! în asamblare pe 64 de biți, pentru Linux

Aici este "Hello, World" scris pentru un procesor Intel pe 64 de biți. Vom compila și rula pe Linux pe 64 de biți.

 extern printf; funcția C printf, care va fi numită secțiune .data; Secțiunea de date, variabile inițializate msg: db "Bună ziua, lume!", 0; C șir termină cu 0 fmt: db "% s", 10, 0; Formatul printf, "\ n", secțiunea "0" .text; Începeți secțiunea de cod global principal; punctul de intrare standard gcc principal:; eticheta programului pentru punctul de intrare push rbp; configurați cadrul stivă, trebuie să fie aliniat mov rdi, fmt mov rsi, msg mov rax, 0; poate fi de asemenea: xor rax, rax call printf; Apel C funcția printf pop rbp; restabilirea stivei mov rax, 0; normal, fără eroare, retur; întoarcere 

Copiați și inserați acest program într-un fișier nou numit hello.asm .

Apoi, compilați ansamblul cu NASM, pe care îl puteți instala împreună cu managerul de pachete. De exemplu, pe Ubuntu sau Debian, puteți instala NASM folosind apt:

 sudo apt actualizare && sudo apt instalare nasm 

Rulați această comandă pentru a crea fișierul obiect:

 nasm -f elf64 hello.asm 

Fișierul obiect este numit hello.o .

Apoi, utilizați gcc pentru a conecta acest fișier obiect la bibliotecile necesare de pe computer și pentru al compila într-un fișier executabil numit salut :

 gcc hello.o -o salut 

În cele din urmă, executați fișierul executabil:

 ./Salut 
 Salut Lume! 

Pentru referință, acesta este același program, scris în C:

 #include int main () {char msg [] = "Salut lume \ n"; printf ( "% s \ n", msg); retur 0; } 

  • Vezi rutine de depanare pentru alte exemple de cod de asamblare la nivel scăzut și informații suplimentare despre ceea ce face fiecare rutină.
  • Pentru exemple suplimentare de limbă de asamblare, consultați site-ul Happy Codings.

2GL, Asamblare, Limba inferioară, Limba mașinii, Termeni de programare