global main extern printf section .data napis: db a=%d b=%d .10.0 ;do a i b jest chyba to wpisane ale nie jestem pewien section .bss parametry: resq 2 ;8 bitowa zmienna w pamięci wiadomo jest ich dwie section .text main: push rbp ;tak zwana ramka stosu mov rbp,rsp ;ustawienie wskaźnika na pierwszy element stosu mov rdi,666 mov rsi,1000 mov [parametry],rax ;wpisanie wartości do pamięci mov [parametry+8],rbx mov rdi,parametry mov rsi,parametry+8 call swap_reg ;wywołanie funkcji mov rax,[parametry] mov rbx,[parametry+8] mov rdi, qword napis mov rsi,rax mov rdx,rbx mov rax,0 call printf mov rsp,rbp ;zwolnienie pamięci po zmiennej lokalnej pop rbp ;przywrócenie starej ramki ret ;powrót, ściągnięcie adresu powrotu z stosu i skok do kolejnej instrukcji po call swap_reg: push rbp ;zachowanie starej ramki main'a mov rbp,rsp ;ustawienie wskańnika na nowej ramce push r12 ;umieszczenie rejestrów roboczych na stosie push r13 mov r12,[rdi] ;przekazanie wartości mov r13,[rsi] xor r12,r13 xor r13,r12 xor r12,r13 mov [rdi],r12 mov [rsi],r13 pop r13 ;usunięcie zmiennych ze stosu pop r12 mov rsp,rbp ;zwolnienie pamięci pop rbp ;ściągnięcie ramki funkcji ret ;powrót do instrukcji po call