Funktionsaufrufe

Die Fakultät soll nun rekursiv mit Funktionsausrufen programmiert werden:

program

    global:  n (initilaized)

    on halt: n <- n!

    function factorial(n)
        local:      tmp
        returns:    n!
    begin

        if (n>1) then
            tmp <- n
            n   <- n-1
            tmp <- tmp * factorial(n)
            return tmp
        else
            return 1
        end
    end


begin
    n <- factorial(n)
end

Festlegungen für Verwendung der Register

.equ    ZERO,   0
.equ    RIP,    1
.equ    RSP,    3
.equ    CALL,   4
.equ    RET,    5
.equ    N,      6
.equ    LOCAL1, 7
.equ    LOCAL2, 8