# Lire un tableau d’entiers, le trier, l’afficher .globl _start # adresse de démarrage du programme pour l’éditeur de liens _start: # Demander taille du tableau (< 17) la a1, message1 # charger l’adresse jal ra, print_str # affichage de la chaîne # Lecture de la taille (< 17) jal ra, read_int # a1 <-- l’entier lu la x30, nb_items sw a1, 0(x30) # sauve a1 dans nb_items # Remplissage du tableau la a0, tableau jal ra, remplir # Affichage du tableau la a0, tableau lw a1, nb_items jal ra, afficher # Tri du tableau la a0, tableau lw a1, nb_items jal ra, bubble_sort # Affichage du tableau trié la a0, tableau lw a1, nb_items jal ra, afficher exit: # Fin du programme addi a0, x0, 0 # code de retour 0 addi a7, x0, 93 # le code de commande 93 ecall # Appel Linux pour finir ##### # remplissage du tableau # a0 : pointeur sur première case du tableau # a1 : nombre de cases à remplir remplir: addi sp, sp, -4 sw ra, 0(sp) # sauvegarde ra sur la pile mv x29, a0 # x29 -> tableau mv x28, a1 # i <-- nb cases à remplir loop2: # Lecture d’un entier ble x28, x0, exit2 # rempli la a1, message2 # charger l’adresse jal ra, print_str jal ra, read_int # a1 <-- l’entier lu sw a1, 0(x29) # tableau[i] <-- l’entier lu addi x28, x28, -1 # décrément de i addi x29, x29, 4 # case suivante j loop2 # Retour exit2: # Retour chariot pour y voir clair la a1, saut jal ra, print_str # on y voit plus clair lw ra, 0(sp) # restauration de ra depuis la pile addi sp, sp,4 # pour l’adresse de retour ret ##### # affichage du tableau # a0 : pointeur sur première case du tableau # a1 : nombre de cases à afficher afficher: addi sp, sp, -4 sw ra, 0(sp) # sauvegarde ra sur la pile addi x29, a0, 0 # x29 -> tableau addi x30, a1, 0 # x30 nb items à afficher addi x28, x0, 0 # i <-- 0 loop3: # Affichage d’un entier lw a0, 0(x29) # a0 <-- l’entier à afficher jal ra, print_int # Retour chariot la a1, saut jal ra, print_str addi x28, x28, 1 # incrément indice boucle bge x28, x30, exit3 # affiché addi x29, x29, 4 # case suivante j loop3 # Retour exit3: # Retour chariot pour y voir clair la a1, saut jal ra, print_str # on y voit plus clair lw ra, 0(sp) # restauration de ra depuis la pile addi sp, sp,4 # pour l’adresse de retour ret ##### .include "read-print.s" .include "strings.s" .include "bubble-sort.s" ###### .data .align 2 tableau: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 nb_items: .word 0 saut: .string "\n" message1: .string "Entrez le nombre de cases du tableau : \n" message2: .string "Entrez un nombre entier : \n" message3: .string "Oui, on est passé là !\n"