Silnia w assemblerze zasada działania

1

Witam wszystkich mam pewien problem. Mianowicie mam kod silni w assemblerze, tylko go nie rozumiem. Prosiłbym o wytlumaczenie jego zasady dzialania, to by mi bardzo pomoglo.

.data
prompt: .asciiz "\nPodaj liczbe: "
.text
main:
li $v0, 4
la $a0, prompt
syscall

li $v0, 5
syscall
move $s0, $v0
move $t1, $v0
li $t0, 1
petla:
mul $t0, $t0, $s0

addi $s0, -1
bgtz $s0, petla

li $v0, 1
move $a0, $t0
syscall

li $v0, 10
syscall

1
        .data
 prompt: .asciiz "\nPodaj liczbe: "
         .text
 main:
         li $v0, 4 # numer wywołania systemowego wyświetlającego napis
         la $a0, prompt # adres napisu do $a0
         syscall # wyświetl napis
         
         li $v0, 5 # numer wywołania systemowego pobierającego liczbę
         syscall # pobierz liczbę
         move $s0, $v0 # zapisz $v0 do $s0
         move $t1, $v0 # zapisz $v0 do $t1
         li $t0, 1 # $t0 przyjmuje wartość 1
 petla:
         mul $t0, $t0, $s0 # pomnóż $t0 przez $s0 i zachowaj wynik w $t0
         
         addi $s0, -1 # $s0 = $s0 + (-1)
         bgtz $s0, petla # gdy $s0 większe od zera idź do "petla"
         
         li $v0, 1 # numer wywołania systemowego wyświetlającego liczbę
         move $a0, $t0 # wartość do wyświetlenia ($t0) idzie do $a0
         syscall # wywołanie systemowe
         
         li $v0, 10 # numer wywołania systemowego zamykającego program
         syscall # wywołanie systemowe
0

Ok, dzieki wielkie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1