Laboratoire 4 - Mémoire
Sommaire
Kata load et store
Complétez le programme kata.s
suivant:
.data
n1: .word 0 # premier nombre (32 bits signé)
n2: .word 0 # second nombre (32 bits signé)
- Lisez
n1
(avecReadInt
de RARS oureadInt
de libs.s) - Lisez
n2
- Affichez
n1
- Affichez
n2
Taille, signe, boutisme et alignement
Soit le code data.s
suivant:
.data
.eqv grains, 0xCAFE
hello:
.half 42, -2, -0x0A, grains
world:
.byte '*'
.word 0x1EE7C0DE
- Quelle est le contenu de la section des données (data) pour RARS ?
- En supposant que la section des données commence à l’adresse
0x10010000
, quelles sont les valeurs des symbolesgrains
,hello
etworld
? - Validez ensuite vos réponses avec le simulateur RARS.
Taille, signe, boutisme et alignement (bis)
Soit le programme load.s
suivant:
.data
d: .dword 0x0123456789ABCDEF
.text
la s0, d
ld s1, 0(s0)
lb s2, 0(s0)
lb s3, 1(s0)
lbu s4, 2(s0)
lw s5, 0(s0)
lhu s6, 4(s0)
lwu s7, 2(s0)
- Quels sont les octets alloués dans la section des données ?
- Prédisez les valeurs des registres
s1
às7
. - Attention aux tailles, aux signes, au boutisme et à l’alignement (c.f. titre)
- Validez ensuite vos réponses avec le simulateur RARS.
99 Bottles of Beer
Programmez bottles.s
qui affiche les 100 couplets de la chanson 99 Bottles of Beer (dans l’ordre décroissant), puis se termine.
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.
98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
[...]
2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.
1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.
No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
- Utilisez l’appel système RARS
PrintString
et/ou la routineprintString
de la bibliothèquelibs.s
. - Vous pouvez la chanter aussi si vous voulez.
- Attention aux trois derniers couplets avec l’accord de bottle par exemple (pas de s pour 1).
Maximum
Écrivez un programme maximum.s
qui affiche l’élément maximum d’un tableau de 10 mots.
.data
tab: .word 10, 10, -6, 20, 1, 1, 8, 800, -800, -2
- Inspirez-vous du programme
somme.s
vu en cours.
Inverse
Écrivez un programme rev.s
qui lit une chaîne de caractères (avec ReadString
ou readString
) et l’affiche à l’envers.
Exemple: Bonjour!
→ !ruojnoB
Notes:
- Déterminez un pointeur sur le dernier caractère de la chaîne lue avant d’afficher.
- Note: tester avec un palindrome comme
ressasser
n’est pas très probant.
Énigme (extra)
Soit le programme bonjour.s
suivant
call readInt
la s0, d
sd a0, 0(s0)
mv a0, s0
call printString
li a0, 0
call exit
.data
d: .space 9
Quel nombre doit-on saisir pour qu’il affiche « Bonjour!
» ?