Exemple calcul moyenne
This commit is contained in:
@@ -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.
|
||||
|
||||
|
68
1-ComputationAndData/MVaP/ExempleCalculMoyenneFetX.mvap
Normal file
68
1-ComputationAndData/MVaP/ExempleCalculMoyenneFetX.mvap
Normal 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
|
Reference in New Issue
Block a user