ajout fichier guide pour le M999
This commit is contained in:
121
architecture/M999/README.md
Normal file
121
architecture/M999/README.md
Normal file
@@ -0,0 +1,121 @@
|
||||
## Le processeur papier M999
|
||||
|
||||
> Le M999 est un processeur papier permettant de comprendre concrètement le fonctionnement d'une architecture Von Neumann. Il s'agit d'une variante du M99 avec un jeu d'instructions simplifié.
|
||||
|
||||
---
|
||||
|
||||
### Présentation
|
||||
|
||||
Le M999 est une machine dotée de :
|
||||
- **1000 cases mémoire** (adresses de 000 à 999), chacune contenant un mot de 3 chiffres
|
||||
- **3 registres** : A, B et R (accumulateur/résultat)
|
||||
- **1 compteur de programme** (PC) indiquant l'adresse de la prochaine instruction
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
### Jeu d'instructions (version 1)
|
||||
|
||||
| Opcode | Instruction | Description |
|
||||
|--------|-------------|-------------|
|
||||
| 0 xy | LDA xy | Charge le mot mémoire d'adresse xy dans le registre A |
|
||||
| 1 xy | LDB xy | Charge le mot mémoire d'adresse xy dans le registre B |
|
||||
| 2 xy | STR xy | Copie le contenu du registre R dans le mot mémoire d'adresse xy |
|
||||
| 3 00 | ADD | R := A + B |
|
||||
| 3 01 | SUB | R := A - B |
|
||||
| 3 99 | NOP | Ne fait rien |
|
||||
| 4 rs rd | MOV rs rd | Copie le registre source dans le registre destination |
|
||||
| 5 xy | JMP xy | Saut inconditionnel à l'adresse xy |
|
||||
| 6 xy | JPP xy | Saut à l'adresse xy si R > 0 |
|
||||
|
||||
**Registres :** 0 = A, 1 = B, 2 = R
|
||||
|
||||
---
|
||||
|
||||
### Jeu d'instructions (version 2)
|
||||
|
||||
La version 2 ajoute deux instructions utiles pour l'algorithme de multiplication russe :
|
||||
|
||||
| Opcode | Instruction | Description |
|
||||
|--------|-------------|-------------|
|
||||
| 3 02 | DIV2 | Divise A par 2 : quotient dans R, reste dans B |
|
||||
| 3 03 | MUL2 | Multiplie A par 2 : résultat dans R |
|
||||
|
||||
---
|
||||
|
||||
### Cycle d'exécution
|
||||
|
||||
Le processeur répète le cycle suivant :
|
||||
|
||||
1. **Fetch** : Lire l'instruction à l'adresse PC
|
||||
2. **Decode** : Décoder l'opcode pour identifier l'opération
|
||||
3. **Execute** : Exécuter l'instruction
|
||||
4. **Incrémenter PC** (sauf si saut)
|
||||
|
||||
Le programme s'arrête quand PC atteint 999.
|
||||
|
||||
---
|
||||
|
||||
### Différences avec le M99
|
||||
|
||||
| Opération | M99 | M999 |
|
||||
|-----------|-----|------|
|
||||
| Charger A | 1xy | 0xy |
|
||||
| Charger B | 2xy | 1xy |
|
||||
| Stocker R | 0xy | 2xy |
|
||||
| Addition | 400 | 300 |
|
||||
| Soustraction | 401 | 301 |
|
||||
|
||||
Le M999 utilise une numérotation plus intuitive : 0 pour charger A, 1 pour charger B, 2 pour stocker.
|
||||
|
||||
---
|
||||
|
||||
### Activité : La multiplication paysanne russe
|
||||
|
||||
Cette méthode ancestrale permet de multiplier deux nombres en utilisant uniquement :
|
||||
- Des divisions par 2 (partie entière)
|
||||
- Des multiplications par 2
|
||||
- Des additions
|
||||
|
||||

|
||||
|
||||
#### Exemple : 13 × 5
|
||||
|
||||
| Colonne A (÷2) | Colonne B (×2) |
|
||||
|----------------|----------------|
|
||||
| 13 | 5 |
|
||||
| 6 | ~~10~~ |
|
||||
| 3 | 20 |
|
||||
| 1 | 40 |
|
||||
|
||||
On raye les valeurs de B quand A est pair, puis on additionne les valeurs restantes :
|
||||
**5 + 20 + 40 = 65**
|
||||
|
||||
#### Objectif
|
||||
|
||||
Implémenter cet algorithme sur le M999 en utilisant le jeu d'instructions version 2.
|
||||
|
||||
**Aide :** Pour savoir si A est pair, on utilise DIV2 (3 02) qui place le reste dans B. Si B = 0, alors A était pair.
|
||||
|
||||
---
|
||||
|
||||
### Pour aller plus loin
|
||||
|
||||
- Écrire un programme qui calcule la factorielle d'un nombre
|
||||
- Écrire un programme qui teste si un nombre est premier
|
||||
- Comparer l'efficacité de la multiplication russe avec une multiplication par additions successives
|
||||
|
||||
---
|
||||
|
||||
Sources :
|
||||
- [Informatique Sans Ordi](https://github.com/InfoSansOrdi/M999) - Philippe Marquet et Martin Quinson
|
||||
- Jeu d'instructions adapté par Philippe Boddaert
|
||||
|
||||
---
|
||||
|
||||
> Auteur : Florian Mathieu
|
||||
>
|
||||
> Licence CC BY NC
|
||||
>
|
||||
> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a>
|
||||
Reference in New Issue
Block a user