aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs/tme/tme6/exo1-q1A.asm
diff options
context:
space:
mode:
Diffstat (limited to 'semestre 3/architecture des ordinateurs/tme/tme6/exo1-q1A.asm')
-rw-r--r--semestre 3/architecture des ordinateurs/tme/tme6/exo1-q1A.asm54
1 files changed, 54 insertions, 0 deletions
diff --git a/semestre 3/architecture des ordinateurs/tme/tme6/exo1-q1A.asm b/semestre 3/architecture des ordinateurs/tme/tme6/exo1-q1A.asm
new file mode 100644
index 0000000..322654a
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/tme/tme6/exo1-q1A.asm
@@ -0,0 +1,54 @@
+.data
+ch: .space 11
+.text
+#main
+ # prologue
+ addiu $29, $29, -16
+ # scanf
+ ori $2, $0, 5
+ syscall
+ sw $2, 4($29)
+ # chaine[10] = 0
+ lui $8, 0x1001
+ sb $0, 10($8)
+
+ # i = 9
+ lw $9, 0($29) # i
+ ori $9, $0, 9
+ sw $9, 0($29)
+
+while:
+ # i >= 0
+ lw $9, 0($29)
+ bltz $9, end_while
+ # corps
+ # r = nb % 10
+ lw $10, 4($29) # nb
+ ori $11, $0, 10
+ div $10, $11
+ mfhi $12
+ sw $12, 8($29)
+ # nb /= 10
+ mflo $12
+ sw $12, 4($29)
+ # chaine[i] = r + 0x30
+ # *(chaine + i) = r + 0x30
+ lw $9, 0($29)
+ addu $13, $8, $9
+ lw $10, 8($29) # r
+ addiu $14, $10, 0x30
+ sb $14, 0($13)
+
+ # i -= 1
+ lw $9, 0($29) # i
+ addiu $9, $9, -1
+ sw $9, 0($29)
+ j while
+end_while:
+ ori $2, $0, 4
+ or $4, $0, $8
+ syscall
+ # épilogue
+ addiu $29, $29, 16
+ ori $2, $0, 10
+ syscall \ No newline at end of file