← Toutes les leçons

La pile et les fonctions · Leçon 19 sur 30 · environ 12 minutes

La pile : dernier entré, premier sorti

Sauvegardez des valeurs sur la pile de données et récupérez-les dans l’ordre inverse.

01 / Expliquer

Comprendre l’idée

PUSH sauvegarde R0 sur la pile de données. POP retire la valeur empilée le plus récemment et la place dans R0. Cet ordre « dernier entré, premier sorti » ressemble à une pile d’assiettes : la dernière posée est la plus facile à retirer.

La pile de données pédagogique est distincte de la grille mémoire de 256 octets. SP commence à 255 et diminue avec les données sauvegardées ou les cadres d’appel. La capacité combinée est de 256 entrées ; POP sur une pile de données vide provoque une erreur.

02 / Essayer

Observer le fonctionnement

Vous devriez voir 22 puis 11. Observez la pile redevenir vide et SP revenir à 255.

LOAD 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
HALT

Avancez pas à pas pour suivre une instruction à la fois. Vous pouvez modifier l’exemple et le rejouer.

03 / Défi

Le faire fonctionner

Lisez deux entiers, sauvegardez-les tous deux sur la pile de données, puis affichez-les dans l’ordre inverse. Utilisez PUSH et POP plutôt que des valeurs fixes.

Le vérificateur exécute votre programme actuel de l’éditeur sur une nouvelle machine pour chacun des 3 cas de test. Il fournit lui-même les entrées et la mémoire préparée ; la sortie et la mémoire actuelles du laboratoire ne décident pas du résultat.

INPUT
PUSH
INPUT
PUSH
#
HALT
Besoin d’un indice ?

Chaque POP modifie R0 ; affichez sa valeur avant de retirer la suivante.

Afficher une solution expliquée

Lisez le programme, prévoyez l’effet de chaque instruction, puis suivez-le pas à pas dans le laboratoire.

INPUT
PUSH
INPUT
PUSH
POP
PRINT
POP
PRINT
HALT

Laboratoire du processeur en émojis

Prêt · 0 cycles

Programme en émojis

Saisissez LOAD, ADD ou un autre nom d’instruction, puis Espace pour insérer l’émoji. Ctrl/⌘ + Entrée exécute ou suspend ; Échap suspend ; Ctrl/⌘ + ] indente. Tab déplace le focus. Les étiquettes utilisent deux-points. Les sauts utilisent des adresses d’instructions à partir de zéro.

Carte des instructions et points d’arrêt (0)

Un point d’arrêt suspend avant son instruction. Exécuter franchit une fois le point d’arrêt actuel ; Pas à pas exécute directement son instruction. Modifier le code efface les anciens points d’arrêt et l’état machine.

    Registres du processeur

    R0
    0
    R1
    0
    R2
    0
    R3
    0
    R4
    0
    R5
    0
    R6
    0
    R7
    0
    Compteur ordinal (PC)
    0
    Pointeur de pile (SP)
    255
    Indicateurs
    Zéro: inactif · Négatif: inactif · Dépassement: inactif
    Délai demandé
    0 ms
    Piles et cadres de boucle

    SP = 255 − profondeur des données − profondeur des appels. La pile est distincte de la mémoire.

    Pile de données (bas → haut)

    Vide

    Adresses de retour des appels (bas → haut)

    Vide

    Cadres de boucle

    Vide

    Sorties et entrées

    Exécutez une instruction PRINT pour voir une sortie.

    Entrées en attente: Vide

    Mémoire · 256 octets · 0 non nuls

    Chaque case indique adresse:valeur. R = lecture à ce pas ; W = écriture à ce pas. Sélectionnez une case pour l’examiner ou l’initialiser avant l’exécution. Les flèches déplacent la sélection, Début/Fin visent les extrémités de la ligne et Ctrl/⌘ + Début/Fin celles de toute la mémoire.

    Réinitialisez avant de préparer la mémoire. Les valeurs enregistrées sont réduites à 0–255.
    Trace d’exécution · 0 entrées

    Les entrées récentes sont ci-dessous. Examinez n’importe quel indice à partir de zéro pour voir les états complets et indépendants avant et après.

    Vérifier votre défi

    Vous pouvez lancer cette vérification à tout moment. Tous les cas doivent réussir pour enregistrer la leçon comme terminée.

    La progression utilise seulement localStorage. Elle reste dans ce navigateur et n’est jamais envoyée à un serveur.