Hvad er Assembly Language?

Sommetider benævnt samling eller ASM er et samlingssprog et programmeringssprog på lavt niveau.

Programmer skrevet på samlingssprog er udarbejdet af en montør. Hver assembler har sit eget samlingssprog, som er designet til en bestemt computerarkitektur.

Maskinsprog er bare en række tal, hvilket ikke er let for mennesker at læse. Ved hjælp af ASM kan programmører skrive læsbare programmer, der næsten svarer til maskinens sprog.

Ulempen er, at alt, hvad computeren gør, skal beskrives eksplicit, i nøjagtige detaljer. Fordelen er, at programmøren har maksimal kontrol over, hvad computeren gør.

Hvorfor er ASM et "lavt niveau" sprog?

Montering kaldes et programmeringssprog på lavt niveau, fordi der er (næsten) et forhold mellem det, det fortæller computeren at gøre, og hvad computeren gør. Generelt indeholder én linje i et samlingsprogram maksimalt en instruktion til computeren.

Hvordan er ASM forskellig fra et "højt niveau" sprog?

High-level sprog giver abstraktioner af lavt niveau operationer, som giver programmereren mulighed for at fokusere mere på at beskrive, hvad de vil gøre, og mindre om hvordan det skal gøres . Programmering på denne måde er mere praktisk og gør programmer lettere at læse ved ofre for lavt niveau kontrol.

Programmer skrevet på højt niveau sprog vil aldrig svare til den hurtige hastighed og effektivitet af programmer skrevet i samling. Eksempler på højt niveau sprog omfatter Python, Java, JavaScript, Clojure og Lisp.

Hvad er et "mid-level" sprog?

Mellemniveau eller lavt niveau sprog giver nogle abstraktioner på højt plan for at gøre programmørens liv nemmere, samtidig med at det giver adgang til lavt niveau operationer. De bruges ofte til at skrive operativsystemer, så de kaldes nogle gange systemprogrammeringssprog .

Programmer, der er skrevet på mellemniveau, kan også fungere, eller næsten som programmer, der er skrevet på samlingssprog. Eksempler på mid-level programmeringssprog omfatter C, C ++, Ada, Nim og Rust.

Er ASM bærbar?

Nej. Da samlesprog er bundet til en bestemt computerarkitektur, er de ikke bærbare. Et program skrevet på et forsamlingssprog ville skulle være fuldstændig omskrevet for at kunne køre på en anden type maskine.

Bærbarhed er en af ​​de største fordele ved højere sprog. C-programmeringssproget kaldes ofte "bærbar samling", fordi C-kompilatorer eksisterer for næsten alle moderne systemarkitekturer. Et program, der er skrevet i C, kan kræve nogle ændringer, før det vil kompilere på en anden computer, men kernens sprog er bærbart.

Generelt er det højere sprog et sprog, jo færre ændringer skal gøres for at det kan køre på en anden arkitektur. Det laveste sprog - maskinsprog og samlingssprog - er ikke bærbart.

Eksempel: Hej, verden! i 32-bit samling, til Windows

Her er "Hello, World" skrevet til en 32-bit Intel-processor. Det vil også køre på en 64-bit processor. Vi vil kompilere og køre den på Windows 10.

 global _main ekstern _printf sektion .text _main: push message call _printf tilføj esp, 4 ret besked: db 'Hej, World!', 10, 0 

For at starte, skal du åbne Notesblok. Kopier og indsæt koden ovenfor i en ny tekstfil, og gem filen som hello.asm .

For at kompilere samlingen bruger vi NASM, Netwide Assembler. Den kan downloades på //www.nasm.us/.

 nasm -f win32 hej.asm 

Når du kører denne kommando, opretter NASM en objektfil. En objektfil indeholder maskinkode, men er ikke en eksekverbar fil. Vores objektfil hedder hello.obj .

For at oprette den eksekverbare, vil vi bruge 32-bit versionen af MinGW (Minimal GNU til Windows), som vil give gcc compiler. Den kan downloades på //www.mingw.org/.

 gcc -o hello.exe hej.obj 
 Hej 
 Hej Verden! 

Eksempel: Hej, verden! i 64-bit samling, til Linux

Her er "Hello, World" skrevet til en 64-bit Intel-processor. Vi vil kompilere og køre den på 64-bit Linux.

 ekstern printf; C printf funktionen, der skal kaldes sektion. data; Data sektion, initialiserede variabler msg: db "Hej verden!", 0; C-streng slutter med 0 fmt: db "% s", 10, 0; Printf-formatet, "\ n", '0' sektionen .text; Begynd kode sektion global main; standard gcc indgangspunkt hoved:; programmærket for entry point push rbp; opsætningsstabelramme skal indstilles mov rdi, fmt mov rsi, msg mov rax, 0; kan også være: xor rax, rax call printf; Opkald C printf funktion pop rbp; gendannelse stack mov rax, 0; normal, ingen fejl, returværdi ret; Vend tilbage 

Kopier og indsæt dette program i en ny fil kaldet hello.asm .

Derefter kompilere samlingen med NASM, som du kan installere med din pakkechef. For eksempel på Ubuntu eller Debian kan du installere NASM ved hjælp af apt:

 sudo apt opdatering && sudo apt install nasm 

Kør denne kommando for at oprette din objektfil:

 nasm -f elf64 hej.asm 

Objektfilen hedder hello.o .

Brug derefter gcc til at forbinde denne objektfil til de nødvendige biblioteker på din computer og kompilere den til en eksekverbar fil kaldet hej :

 gcc hello.o-hej 

Endelig kør den eksekverbare fil:

 ./Hej 
 Hej Verden! 

Til reference er dette det samme program, skrevet i C:

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

  • Se fejlretningsrutiner for andre eksempler på lavniveaumonteringskode og yderligere oplysninger om, hvad hver rutine gør.
  • For yderligere eksempler på monteringssprog, se hjemmesiden for Happy Codings.

2GL, Assembler, Lavt sprog, Maskinsprog, Programmeringsbetingelser