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
|
.data
.text
# main
addiu $29, $29, -24
# int i = 0
sw $0, 20($29)
# ch = 4($29)
addiu $16, $29, 4
ori $2, $0, 8
or $4, $0, $16
ori $5, $0, 16
syscall
# printf("%s", ch)
or $4, $0, $16
ori $2, $0, 4
syscall
or $17, $0, $16
while:
# while ch[i] != 0
lb $9, 0($17)
beq $9, $0, end_while
# ch[i] = min_to_maj_char(&(ch[i]))
sw $9, 0($29)
or $4, $0, $17
jal min_to_maj_ptr_char
# i++
addiu $17, $17, 1
j while
end_while:
# printf("%s", ch)
or $4, $0, $16
ori $2, $0, 4
syscall
addiu $29, $29, 24
ori $2, $0, 10
syscall
min_to_maj_ptr_char:
addiu $29, $29, -8
sw $31, 4($29)
# if ch[i] >= 'a'
lb $8, 0($4)
sltiu $10, $8, 'a'
bne $10, $0, end_if
# if ch[i] <= 'z'
ori $10, $0, 'z'
sltu $10, $10, $8
bne $10, $0, end_if
# c - 0x20
addiu $8, $8, -0x20
sb $8, 0($4)
end_if:
lw $31, 4($29)
addiu $29, $29, 8
jr $31
|