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 (avec ReadInt de RARS ou readInt 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 symboles grains, hello et world?
  • 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 routine printString de la bibliothèque libs.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! » ?