aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs/tme
diff options
context:
space:
mode:
Diffstat (limited to 'semestre 3/architecture des ordinateurs/tme')
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm43
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme4/exo1.asm6
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme4/exo2.asm32
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme4/exo3.asm19
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme4/exo4.asm31
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme4/exo5.asm30
6 files changed, 143 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
diff --git a/semestre 3/architecture des ordinateurs/tme/tme4/exo1.asm b/semestre 3/architecture des ordinateurs/tme/tme4/exo1.asm
new file mode 100644
index 0000000..da99bd9
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/tme/tme4/exo1.asm
@@ -0,0 +1,6 @@
+.data
+o1: .byte 1
+o2: .byte 2
+o3: .byte 3
+o4: .byte 4
+m1: .word 0xAABBCCDD \ No newline at end of file
diff --git a/semestre 3/architecture des ordinateurs/tme/tme4/exo2.asm b/semestre 3/architecture des ordinateurs/tme/tme4/exo2.asm
new file mode 100644
index 0000000..9c66651
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/tme/tme4/exo2.asm
@@ -0,0 +1,32 @@
+.data
+v1: .word -1
+v2: .word 0xFF
+
+o: .byte 0xFF
+.text
+ lui $8, 0x1001
+ lw $9, 0($8)
+ or $4, $0, $9
+ ori $2,$0,1
+ syscall
+
+ lw $10, 4($8)
+ or $4, $10, $10
+ syscall
+
+ addi $9, $9, 1
+ sw $9, 0($8)
+ addi $10, $10, 1
+ sw $10, 4($8)
+
+ addi $8, $8, 8 # on récupère l'adresse de o
+ lb $9, 0($8)
+ or $4, $0, $9
+ syscall # affiche -1 car il l'étend
+ lbu $10, 0($8)
+ or $4, $0, $10
+ syscall # affiche 255 car il n'est pas signé
+
+ ori $2, $0, 10
+ syscall
+ \ No newline at end of file
diff --git a/semestre 3/architecture des ordinateurs/tme/tme4/exo3.asm b/semestre 3/architecture des ordinateurs/tme/tme4/exo3.asm
new file mode 100644
index 0000000..4ccd63a
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/tme/tme4/exo3.asm
@@ -0,0 +1,19 @@
+.data
+ch: .asciiz "coucou"
+.text
+ lui $8, 0x1001
+ ori $2, $0, 4
+ or $4, $0, $8
+ syscall
+
+ # on garde en mémoire les deux caractères
+ lb $9, 0($8)
+ lb $10, 1($8)
+ # on les échanges
+ sb $9, 1($8)
+ sb $10, 0($8)
+ # et on affiche
+ syscall
+
+ ori $2, $0, 10
+ syscall \ No newline at end of file
diff --git a/semestre 3/architecture des ordinateurs/tme/tme4/exo4.asm b/semestre 3/architecture des ordinateurs/tme/tme4/exo4.asm
new file mode 100644
index 0000000..28a4c30
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/tme/tme4/exo4.asm
@@ -0,0 +1,31 @@
+# "123456" = 0x31 32 33 34 35 36 00
+.data
+cod: .byte 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x00
+.text
+ lui $8, 0x1001
+ ori $2, $0, 4
+ or $4, $0, $8
+ syscall
+
+ lb $16, 2($8)
+ or $4, $0, $16
+ ori $2, $0, 1
+ syscall
+
+ # "0" est représenté par 0x30
+ # les autres chiffres sont à la suite de 0x30 jusqu'à 0x39 ("9")
+ # pour transformer le code ASCII d'un chiffre en chiffre, il suffit donc de lui soustraire 0x30 pour obtenir le chiffre
+
+ # on a besoin de mettre 0x30 dans un registre car l'opcode subi n'existe pas
+ ori $9, $0, 0x30
+ sub $17, $16, $9
+ or $4, $0, $17
+ syscall
+
+ ori $18, $0, 0x34 # est l'ascii de "4"
+ sub $18, $18, $9
+ or $4, $0, $18
+ syscall
+
+ ori $2, $0, 10
+ syscall \ No newline at end of file
diff --git a/semestre 3/architecture des ordinateurs/tme/tme4/exo5.asm b/semestre 3/architecture des ordinateurs/tme/tme4/exo5.asm
new file mode 100644
index 0000000..c63dc69
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/tme/tme4/exo5.asm
@@ -0,0 +1,30 @@
+.data
+tab: .word 4, 23, 12, 3, 8, 1
+ .align 2
+s: .space 4
+ .align 2
+p: .space 4
+.text
+ lui $8, 0x1001 # @tab
+ addiu $9, $8, 24 # @s
+ addiu $10, $9, 4 # @p
+ # s = tab[3]
+ lw $11, 12($8)
+ sw $11, 0($9)
+ # p = tab[4]
+ lw $12, 16($8)
+ sw $12, 0($10)
+
+ # tab[0] = s + 1
+ addi $13, $11, 1
+ sw $13, 0($8)
+ # tab[1] = s + p
+ add $13, $11, $12
+ sw $13, 4($8)
+ # tab[2] = tab[5]
+ lw $13, 20($8)
+ sw $13, 8($8)
+
+ # exit()
+ ori $2, $0, 10
+ syscall \ No newline at end of file