SYSCALL = 0x80
EXIT = 1
WRITE = 4
READ = 3
STDOUT = 1
STDIN = 0
ZERO = 0
BUFOR_SIZE = 10
BAZA_SYSTEMU = 10
.data
buf_size = 31
text_size: .long 0
bufor: .space buf_size
.text
.global _start
_start:
movl $1, %eax
push %eax #przeslanie parametru
call silnia
_t9: #wynik w %rax
#poprawne wyjscie z programu
movl $EXIT, %eax
int $SYSCALL
silnia:
push %ebp #zapis stosu programu głównego
movl %esp, %ebp # ustawienie nowego stosu w miejscu aktualnej pozycji stosu
movl 16(%ebp), %ebx # pobranie 1 parametru, czyli 5
_t1:
cmp $1, %ebx # jeśli 1 to koniec, dalej nie ma potrzeby wchodzi w rekurencje
je silnia_ret #do ret
dec %ebx
push %ebx #kolejny argument na stos, zmniejszony o 1
call silnia # rekurencja
# pomnożenie aktualnego parametru razy wynik poprzedniego wywołania
movl 16(%ebp), %ebx
_t2:
imul %ebx, %eax
_t3:
# czyli: n * factorial( n - 1 )
# koniec
jmp koniec
silnia_ret:
movl $1, %eax
koniec:
_t5:
# przywrocenie stosu POPRZEDNIEGO wywołania funkcji
movl %ebp, %esp
pop %ebp
ret #powrót do adresu instrukcji zapisanej na stosie
movl $EXIT, %eax
int $SYSCALL
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}