--- /dev/null
+.data
+input: .space 20
+input_string: .asciiz "Saisir un mot ? "
+msg_palindrome_part_1: .asciiz "Le mot "
+msg_palindrome_part_2: .asciiz " un palindrome"
+msg_is_palindrome: .asciiz "est"
+msg_is_not_palindrome: .asciiz "n'est pas"
+newline: .asciiz "\n"
+
+.text
+main:
+ jal input_word
+ jal clean_and_length_word
+ jal isPalindrome
+ li $v0, 10
+ syscall
+
+input_word:
+ la $a0, input_string
+ li $v0, 4
+ syscall
+ li $v0, 8
+ la $a0, input
+ li $a1, 20
+ syscall
+ jr $ra
+
+clean_and_length_word:
+ la $s4, ($zero)
+ la $s0, input # $s0 contains base address of the string buffer
+ addi $s3, $0, '\n' # $s3 = '\n'
+loop1:
+ lb $s1, 0($s0) # load character into $s1
+ beq $s1, $s3, end1 # break if byte is newline
+ addi $s0, $s0, 1 # increment buffer address
+ addi $s4, $s4, 1
+ j loop1
+end1:
+ la $a2, ($s4)
+ jr $ra
+
+isPalindrome:
+ # Check base case
+ slti $t0, $a2, 2
+ bne $t0, $zero, returnTrue
+
+ # Make sure first and last are equal
+ lb $t0, 0($a0)
+ addi $t1, $a2, -1
+ add $t1, $t1, $a0
+ lb $t1, 0($t1)
+ bne $t0, $t1, returnFalse
+
+ # Shift pointer, length, recurse
+ addi $a2, $a2, -2
+ addi $a0, $a0, 1
+ j isPalindrome
+
+returnFalse:
+ addi $v0, $zero, 0
+ addi $sp, $sp, -4
+ sw $ra, 0($sp)
+ jal display_not_palindrome
+ lw $ra, 0($sp)
+ addi $sp, $sp, 4
+ jr $ra
+
+returnTrue:
+ addi $v0, $zero, 1
+ addi $sp, $sp, -4
+ sw $ra, 0($sp)
+ jal display_palindrome
+ lw $ra, 0($sp)
+ addi $sp, $sp, 4
+ jr $ra
+
+display_palindrome:
+ la $a0, msg_palindrome_part_1
+ li $v0, 4
+ syscall
+ la $a0, input
+ li $v0, 4
+ syscall
+ la $a0, msg_is_palindrome
+ li $v0, 4
+ syscall
+ la $a0, msg_palindrome_part_2
+ li $v0, 4
+ syscall
+ la $a0, newline
+ li $v0, 4
+ syscall
+ jr $ra
+
+display_not_palindrome:
+ la $a0, msg_palindrome_part_1
+ li $v0, 4
+ syscall
+ la $a0, input
+ li $v0, 4
+ syscall
+ la $a0, msg_is_not_palindrome
+ li $v0, 4
+ syscall
+ la $a0, msg_palindrome_part_2
+ li $v0, 4
+ syscall
+ la $a0, newline
+ li $v0, 4
+ syscall
+ jr $ra
\ No newline at end of file