Vad är Assembly Language?

Ibland kallad montering eller ASM är ett monteringsspråk ett programmeringsspråk på låg nivå.

Program som skrivs på monteringsspråk sammanställs av en montör. Varje monterare har sitt eget monteringsspråk, som är utformat för en specifik datorarkitektur.

Maskinspråk är bara en serie siffror, vilket inte är lätt för människor att läsa. Med hjälp av ASM kan programmerare skriva läsbar program som motsvarar nästan exakt maskinens språk.

Nackdelen är att allt som datorn gör måste beskrivas exakt, i exakt detalj. Fördelen är att programmeraren har maximal kontroll över vad datorn gör.

Varför är ASM ett "lågnivå" språk?

Assembly kallas ett programmeringsspråket på låg nivå eftersom det finns (nästan) ett ett-till-ett-förhållande mellan vad det berättar datorn ska göra och vad datorn gör. I allmänhet innehåller en rad i ett monteringsprogram högst en instruktion för datorn.

Hur skiljer sig ASM från ett "högnivå" språk?

Språk på hög nivå ger abstraktioner av lågnivåoperationer som gör det möjligt för programmeraren att fokusera mer på att beskriva vad de vill göra, och mindre om hur det ska göras . Programmering på detta sätt är bekvämare och gör programmen lättare att läsa vid offret av lågnivåkontroll.

Program som skrivs på språk på hög nivå kommer aldrig att matcha den raka hastigheten och effektiviteten hos program som skrivs i montering. Exempel på språk på hög nivå inkluderar Python, Java, JavaScript, Clojure och Lisp.

Vad är ett "mellannivå" språk?

Språk på mellannivå eller på lägre nivå ger vissa abstraktioner på hög nivå för att göra programmerarens liv enklare, samtidigt som de ger tillgång till lågnivåoperationer. De brukar skriva operativsystem, så kallas de ibland systemprogrammeringsspråk .

Program som skrivs på språk på mellannivå kan också fungera, eller nästan lika bra som program som skrivs på monteringsspråk. Exempel på programmeringssprog på mellannivå inkluderar C, C ++, Ada, Nim och Rust.

Är ASM bärbar?

Nej. Eftersom monteringsspråk är knutna till en specifik datorarkitektur, är de inte bärbara. Ett program som är skrivet i ett monteringsspråk skulle behöva skrivas om fullständigt för att det ska kunna köras på en annan typ av maskin.

Portabilitet är en av de främsta fördelarna med språk på högre nivå. C-programmeringsspråket kallas ofta "bärbar montering" eftersom C-kompilatorer existerar för nästan alla moderna systemarkitekturer. Ett program som skrivs i C kan kräva några ändringar innan det kommer att kompileras på en annan dator, men kärnspråket är bärbart.

Generellt sett är det högre språket ett språk, ju färre ändringar måste göras för att det ska kunna köras på en annan arkitektur. Lägsta språk - maskinens språk och monteringsspråk - är inte bärbara.

Exempel: Hej världen! i 32-bitars montering, för Windows

Här är "Hello, World" skrivet för en 32-bitars Intel-processor. Det kommer också att köras på en 64-bitars processor. Vi kommer att kompilera och köra den på Windows 10.

 global _main extern _printf sektion .text _main: push message call _printf lägg till esp, 4 rätt meddelande: db 'Hej, Värld!', 10, 0 

För att börja, öppna Anteckningsblock. Kopiera och klistra in koden ovan till en ny textfil och spara filen som hello.asm .

För att kompilera aggregatet använder vi NASM, Netwide Assembler. Den kan laddas ner på //www.nasm.us/.

 nasm -f win32 hej.asm 

När du kör det här kommandot skapar NASM en objektfil. En objektfil innehåller maskinkod, men är inte en exekverbar fil. Vår objektfil kallas hello.obj .

För att skapa körbar, använder vi 32-bitarsversionen av MinGW (Minimal GNU för Windows) som kommer att ge gcc-kompilatorn. Den kan laddas ned på //www.mingw.org/.

 gcc -o hello.exe hej.obj 
 Hej 
 Hej världen! 

Exempel: Hej världen! i 64-bitars montering, för Linux

Här är "Hello, World" skrivet för en 64-bitars Intel-processor. Vi kommer att kompilera och köra den på 64-bitars Linux.

 extern printf; C printf-funktionen, som ska kallas sektion. data; Datasektion, initialiserade variabler msg: db "Hej världen!", 0; C-strängen slutar med 0 fmt: db "% s", 10, 0; Printf-formatet, "\ n", "0" sektionen .text; Börja kodavsnitt globalt huvud; Standardinställningen för gcc-ingångspunkten:; programmärket för ingångspunkten tryck rbp; uppsättning stapelram, måste vara inriktad mov rdi, fmt mov rsi, msg mov rax, 0; kan också vara: xor rax, rax call printf; Ring C printf funktion pop rbp; återställa stack mov rax, 0; normalt, inget fel, returt värde; lämna tillbaka 

Kopiera och klistra in det här programmet i en ny fil som heter hello.asm .

Kompilera sedan enheten med NASM, som du kan installera med din pakethanterare. Till exempel på Ubuntu eller Debian kan du installera NASM med hjälp av apt:

 sudo apt uppdatera && sudo apt installera nasm 

Kör det här kommandot för att skapa din objektfil:

 nasm -f elf64 hej.asm 

Objektfilen heter hello.o .

Använd sedan gcc för att länka den här objektfilen till nödvändiga bibliotek på din dator och kompilera den till en körbar fil som heter hej :

 gcc hej.å-hej 

Slutligen kör den körbara filen:

 ./Hej 
 Hej världen! 

För referens är detta samma program, skrivet i C:

 #include int main () {char msg [] = "Hej värld \ n"; printf ( "% s \ n", msg); returnera 0; } 

  • Se felsökningsrutiner för andra exempel på lågnivåmonteringskod och ytterligare information om vad varje rutin gör.
  • För ytterligare exempel på monteringsspråk, se webbplatsen Happy Codings.

2GL, Assembler, Lågnivå språk, Maskinspråk, Programmeringsvillkor