Files
compilateur-l/test/ref-mips/tri.mips
Xawirses 755d2b6140 Préparation pour test intermediaire
- Analyseur lexical OK
- Analyseur syntaxyque OK
2016-02-09 15:45:20 +01:00

526 lines
14 KiB
Plaintext

.data
$tab: .space 40
.text
__start:
jal main
li $v0, 10
syscall # stoppe l'execution du processus
initialiser:
subi $sp, $sp, 4 # empile registre
sw $fp, 0($sp)
move $fp, $sp # nouvelle valeur de $fp
subi $sp, $sp, 4 # empile registre
sw $ra, 0($sp)
li $t0, 8
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 0
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 6
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 9
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 2
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 9
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 3
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 4
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 4
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 2
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 5
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 3
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 6
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 7
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 4
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 8
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
li $t0, 5
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
li $t0, 9
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
lw $ra, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $fp, 0($sp) # depile vers registre
addi $sp, $sp, 4
jr $ra
afficher:
subi $sp, $sp, 4 # empile registre
sw $fp, 0($sp)
move $fp, $sp # nouvelle valeur de $fp
subi $sp, $sp, 4 # empile registre
sw $ra, 0($sp)
subi $sp, $sp, 4 # allocation variables locales
li $t0, 0
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -8($fp) # stocke variable
e0:
lw $t1, -8($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, 4($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
li $t2, -1 # inf
blt $t0, $t1, e2
li $t2, 0
e2:
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
beq $t0, $zero, e1
lw $t1, -8($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, $tab($t0) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $a0, 0($sp) # depile vers registre
addi $sp, $sp, 4
li $v0, 1
syscall # ecriture
li $a0, '\n'
li $v0, 11
syscall # ecrire char
lw $t1, -8($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t2, $t0, $t1
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -8($fp) # stocke variable
j e0
e1:
li $t0, 0
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $a0, 0($sp) # depile vers registre
addi $sp, $sp, 4
li $v0, 1
syscall # ecriture
li $a0, '\n'
li $v0, 11
syscall # ecrire char
addi $sp, $sp, 4 # desallocation variables locales
lw $ra, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $fp, 0($sp) # depile vers registre
addi $sp, $sp, 4
jr $ra
echanger:
subi $sp, $sp, 4 # empile registre
sw $fp, 0($sp)
move $fp, $sp # nouvelle valeur de $fp
subi $sp, $sp, 4 # empile registre
sw $ra, 0($sp)
subi $sp, $sp, 4 # allocation variables locales
lw $t1, 4($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, $tab($t0) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -8($fp) # stocke variable
lw $t1, 8($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, $tab($t0) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, 4($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
lw $t1, -8($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, 8($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, $tab($t0) # stocke variable
addi $sp, $sp, 4 # desallocation variables locales
lw $ra, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $fp, 0($sp) # depile vers registre
addi $sp, $sp, 4
jr $ra
trier:
subi $sp, $sp, 4 # empile registre
sw $fp, 0($sp)
move $fp, $sp # nouvelle valeur de $fp
subi $sp, $sp, 4 # empile registre
sw $ra, 0($sp)
subi $sp, $sp, 12 # allocation variables locales
lw $t1, 4($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -16($fp) # stocke variable
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -8($fp) # stocke variable
e3:
lw $t1, -8($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
li $t2, -1 # egal
beq $t0, $t1, e5
li $t2, 0
e5:
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
beq $t0, $zero, e4
li $t0, 0
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -8($fp) # stocke variable
li $t0, 0
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -12($fp) # stocke variable
e6:
lw $t1, -12($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, -16($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
sub $t2, $t0, $t1
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
li $t2, -1 # inf
blt $t0, $t1, e8
li $t2, 0
e8:
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
beq $t0, $zero, e7
lw $t1, -12($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t2, $t0, $t1
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, $tab($t0) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, -12($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t0, $t0, $t0
add $t0, $t0, $t0
lw $t1, $tab($t0) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
li $t2, -1 # inf
blt $t0, $t1, e11
li $t2, 0
e11:
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
beq $t0, $zero, e10
subi $sp, $sp, 4 # allocation valeur de retour
# empile arg 0
lw $t1, -12($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
# empile arg 1
lw $t1, -12($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t2, $t0, $t1
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
jal echanger
addi $sp, $sp, 8 # desallocation parametres
addi $sp, $sp, 4 # valeur de retour ignoree
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -8($fp) # stocke variable
e10:
lw $t1, -12($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
add $t2, $t0, $t1
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -12($fp) # stocke variable
j e6
e7:
lw $t1, -16($fp) # lit variable dans $t1
subi $sp, $sp, 4 # empile registre
sw $t1, 0($sp)
li $t0, 1
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $t0, 0($sp) # depile vers registre
addi $sp, $sp, 4
sub $t2, $t0, $t1
subi $sp, $sp, 4 # empile registre
sw $t2, 0($sp)
lw $t1, 0($sp) # depile vers registre
addi $sp, $sp, 4
sw $t1, -16($fp) # stocke variable
j e3
e4:
addi $sp, $sp, 12 # desallocation variables locales
lw $ra, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $fp, 0($sp) # depile vers registre
addi $sp, $sp, 4
jr $ra
main:
subi $sp, $sp, 4 # empile registre
sw $fp, 0($sp)
move $fp, $sp # nouvelle valeur de $fp
subi $sp, $sp, 4 # empile registre
sw $ra, 0($sp)
subi $sp, $sp, 4 # allocation valeur de retour
jal initialiser
addi $sp, $sp, 4 # valeur de retour ignoree
subi $sp, $sp, 4 # allocation valeur de retour
# empile arg 0
li $t0, 10
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
jal afficher
addi $sp, $sp, 4 # desallocation parametres
addi $sp, $sp, 4 # valeur de retour ignoree
subi $sp, $sp, 4 # allocation valeur de retour
# empile arg 0
li $t0, 10
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
jal trier
addi $sp, $sp, 4 # desallocation parametres
addi $sp, $sp, 4 # valeur de retour ignoree
subi $sp, $sp, 4 # allocation valeur de retour
# empile arg 0
li $t0, 10
subi $sp, $sp, 4 # empile registre
sw $t0, 0($sp)
jal afficher
addi $sp, $sp, 4 # desallocation parametres
addi $sp, $sp, 4 # valeur de retour ignoree
lw $ra, 0($sp) # depile vers registre
addi $sp, $sp, 4
lw $fp, 0($sp) # depile vers registre
addi $sp, $sp, 4
jr $ra