Révision

Sommaire

Pile et récursivité

Considérez

  • que fib est la routine Fibonacci récursive implémentée en classe source
  • que sp est initialisé à 0x7FFFEFFC

Exercice 1

li s0, 42
li s1, -1
li a0, 3
jal fib
ebreak
  • Quelle est la valeur du registre sp au moment du ebreak ?
  • Combien de fois la première instruction de la routine fib est exécutée ?
  • Au moment du ebreak, quel est le contenu des 48 octets en mémoire à partir de l’adresse 0x7FFFEFCC ?

Exercice 2

li a0, 10
jal fib
ebreak
  • Quelle est la valeur du registre sp au moment du ebreak ?
  • Quelle est la valeur minimale prise par sp lors l’exécution (récursive) de fib ?
  • Combien de fois la première instruction de la routine fib est exécutée en tout (extra) ?

Adressage dans les structures

Soit le programme suivant:

	.data
	# Structure d'un étudiant
	.eqv eCode, 0	# (12) Un code de permanent de 4 lettres et 8 chiffres (ASCII)
	.eqv eNote, 12	# (word) dix-milièmes de la note de l'étudiant (donc 10000 pour 100%)
	.eqv eNext, 16	# (dword) L'étudiant suivant dans la liste chainée

# Des étudiants enchainées
alice:	.ascii "AWON12345678"	# alice: 0x10010000
	.word 8192
	.dword bob
bob:	.ascii "BSPO87654321"
	.word 5120
	.dword eve
eve:	.ascii "EVIL66666666"
	.word 0x666
	.dword james
james:	.ascii "JBON00000007"
	.word 007
	.dword 0

	.text
	la s0, bob
	lw s1, eNote(s0)
	lb s2, 5(s0)
	ld t0, eNext(s0)
	ld t1, eNext(t0)
	lw s3, eNote(t1)
	ld s4, -16(s0)
	
	li a7, 10 # Exit
	ecall

Questions

  • Quelles sont les valeurs (en hexadécimal) des registres (64 bits) s0, s1, s2, s3, s4 ?

Allocation adressage dans le tas

Soit le code suivant pour RARS RISC-V (64 bits)

	.eqv Sbrk, 9

	li a7, Sbrk
	li a0, 16
	ecall
	mv s0, a0

	li a7, Sbrk
	li a0, 1
	ecall
	mv s1, a0

	li a7, Sbrk
	li a0, 32
	ecall
	mv s2, a0

	li a0, 'A'
	sb a0, 0(s1)
	li a0, 'B'
	sb a0, 4(s1)
	li a0, 'C'
	sb a0, 8(s1)
	ld s3, 0(s2)

	ebreak

On suppose que

  • Le tas est initialisé à 0x10040000
  • Sbrk aligne sur 8 octets

Questions

  • Quelles sont les valeurs (en hexadécimal) des registres (64 bits) s0, s1, s2, s3 ?

Flottants

Soit le codage « huitième-de-précision » binary4 des flottants conforme avec IEEE 754, avec les caractéristiques suivantes:

  • 4 bits en tout (c’est VRAIMENT pas beaucoup)
  • 1 bit de signe
  • 2 bits d’exposants (pole = 1)
  • et 1 bit de mantisse

Questions

  • Quels sont tous les nombres décimaux représentables ?
  • En utilisant la règle d’arrondi au plus proche et au pair en cas d’équidistance (le défaut), quelle sont les codage binary4 des nombres suivants: -0.667, 7/4, 2.5, pi, -4, 0x3p-1

Solution des conversions