Exemple calcul moyenne

This commit is contained in:
2025-10-06 11:30:59 +02:00
parent cd798638f4
commit 6a6db8f514
2 changed files with 92 additions and 1 deletions

View File

@@ -76,7 +76,30 @@ Introduction informelle de la Machine Virtuelle à Pile comme modèle simplifié
### séance du lundi 6/10.
Machine virtuelle à pile (MVàP).
Un peu de background sur l'architecture, en particulier la hiérarchie de la mémoire d'une machine moderne. Illustration sur mon portable.
* Registres : une dizaine 64 bits chaque.
* Cache L1, L2, L3 : entre la RAM et les registres, quelques Mo (ma méchine 16 Mo Bytes).
* RAM : plusieurs Giga (mémoire vive) 32 Ga sur ma machine
* Disque : 1 Tera.
à chaque étage, on fait en gros fois 1000. La vitesse d'accès (et le prix) est inversement proportionnel.
Explication : assembleur pour chaque famille de processeur (dépend du fabriquant AMD ou Intel)
En pratique: on a souvent un assembleur abstrait indépendant du matériel.
La traduction d'un code de haut niveau se fait en deux temps. D'abord du langage de haut niveau vers cet assembleur, puis de cet assembleur vers le véritable assembleur du constructeur du processeur.
Évocation Loi de Moore : doublement de la mémoire dans les années 80, 90, viser le bon bussiness plan car projet prend 10 ans entre début et livraison des premiers clients.
Évocation: partage de la RAM entre chaque processus.
Un processus a une pile (pour les choses petites) et un tas (pour les choses grandes). Sur la pile on indique l'adresse de quelque chose de gros dans le tas.
Machine virtuelle à pile (MVàP). Un modèle académique simplifié.
### séance du lundi 13/10.

View File

@@ -0,0 +1,68 @@
#### Exemple vu en cours le 6/10/2025 (calcul de moyenne de F et X,
### Max (1/3F+2/3 X; X)
PUSHI 0 # F habite à l'adresse 0
PUSHI 0 # X habite à l'adresse 1
PUSHI 0 # R1 habite à l'adresse 2
PUSHI 0 # R2 habite à l'adresse 3
PUSHI 0 # R3 habite à l'adresse 4
READ
STOREG 0
READ
STOREG 1
# PUSHG adr # valeur sur la pile
# STOREG adr # MàJ de la variable
# 
#
# Je calcule F/3 et je le stocke dans R1
PUSHG 0 # récupère valeur de F
PUSHI 3
DIV
STOREG 2
# Je calcule X*2/3 et je stocke dans R2
PUSHG 1 # récupère la valeur de X
PUSHI 2
MUL
PUSHI 3
DIV
STOREG 3
# Je fais la somme des deux et je l'écris dans R3
PUSHG 2 # valeur de R1
PUSHG 3 # valeur de R2
ADD
STOREG 4 # affectation de R3
### du code avec branchement ici : Max de X et R3.
# Je veux récupérer R3 et X
PUSHG 1 # X
PUSHG 4 # R3
SUP
JUMPF 0 # si faux il faut écrire R3
# si plus petit (test vrai pas de saut), je veux écrire X
PUSHG 1 # X
JUMP 1
# sinon je veux écrire R3
LABEL 0 # le cas
PUSHG 4 # R3
JUMP 1
# Je veux écrire la bonne valeur
LABEL 1 # la partie du code qui écrit (la suite)
WRITE
POP
# vider la mémoire
POP
POP
POP
POP
POP
HALT