Gestion des exposants#

Attention aux INT overflow avec MVaP : 2^3^4 suffit à faire un INT overflow par exemple. Plus grand entier MVAP 2**42 = 4398046511104.

Ce code MVAP affiche le résultat de 2^3.

JUMP 4

# ---------- fonction EXP(nombre, exposant) ----------
# Renvoie résultat = nombre^exposant
#
# Places locales :
#   résultat -> -5
#   nombre -> -4
#   exposant -> -3
LABEL 0
    # à chaque étape i, 0 <= i <= exposant, résultat stocke la valeur nombre^i
    # et contient la valeur nombre^exposant à la fin
    PUSHI 1 # résultat = 1
    STOREL -5

    LABEL 1 # while exposant > 0
        PUSHL -3 # exposant
        PUSHI 0
        SUP # if (exposant > 0)
        JUMPF 2

        # résultat *= nombre
        PUSHL -5 # résultat
        PUSHL -4 # nombre
        MUL
        STOREL -5

        # exposant -= 1
        PUSHL -3
        PUSHI 1
        SUB
        STOREL -3

        JUMP 1

        # ici on a résultat = nombre^exposant
        LABEL 2
            RETURN

LABEL 4
    PUSHI 0 # résultat -> -5
    PUSHI 2 # nombre -> -4
    PUSHI 3 # exposant -> -3

    CALL 0 # EXP(2, 3)

    POP # exposant
    POP # nombre

    WRITE # print(résultat)
    POP # résultat
HALT