1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
.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)
for:
# i >= 0
lw $9, 0($29)
bltz $9, end_for
# corps
# r = nb % 10
lw $10, 4($29) # nb
ori $11, $0, 10
div $10, $11
mfhi $12 # r
# nb /= 10
mflo $10
sw $10, 4($29)
# chaine[i] = r + 0x30
# *(chaine + i) = r + 0x30
addu $13, $8, $9
addiu $12, $12, 0x30
sb $12, 0($13)
# i -= 1
addiu $9, $9, -1
sw $9, 0($29)
j for
end_for:
ori $2, $0, 4
or $4, $0, $8
#syscall
# nbzero = 0
ori $12, $0, 0
# i = 0
ori $9, $0, 0
while:
sltiu $10, $9, 9
beq $10, $0, end_while
addu $11, $8, $9
lb $11, 0($11)
addiu $11, $11, -0x30
bne $11, $0, end_while
addiu $12, $12, 1
addiu $9, $9, 1
j while
end_while:
ori $2, $0, 1
or $4, $0, $12
#syscall
ori $9, $0, 0
ori $10, $0, 10
subu $10, $10, $12
for2:
sltu $11, $9, $10
beq $11, $0, end_for2
addu $13, $8, $9
addu $14, $13, $12
lb $15, 0($14)
sb $15, 0($13)
addiu $9, $9, 1
j for2
end_for2:
ori $2, $0, 4
or $4, $0, $8
syscall
# épilogue
addiu $29, $29, 16
ori $2, $0, 10
syscall
|