aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs/tme/tme3
diff options
context:
space:
mode:
Diffstat (limited to 'semestre 3/architecture des ordinateurs/tme/tme3')
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm43
1 files changed, 25 insertions, 18 deletions
diff --git a/semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm b/semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm
index 16cece8..b9c3fb0 100644
--- a/semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm
+++ b/semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm
@@ -1,24 +1,31 @@
.data
.text
lui $3, 0xAABB
- ori $3, $3, 0xCCDF
+ ori $3, $3, 0xCCDD
- # variable définissant le bit qu'on déplace
- ori $4, $0, 3
- # on génère le mask pour sélectionner le bit
-st: ori $8, $0, 1 # est le mask
- ori $9, $0, 3 # est le décallage pour le mask
- subu $9, $9, $4 # le nombre de décallage du bit pour le mask
- sllv $8, $8, $9 # on génére le mask
- # on applique le mask
- and $10, $3, $8 # on sélectionne le bon bit
- srlv $10, $10, $4 # on décalle le bit
- # on ajoute le résultat
- or $5, $5, $10
- # on boucle
- ori $11, $0, 1
- subu $4, $4, $11
- bgez $4, st
+ # on sélectionne o_1, on le décalle de 3, on l'ajoute
+ # on sélectionne o_2, on le décalle de 2, on l'ajoute
+ # on sélectionne o_3, on le décalle de 1, on l'ajoute
+ # on sélectionne o_4, on le décalle de 0, on l'ajoute
+
+ ori $6, $0, 31 # est le nombre - 1 de bit à modifier
+ or $7, $0, $6 # est notre i de la boucle qui bouge
+repeat:
+ ori $8, $0, 1 # masque
+ sub $10, $6, $7 # décallage pour sélection
+ sllv $8, $8, $10 # on adapte notre masque pour prendre le bon
+ and $9, $3, $8 # on sélectionne le bit
+ srlv $9, $9, $10 # on remet le bit à l'origine
+ sllv $9, $9, $7 # on le décalle
+ or $4, $4, $9 # on l'ajoute
+ # on calcule le nouveau i dans $7
+ ori $12, $0, 1
+ sub $7, $7, $12
+ # on boucle si $7 >= 0
+ bgez $7, repeat
+
+ ori $2, $0, 35
+ syscall
ori $2, $0, 10
- syscall \ No newline at end of file
+ syscall