File: fact.asm

package info (click to toggle)
ocaml-doc 3.09-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 10,428 kB
  • ctags: 4,963
  • sloc: ml: 9,244; makefile: 2,413; ansic: 122; sh: 49; asm: 17
file content (21 lines) | stat: -rw-r--r-- 1,068 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Le programme principal
        read                    # lecture de l'argument (dans r 1)
        jmp     fact, ra        # calcul de la factorielle
        write                   # criture du rsultat (r 1)
        stop                            

# La fonction factorielle(N)
# L'argument N est dans r 1. Le rsultat est mis dans r 1.
fact:   braz    r 1, fact_0     # N = 0 ?
        sub     sp, 8, sp       # rserve deux places dans la pile
        store   sp, 0, ra       # sauvegarde de l'adresse de retour
        store   sp, 4, r 1      # et de la valeur de N
        sub     r 1, 1, r 1
        jmp     fact, ra        # appel rcursif sur N-1
        load    sp, 4, r 2      # rcupration de la valeur de N
        mult    r 1, r 2, r 1   # calcul de N * fact(N-1)
        load    sp, 0, ra       # rcupration de l'adresse de retour
        add     sp, 8, sp       # et de la place en pile
        jmp     ra, r 0         # retour  l'appelant
fact_0: add     r 0, 1, r 1     # mettre 1 dans r1
        jmp     ra, r 0         # retour  l'appelant