Apelul de proceduri în Assembly se bazează pe cooperarea a două instrucțiuni hardware: CALL (care împinge adresa instrucțiunii următoare pe stivă și sare la funcție) și RET (care extrage acea adresă din stivă și revine în apelant).
Anatomia standard a unei funcții x86_64 (Prolog, Corp, Epilog)
global aduna_numere
section .text
aduna_numere:
; --- PROLOGUL FUNCȚIEI ---
push rbp ; Salvează vechiul cadru de bază
mov rbp, rsp ; Fixează noul cadru de bază al stivei
sub rsp, 16 ; Alocă spațiu pentru variabile locale (dacă e nevoie)
; --- CORPUL FUNCȚIEI ---
; Parametrii primiți conform ABI: RDI = primul număr, RSI = al doilea număr
mov rax, rdi ; Copiază primul parametru în RAX
add rax, rsi ; Adaugă al doilea parametru (RAX = RDI + RSI)
; Valoarea returnată trebuie lăsată ÎNTOTDEAUNA în registrul RAX!
; --- EPILOGUL FUNCȚIEI ---
mov rsp, rbp ; Eliberează memoria locală alocată pe stivă
pop rbp ; Restaurează vechiul cadru RBP
ret ; Extrage adresa de revenire și sare înapoi la apelant
Întrebări & Exemple de Cod:
Proceduri și Funcții în Assembly: Instrucțiunile CALL, RET și Cadrul de Stivă (RBP)Ai o nelămurire despre utilizarea comenzii
Proceduri și Funcții în Assembly: Instrucțiunile CALL, RET și Cadrul de Stivă (RBP)sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.