Hva er Assembly Language?

Noen ganger referert til som forsamling eller ASM, er et monteringsspråk et programmeringsspråkkurs på lavt nivå.

Programmer skrevet på monteringsspråk er utarbeidet av en montør. Hver montør har sitt eget monteringsspråk, som er designet for en bestemt dataarkitektur.

Maskinspråk er bare en rekke tall, noe som ikke er lett for mennesker å lese. Ved å bruke ASM, kan programmerere skrive lesbare programmer som tilsvarer nesten nøyaktig maskinens språk.

Ulempen er at alt som datamaskinen gjør må beskrives eksplisitt, i presis detalj. Fordelen er at programmereren har maksimal kontroll over hva datamaskinen gjør.

Hvorfor er ASM et "lavt nivå" språk?

Montering kalles et programmeringsspråkkurs på lavt nivå fordi det er (nesten) et en-til-ett-forhold mellom det som forteller datamaskinen å gjøre, og hva datamaskinen gjør. Generelt inneholder en linje i et forsamlingsprogram maksimalt en instruksjon for datamaskinen.

Hvordan er ASM forskjellig fra et "høyt nivå" språk?

Høyt nivå språk gir abstraksjoner av lavnivå operasjoner som tillater programmerer å fokusere mer på å beskrive hva de vil gjøre, og mindre på hvordan det skal gjøres . Programmering på denne måten er mer praktisk og gjør programmer enklere å lese ved ofre for lavnivåkontroll.

Programmer skrevet på høyt språk vil aldri matche den raske hastigheten og effektiviteten til programmer skrevet i samling. Eksempler på språk på høyt nivå inkluderer Python, Java, JavaScript, Clojure og Lisp.

Hva er et "mid-level" språk?

Språk på mellomnivå eller på lavere nivå gir noen abstraksjoner på høyt nivå for å gjøre programmererens liv lettere, samtidig som det gir tilgang til lavnivåoperasjoner. De er ofte vant til å skrive operativsystemer, så de kalles noen ganger systemprogrammeringsspråk .

Programmer skrevet på mellomnivå språk kan også fungere, eller nesten like godt, som programmer skrevet på monteringsspråk. Eksempler på mellomnivå programmeringsspråk inkluderer C, C + +, Ada, Nim og Rust.

Er ASM bærbar?

Nei. Fordi språk er knyttet til en bestemt dataarkitektur, er de ikke bærbare. Et program skrevet på ett forsamlingsspråkk ville trenge å bli fullstendig omskrevet for å kunne kjøre på en annen type maskin.

Bærbarhet er en av de viktigste fordelene med høyere nivå språk. C-programmeringsspråket kalles ofte "bærbar montering" fordi C-kompilatorer eksisterer for nesten alle moderne systemarkitekturer. Et program som er skrevet i C, kan kreve noen endringer før det samles på en annen datamaskin, men kjernespråket er bærbart.

Generelt sett er et språk på høyere nivå, jo færre endringer må gjøres for at det skal kunne kjøre på en annen arkitektur. Språkene på laveste nivå - maskinsspråk og monteringsspråk - er ikke bærbare.

Eksempel: Hei, verden! i 32-bits samling, for Windows

Her er "Hello, World" skrevet for en 32-bits Intel-prosessor. Den vil også kjøre på en 64-bits prosessor. Vi vil kompilere og kjøre den på Windows 10.

 global _main ekstern _printf seksjon .text _main: push message call _printf legg til esp, 4 rett melding: db 'Hei, Verden!', 10, 0 

For å begynne, åpne Notisblokk. Kopier og lim inn koden ovenfor til en ny tekstfil, og lagre filen som hello.asm .

For å kompilere forsamlingen, bruker vi NASM, Netwide Assembler. Den kan lastes ned på //www.nasm.us/.

 nasm -f win32 hei.asm 

Når du kjører denne kommandoen, oppretter NASM en objektfil. En objektfil inneholder maskinkode, men er ikke en kjørbar fil. Vår objektfil kalles hello.obj .

For å opprette kjørbare, vil vi bruke 32-biters versjonen av MinGW (Minimal GNU for Windows) som vil gi gcc-kompilatoren. Den kan lastes ned på //www.mingw.org/.

 gcc -o hello.exe hei.obj 
 Hallo 
 Hei Verden! 

Eksempel: Hei, verden! i 64-bits samling, for Linux

Her er "Hello, World" skrevet for en 64-bits Intel-prosessor. Vi skal kompilere og kjøre den på 64-bit Linux.

 ekstern printf; C-printf-funksjonen, som skal kalles seksjon .data; Dataseksjon, initialiserte variabler msg: db "Hei, verden!", 0; C-strengen avslutter med 0 fmt: db "% s", 10, 0; Utskriftsformatet, "\ n", '0' seksjonen .text; Begynn kodeseksjonen global main; standard gcc inngangspunkt hoved:; programmerket for inngangspunktet trykker rbp; sett opp stabelramme, må justeres mov rdi, fmt mov rsi, msg mov rax, 0; kan også være: xor rax, rax call printf; Ring C printf funksjon pop rbp; gjenopprett stabel mov rax, 0; normal, ingen feil, returverdi rett; komme tilbake 

Kopier og lim inn dette programmet til en ny fil kalt hello.asm .

Sett sammen forsamlingen med NASM, som du kan installere med pakken din. For eksempel på Ubuntu eller Debian kan du installere NASM ved hjelp av apt:

 sudo apt update && sudo apt installere nasm 

Kjør denne kommandoen for å opprette objektfilen din:

 nasm -f elf64 hei.asm 

Objektfilen heter hello.o .

Deretter bruker du gcc til å koble denne objektfilen til de nødvendige bibliotekene på datamaskinen din, og kompilere den til en kjørbar fil som heter hei :

 gcc hello.o-hei 

Til slutt, kjør den kjørbare filen:

 ./Hallo 
 Hei Verden! 

Til referanse er dette det samme programmet, skrevet i C:

 #include int main () {char msg [] = "Hei verden \ n"; printf ( "% s \ n", msg); returner 0; } 

  • Se feilsøkingsrutiner for andre eksempler på lavnivåmonteringskode og tilleggsinformasjon om hva hver rutine gjør.
  • For ytterligere eksempler på monteringsspråk, se Happy Codings nettside.

2GL, Assembler, Lavnivå språk, Maskinspråk, Programmeringsbetingelser