aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs/tme/tme7/exo2-q1.asm
blob: 2f22fd8e5b8ca529bc0d940c90603b4817cf45b0 (plain)
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
.data
.text
# main
	addiu $29, $29, -36
	sw $0, 32($29) # i = 0
	# ch1 = 0($29)
	# ch2 = 16($29)
	
	or $16, $0, $29
	addiu $17, $29, 16
	
	ori $2, $0, 8
	or $4, $0, $16
	ori $5, $0, 16
	syscall
	
	ori $2, $0, 8
	or $4, $0, $17
	ori $5, $0, 16
	syscall
	
	# printf("%s", ch1)
	or $4, $0, $16
	ori $2, $0, 4
	syscall
	# min_to_maj_chaine(ch1)
	addiu $29, $29, -4
	or $4, $0, $16
	sw $4, 0($29)
	jal min_to_maj_chaine
	# printf("%s", ch1)
	or $4, $0, $16
	ori $2, $0, 4
	syscall
	
	# printf("%s", ch2)
	or $4, $0, $17
	ori $2, $0, 4
	syscall
	# min_to_maj_chaine(ch2)
	or $4, $0, $17
	sw $4, 0($29)
	jal min_to_maj_chaine
	# printf("%s", ch2)
	or $4, $0, $17
	ori $2, $0, 4
	syscall
	
	addiu $29, $29, 8
	ori $2, $0, 10
	syscall

min_to_maj_chaine:
	addiu $29, $29, -8
	sw $31, 4($29)
while:
	# while ch[i] != 0
	lb $9, 0($4)
	beq $9, $0, end_while
	# if ch[i] >= 'a'
	sltiu $10, $9, 'a'
	bne $10, $0, end_if
	# if ch[i] <= 'z'
	ori $10, $0, 'z'
	sltu $10, $10, $9
	bne $10, $0, end_if
	# ch[i] - 0x20
	addiu $9, $9, -0x20
	sb $9, 0($4)
end_if:
	addiu $4, $4, 1
	j while
end_while:
	lw $31, 4($29)
	addiu $29, $29, 8
	jr $31