assembly language (tsz. assembly languages)
Assembly language (magyarul: assembly nyelv vagy gépközeli programozási nyelv) a programozás egyik legalacsonyabb szintű formája, amely közvetlenül a számítógép gépi utasításait reprezentálja ember által olvasható szöveges formában. Minden processzor (pl. x86, ARM, MIPS) saját utasításkészlettel rendelkezik, így az assembly nyelv architektúrafüggő.
Fogalom | Jelentés |
---|---|
Utószintű nyelv | Közel van a hardverhez, de még ember által írható |
Utasításkészlet (ISA) | Az adott processzor által értelmezhető gépi parancsok halmaza |
Regiszter | Nagyon gyors, kis méretű memóriaterület a CPU-ban |
Assembler | Olyan program, amely assembly kódot gépi kóddá fordít |
Opcód | Az utasítás bináris megfelelője a gépi nyelvben |
section .data
msg db 'Hello, World!', 0
section .text
global _start
_start:
mov edx, 13 ; üzenet hossza
mov ecx, msg ; üzenet címe
mov ebx, 1 ; stdout (fájl-deszkriptor)
mov eax, 4 ; sys_write hívás
int 0x80 ; rendszerhívás
mov eax, 1 ; sys_exit hívás
xor ebx, ebx ; visszatérési érték: 0
int 0x80
Ez a program kiírja a “Hello, World!” szöveget a terminálra Linux alatt.
Utasítás | Funkció |
---|---|
mov
|
Adatmásolás egyik regiszterből a másikba |
add , sub
|
Összeadás, kivonás |
cmp
|
Összehasonlítás |
jmp
|
Ugrás (feltételes vagy feltétlen) |
push , pop
|
Veremkezelés |
call , ret
|
Alprogramhívás és visszatérés |
int
|
Szoftveres megszakítás (pl. rendszerhívás) |
Regiszter | Leírás |
---|---|
eax , ebx , ecx , edx
|
Általános célú regiszterek |
esp
|
Veremmutató (stack pointer) |
ebp
|
Alapmutató (base pointer) |
eip
|
Utasításszámláló (instruction pointer) |
eflags
|
Állapotjelző bitek (pl. nulla, átvitel, előjel) |
Terület | Példa |
---|---|
Operációs rendszerek | Bootloader, kernel |
Beágyazott rendszerek | Mikrokontrollerek programozása |
Fordítók optimalizálása | Gépi kód generálás, inline assembly |
Reverse engineering | Bináris fájlok elemzése, malware vizsgálat |
Biztonságkutatás | Exploit fejlesztés, shellcode |
Az assembly nyelv lehetővé teszi, hogy a programozó közvetlenül a hardverrel kommunikáljon, utasításról utasításra. Bár ma már ritkábban használják önálló nyelvként, bizonyos területeken nélkülözhetetlen – például rendszerszintű fejlesztésben, firmware-ben, exploit fejlesztésben vagy optimalizált rutinok írásánál.