Commit | Line | Data |
---|---|---|
52495eef | 1 | .data |
41b0b0f8 | 2 | input: .space 50 |
52495eef JB |
3 | input_string: .asciiz "Saisir un mot ? " |
4 | msg_palindrome_part_1: .asciiz "Le mot " | |
5 | msg_palindrome_part_2: .asciiz " un palindrome" | |
41b0b0f8 JB |
6 | msg_is: .asciiz " est" |
7 | msg_is_not: .asciiz " n'est pas" | |
52495eef JB |
8 | newline: .asciiz "\n" |
9 | ||
10 | .text | |
11 | main: | |
12 | jal input_word | |
13 | jal clean_and_length_word | |
14 | jal isPalindrome | |
15 | li $v0, 10 | |
16 | syscall | |
17 | ||
18 | input_word: | |
19 | la $a0, input_string | |
20 | li $v0, 4 | |
21 | syscall | |
22 | li $v0, 8 | |
23 | la $a0, input | |
41b0b0f8 | 24 | li $a1, 50 |
52495eef JB |
25 | syscall |
26 | jr $ra | |
27 | ||
28 | clean_and_length_word: | |
41b0b0f8 | 29 | la $s4, ($zero) # word length |
52495eef JB |
30 | la $s0, input # $s0 contains base address of the string buffer |
31 | addi $s3, $0, '\n' # $s3 = '\n' | |
32 | loop1: | |
33 | lb $s1, 0($s0) # load character into $s1 | |
34 | beq $s1, $s3, end1 # break if byte is newline | |
35 | addi $s0, $s0, 1 # increment buffer address | |
36 | addi $s4, $s4, 1 | |
37 | j loop1 | |
38 | end1: | |
41b0b0f8 | 39 | sb $0, 0($s0) # replace newline with 0 |
52495eef JB |
40 | la $a2, ($s4) |
41 | jr $ra | |
42 | ||
43 | isPalindrome: | |
44 | # Check base case | |
45 | slti $t0, $a2, 2 | |
46 | bne $t0, $zero, returnTrue | |
47 | ||
48 | # Make sure first and last are equal | |
49 | lb $t0, 0($a0) | |
50 | addi $t1, $a2, -1 | |
51 | add $t1, $t1, $a0 | |
52 | lb $t1, 0($t1) | |
53 | bne $t0, $t1, returnFalse | |
54 | ||
55 | # Shift pointer, length, recurse | |
56 | addi $a2, $a2, -2 | |
57 | addi $a0, $a0, 1 | |
58 | j isPalindrome | |
59 | ||
60 | returnFalse: | |
61 | addi $v0, $zero, 0 | |
62 | addi $sp, $sp, -4 | |
63 | sw $ra, 0($sp) | |
64 | jal display_not_palindrome | |
65 | lw $ra, 0($sp) | |
66 | addi $sp, $sp, 4 | |
67 | jr $ra | |
68 | ||
69 | returnTrue: | |
70 | addi $v0, $zero, 1 | |
71 | addi $sp, $sp, -4 | |
72 | sw $ra, 0($sp) | |
73 | jal display_palindrome | |
74 | lw $ra, 0($sp) | |
75 | addi $sp, $sp, 4 | |
76 | jr $ra | |
77 | ||
78 | display_palindrome: | |
79 | la $a0, msg_palindrome_part_1 | |
80 | li $v0, 4 | |
81 | syscall | |
82 | la $a0, input | |
83 | li $v0, 4 | |
84 | syscall | |
41b0b0f8 | 85 | la $a0, msg_is |
52495eef JB |
86 | li $v0, 4 |
87 | syscall | |
88 | la $a0, msg_palindrome_part_2 | |
89 | li $v0, 4 | |
90 | syscall | |
91 | la $a0, newline | |
92 | li $v0, 4 | |
93 | syscall | |
94 | jr $ra | |
95 | ||
96 | display_not_palindrome: | |
97 | la $a0, msg_palindrome_part_1 | |
98 | li $v0, 4 | |
99 | syscall | |
100 | la $a0, input | |
101 | li $v0, 4 | |
102 | syscall | |
41b0b0f8 | 103 | la $a0, msg_is_not |
52495eef JB |
104 | li $v0, 4 |
105 | syscall | |
106 | la $a0, msg_palindrome_part_2 | |
107 | li $v0, 4 | |
108 | syscall | |
109 | la $a0, newline | |
110 | li $v0, 4 | |
111 | syscall | |
41b0b0f8 | 112 | jr $ra |