diff options
Diffstat (limited to 'semestre 3/architecture des ordinateurs/tme')
5 files changed, 107 insertions, 0 deletions
diff --git a/semestre 3/architecture des ordinateurs/tme/tme3/exercice1.asm b/semestre 3/architecture des ordinateurs/tme/tme3/exercice1.asm new file mode 100644 index 0000000..a4d60aa --- /dev/null +++ b/semestre 3/architecture des ordinateurs/tme/tme3/exercice1.asm @@ -0,0 +1,7 @@ +.data +.text + addi $12, $18, 33 + addu $0, $18, 12 + + ori $2, $0, 10 + syscall diff --git a/semestre 3/architecture des ordinateurs/tme/tme3/exercice2.asm b/semestre 3/architecture des ordinateurs/tme/tme3/exercice2.asm new file mode 100644 index 0000000..9b01763 --- /dev/null +++ b/semestre 3/architecture des ordinateurs/tme/tme3/exercice2.asm @@ -0,0 +1,11 @@ +.data +.text + # dans la question 2, on remplace 137 par 65537 -> ça crash, car 65537 ne peut pas être écrit sur 16 bits + ori $8, $0, 137 + + or $4, $0, $8 + ori $2, $0, 1 + syscall + + ori $2, $0, 10 + syscall diff --git a/semestre 3/architecture des ordinateurs/tme/tme3/exercice3.asm b/semestre 3/architecture des ordinateurs/tme/tme3/exercice3.asm new file mode 100644 index 0000000..bb13955 --- /dev/null +++ b/semestre 3/architecture des ordinateurs/tme/tme3/exercice3.asm @@ -0,0 +1,34 @@ +.data +.text + # on récupère les deux entiers + ori $2, $0, 5 + syscall + or $9, $0, $2 + + ori $2, $0, 5 + syscall + or $10, $0, $2 + + # on gère la division + div $9, $10 + mflo $11 + mfhi $12 + + or $4, $0, $11 + ori $2, $0, 1 + syscall + + or $4, $0, $12 + syscall + + # on mult le quotient par $10 pour reconstruire le nombre + multu $11, $10 + # on récupère la valeur et on y ajoute le reste + mflo $13 + addu $13, $13, $12 + + or $4, $0, $13 + syscall + + ori $2, $0, 10 + syscall
\ No newline at end of file diff --git a/semestre 3/architecture des ordinateurs/tme/tme3/exercice4.asm b/semestre 3/architecture des ordinateurs/tme/tme3/exercice4.asm new file mode 100644 index 0000000..4b18b69 --- /dev/null +++ b/semestre 3/architecture des ordinateurs/tme/tme3/exercice4.asm @@ -0,0 +1,31 @@ +.data +.text + # Operations logiques + ori $8, $0, 0x00FF # $8 = 0x0000 00FF + ori $9, $0, 0xFFF0 # $9 = 0x0000 FFF0 + and $10, $9, $8 # $10 = 0x0000 00F0 + xor $11, $9, $8 # $11 = 0x0000 FF0F + xor $11, $11, $11 # $11 = 0x0000 0000 + + # Decalages + ori $9, $0, 25 # $9 = 0b0...0 0001 1001 + sll $10, $9, 1 # $10 = 0b0...0 0011 0010 + sll $11, $9, 2 # $11 = 0b0...0 0110 0100 + sll $12, $9, 3 # $12 = 0b0...0 1100 1000 + srl $10, $9, 1 # $10 = 0b0...0 0000 1100 + srl $10, $9, 2 # $10 = 0b0...0 0000 0110 + srl $10, $9, 3 # $10 = 0b0...0 0000 0011 + addi $9, $0, -25 #$9 = 0b1111 1...1 1101 0111 + srl $10, $9, 1 # $10 = 0b0111 1...1 1110 1011 + srl $11, $9, 2 # $11 = 0b0011 1...1 1111 1101 + sra $12, $9, 1 # $12 = 0b1111 1...1 1110 1011 + sra $13, $9, 2 # $13 = 0b1111 1...1 1111 1101 + sra $14, $9, 3 # $14 = 0b1111 1...1 1111 1110 + + # Comparaisons + ori $9, $0, 2 # $9 = 0b10 + ori $8, $0, 4 # $9 = 0b10 + slt $11, $8, $9 # $11 = 0 + slt $12, $9, $8 # $12 = 1 + ori $2, $0, 10 + syscall
\ No newline at end of file diff --git a/semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm b/semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm new file mode 100644 index 0000000..16cece8 --- /dev/null +++ b/semestre 3/architecture des ordinateurs/tme/tme3/exercice5.asm @@ -0,0 +1,24 @@ +.data +.text + lui $3, 0xAABB + ori $3, $3, 0xCCDF + + # 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 + + ori $2, $0, 10 + syscall
\ No newline at end of file |
