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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
---
tags:
- sorbonne
- informatique
- architecture-des-ordinateurs
- td
semestre: 3
---
```asm
beq $8, $9, label # va à label si $8 == $9
bne $8, $9, label # va à label si $8 != $9
blez $8, label # va à label si $8 <= 0
bltz $8, label # va à label si $8 < 0
bgez $8, label # va à label si $8 >= 0
bgtz $8, label # va à label si $8 > 0
j label # va à label
jr r1 # va à l'adresse mémoire dans r1
```
```asm
.data
a: .word -5
b: .word 3
.text
# on commence par le nom de la fonction
main:
lui $8, 0x1001
lw $9, 0($8)
# if
bne $9, $0, else
# then
lw $9, 0($8) # on recharge à chaque fois qu'on l'utilise
lw $10, 4($8)
addu $9, $9, $10
sw $9, 0($8)
j endif
else:
lw $9, 0($8)
lw $10, 4($8)
subu $9, $9, $10
sw $9, 0($8)
endif:
ori $2, $0, 10
syscall
```
```asm
.data
p: .word 10 # 0 -> $9
q: .word 20 # 4 -> $10
i: .word 0 # 8 -> $11
s: .word 0 # 12 -> $12
.text
main:
lui $8, 0x1001
# i = p
lw $9, 0($8)
or $11, $0, $9
sw $11, 8($8)
for:
# i <= q
lw $10, 4($8)
lw $11, 8($9)
slt $13, $10, $11
bne $13, $0, end_for
# s += i
lw $12, 12($8)
lw $11, 8($8)
addu $12, $12, $11
sw $12, 12($8)
# i++
lw $11, 8($8)
addiu $11, $11, 1
sw $11, 8($8)
j for
end_for:
# printf("%d", s)
ori $2, $0, 1
lw $12, 12($8)
or $4, $0, $12
syscall
# exit()
ori $2, $0, 10
syscall
```
```asm
.data
max: .word 0
tab: .word -2, 1, 5, -7, 42, -9, 0
.text
main:
lui $8, 0x1001
ori $12, $0, $8
addui $8, $8, 4
# max = tab[0]
lw $9, 4($8)
or $10, $0, $9
ori $11, $0, $8
sw $10, 0($12)
while:
# tab[i] != 0
lw $9, 0($8)
beq $9, 0, end_while
# if tab[i] > max
lw $10, 0($12)
lw $9, 0($8)
slt $10, $10, $9
beq $10, $0, skip
# max = tab[i]
lw $9, 0($8)
lw $10, 0($12)
or $10, $0, $9
sw $10, 0($12)
skip:
# i++
addiu $8, $8, 4
j while
end_while:
ori $2, $0, 1
lw $4, 0($12)
syscall
ori $2, $0, 10
syscall
```
|