Skip to content
Snippets Groups Projects
Commit 025d280c authored by AMIRAT LYDIA's avatar AMIRAT LYDIA
Browse files

commit

parents 9a3cf857 e64e781e
No related merge requests found
......@@ -2,12 +2,39 @@
.text:
main:
li $a0 5
mul $a0,$a0,$a0
addi $sp $sp -20 #allocation de 5 octets dans la pile
#0($sp) contient adresse de la pile
#4($sp) contient taille du labyrinthe (en nombre de cases)
#8($sp) contient adresse de retour de la fonction main
#12($sp)contient adresse de retour vers une fonction quelconque
#16($sp) contient l'adresse du sommet de la pile
li $a0, 5
li $t0, 4
mul $a0,$a0,$t0
#multiplier $a0 par $a0 afin d'obtenir le nombre d'entiers maximal, car l'utilisateur passe
#en argument N, qui est le nombre de lignes uniquement (le labyrinthe est de taille N*N)
jal st_creer
li $t1,1
li $t2,2
li $t3,3
li $t4,4
sw $t1,0($v0)
sw $t2,4($v0)
sw $t3,8($v0)
sw $t4,12($v0)
move $a0, $v0
jal st_sommet_init
move $a0,$v0
li $v0,1
syscall
#$ra = l'address vers la ligne 10
j Exit #instruction permettant de sortir du programme
......@@ -17,7 +44,8 @@ main:
cell_lecture_bit:
#cell_lecture_bit est une fonction qui prend en argument un nombre stocké dans $a0 et un indice
#stocké dans $a1 et qui renvoie le ième bit de ce nombre
sw $ra,12($sp)
sw $ra, 12($sp)
move $t0, $a0
#création d'une variable temporaire dans $t0, afin de ne pas perdre la valeur du nombre contenue
#dans $a0 après le décalage et la division
......@@ -31,7 +59,7 @@ cell_lecture_bit:
#et le reste dans un registre hi (elle a le role de l'opération arithmétique n modulo 2 )
mfhi $v0 #"move from hi" cette instruction nous permet de récupérer le reste de la divison euclidienne
#et de le stocker dans $v0
jr $ra
j retour_fonc
changer_bit:
#cette fonction permet de décider si le ième bit du nombre que l'on souhaite modifier devrait etre
......@@ -89,7 +117,8 @@ st_creer:
#Son adresse de retour sera l'adresse du début du tableau, stockée dans $v0
addi $sp, $sp, -16
sw $ra,8($sp)
sw $ra, 8($sp)
#allocation de 4 registres dans la pile
sw $a0, 4($sp)
#stocker N*N dans la pile
......@@ -110,18 +139,22 @@ st_creer:
st_est_vide:
sw $ra,8($sp)
sw $ra, 12($sp)
lw $t1, 0($a0)
beq $t1, $zero, vide
li $v0,0
j retour_main
j retour_fonc
vide:
li $v0, 1
j retour_main
j retour_fonc
st_est_plein:
sw $ra,8($sp)
sw $ra, 8($sp)
li $t0, 4
lw $t1, 0($sp)
add $a0,$a0,$t1
......@@ -134,18 +167,45 @@ st_est_plein:
plein:
li $v0 1
j retour_main
st_sommet_init:
sw $ra 8($sp)
j st_sommet
st_sommet:
li $s1, 1
lw $s0,0($a0)
addi $a0, $a0, 4
jal st_est_vide
beq $v0, $s1, retour_val
b st_sommet
retour_val:
addi $a0 $a0 -4
sw $a0,16($sp)
move $v0, $s0
lw $ra, 8($sp)
j retour_main
st_empiler:
lw
retour_main:
lw $ra 8($sp)
jr $ra
retour_fonc:
lw $ra 12($sp)
jr $ra
Exit:
li $v0, 10
syscall
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment