← Toutes les leçons

Bits et représentation · Leçon 24 sur 30 · environ 15 minutes

Bits signés et valeur maximale

Comprenez NOT et testez une différence signée avec un masque de signe.

01 / Expliquer

Comprendre l’idée

NOT inverse les 32 bits, pas seulement un octet : NOT 255 donne −256. AND −2147483648 sélectionne le bit de signe d’un entier signé sur 32 bits. Pour une petite différence, un masque de signe non nul indique une différence négative.

Pour choisir le plus grand de a et b, calculez a − b et testez son signe. Si la différence est négative, choisissez b ; sinon choisissez a. Limitez cette méthode au petit intervalle documenté : la conversion sur 32 bits peut perdre de l’information pour de grandes différences arithmétiques.

02 / Essayer

Observer le fonctionnement

Les résultats attendus sont −256 puis 255. L’indicateur négatif décrit l’état ; il n’existe pas d’instruction distincte de saut conditionnel sur un résultat négatif.

LOAD 255
NOT
PRINT
NOT
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, chacun de −10 000 à 10 000, et affichez le plus grand. Utilisez une soustraction et le masque de signe sur 32 bits.

Le vérificateur exécute votre programme actuel de l’éditeur sur une nouvelle machine pour chacun des 5 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
COPY R0 R1
INPUT
COPY R0 R2
LOAD R1
SUB R2
AND -2147483648
#
HALT
Besoin d’un indice ?

Un masque de signe nul signifie que a − b est positif ou nul ; a est donc au moins égal à b.

Afficher une solution expliquée

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

INPUT
COPY R0 R1
INPUT
COPY R0 R2
LOAD R1
SUB R2
AND -2147483648
JUMP_IF_ZERO first
LOAD R2
JUMP show
first: LOAD R1
show: 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.