Bonjour, je suis étudiante en informatique et je dois travailler sur un devoir concernant l'assembleur. C'est la partie la plus hardue du cursus. J'ai compris le code. Mais je n'arrive pas à mettre en évidence l'algorithme dans le programme qui m'est présenté. Je vois qu'il y a des conditions (bge, bne, ..) mais je ne vois pas comment s'effectue le tri. Le prof a jalonné le parcours du code avec des commentaires qui aident, mais, je serais ravie de trouver une aide de quelqu'un féru d'assembleur... Marielou
.data str: .asciiz "\n" str1: .asciiz "|" .align 2 # T est le tableau que l'on trie' T: .word 6 .word 5 .word 4 .word 3 .word 2 .word 1 .word -0 .word -1 .word -2 .word -3 .text .align 2 .globl main .ent main main: .frame $fp,24,$31 .mask 0xc0000000,-4 .fmask 0x00000000,0 subu $sp,$sp,24 sw $31,20($sp) sw $fp,16($sp) move $fp,$sp # On affiche le vecteur en entree du probleme la $5,T li $6,1 suite0:lw $a0, ($5) li $v0, 1 syscall li $v0, 4 # system call code for print_str la $a0, str1 # address of string to print syscall # print the string addiu $5,$5,4 addiu $6,$6,1 bne $6,11,suite0 li $v0, 4 # system call code for print_str la $a0, str # address of string to print syscall # print the string syscall # On commence le tri a partir d'ici la $5,T li $6,1 deb: lw $8,($5) # le min lw $14,($5) la $15, ($5) move $9,$6 addiu $9, $9, 1 la $10, ($5) la $11, ($5) addiu $10, $10, 4 suite: lw $12, 0($10) blt $8, $12, suite1 lw $8, ($10) # sauvegarde du nouveau min la $16, ($10) # sauvegarde adresse du nouveau min # move $a0, $8 # li $v0, 1 # syscall # li $v0, 4 # system call code for print_str # la $a0, str1# address of string to print # syscall # print the string # la $a0, str # address of string to print # syscall # print the string suite1:addiu $10, $10, 4 add $9, $9, 1 bne $9, 11, suite bgt $8, $14, suite2 bge $8, $14, suite2 move $a0, $8 li $v0, 1 syscall li $v0, 4 # system call code for print_str la $a0, str1 # address of string to print syscall # print the string move $a0, $14 li $v0, 1 syscall li $v0, 4 # system call code for print_str la $a0, str # address of string to print syscall # print the string sw $8, ($15) sw $14, ($16) suite2: addiu $5, $5, 4 # on passe a l'element suivant addiu $6, $6, 1 # jusqu'au 9 eme bne $6,10, deb # on afficher le vecteur de sortie li $v0, 4 # system call code for print_str la $a0, str # address of string to print syscall # print the string suite33:la $5,T li $6,1 suite3: lw $a0, ($5) li $v0, 1 syscall li $v0, 4 # system call code for print_str la $a0, str1 # address of string to print syscall # print the string addiu $5,$5,4 addiu $6,$6,1 bne $6,11,suite3 li $v0, 4 # system call code for print_str la $a0, str # address of string to print syscall # print the string j $31 .end main +*+*+*++*+*+*+*+*+*+*+*+EXEMPLES D'EXECUTION+*+*+*+*+*+*+*+*+*+*+*+*+ -6|-5|-4|-3|-2|-1|0|1|2|3| -6|-5|-4|-3|-2|-1|0|1|2|3| +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+ 6|5|4|3|2|1|0|-1|-2|-3| -3|6 -2|5 -1|4 0|3 1|2 -3|-2|-1|0|1|2|3|4|5|6| +*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+ 2|-5|-1|-3|7|8|9|10|-4|5| -5|2 -4|2 -3|-1 2|7 5|8 7|9 8|10 -5|-4|-3|-1|2|5|7|8|9|10|
Marsh Posté le 21-04-2005 à 10:03:54
Bonjour,
je suis étudiante en informatique et je dois travailler sur un devoir concernant l'assembleur. C'est la partie la plus hardue du cursus. J'ai compris le code. Mais je n'arrive pas à mettre en évidence l'algorithme dans le programme qui m'est présenté.
Je vois qu'il y a des conditions (bge, bne, ..) mais je ne vois pas comment s'effectue le tri.
Le prof a jalonné le parcours du code avec des commentaires qui aident, mais, je serais ravie de trouver une aide de quelqu'un féru d'assembleur...
Marielou
.data
str: .asciiz "\n"
str1: .asciiz "|"
.align 2
# T est le tableau que l'on trie'
T: .word 6
.word 5
.word 4
.word 3
.word 2
.word 1
.word -0
.word -1
.word -2
.word -3
.text
.align 2
.globl main
.ent main
main:
.frame $fp,24,$31
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
move $fp,$sp
# On affiche le vecteur en entree du probleme
la $5,T
li $6,1
suite0:lw $a0, ($5)
li $v0, 1
syscall
li $v0, 4 # system call code for print_str
la $a0, str1 # address of string to print
syscall # print the string
addiu $5,$5,4
addiu $6,$6,1
bne $6,11,suite0
li $v0, 4 # system call code for print_str
la $a0, str # address of string to print
syscall # print the string
syscall
# On commence le tri a partir d'ici
la $5,T
li $6,1
deb:
lw $8,($5) # le min
lw $14,($5)
la $15, ($5)
move $9,$6
addiu $9, $9, 1
la $10, ($5)
la $11, ($5)
addiu $10, $10, 4
suite:
lw $12, 0($10)
blt $8, $12, suite1
lw $8, ($10) # sauvegarde du nouveau min
la $16, ($10) # sauvegarde adresse du nouveau min
# move $a0, $8
# li $v0, 1
# syscall
# li $v0, 4 # system call code for print_str
# la $a0, str1# address of string to print
# syscall # print the string
# la $a0, str # address of string to print
# syscall # print the string
suite1:addiu $10, $10, 4
add $9, $9, 1
bne $9, 11, suite
bgt $8, $14, suite2
bge $8, $14, suite2
move $a0, $8
li $v0, 1
syscall
li $v0, 4 # system call code for print_str
la $a0, str1 # address of string to print
syscall # print the string
move $a0, $14
li $v0, 1
syscall
li $v0, 4 # system call code for print_str
la $a0, str # address of string to print
syscall # print the string
sw $8, ($15)
sw $14, ($16)
suite2: addiu $5, $5, 4 # on passe a l'element suivant
addiu $6, $6, 1 # jusqu'au 9 eme
bne $6,10, deb
# on afficher le vecteur de sortie
li $v0, 4 # system call code for print_str
la $a0, str # address of string to print
syscall # print the string
suite33:la $5,T
li $6,1
suite3: lw $a0, ($5)
li $v0, 1
syscall
li $v0, 4 # system call code for print_str
la $a0, str1 # address of string to print
syscall # print the string
addiu $5,$5,4
addiu $6,$6,1
bne $6,11,suite3
li $v0, 4 # system call code for print_str
la $a0, str # address of string to print
syscall # print the string
j $31
.end main
+*+*+*++*+*+*+*+*+*+*+*+EXEMPLES D'EXECUTION+*+*+*+*+*+*+*+*+*+*+*+*+
-6|-5|-4|-3|-2|-1|0|1|2|3|
-6|-5|-4|-3|-2|-1|0|1|2|3|
+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
6|5|4|3|2|1|0|-1|-2|-3|
-3|6
-2|5
-1|4
0|3
1|2
-3|-2|-1|0|1|2|3|4|5|6|
+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
2|-5|-1|-3|7|8|9|10|-4|5|
-5|2
-4|2
-3|-1
2|7
5|8
7|9
8|10
-5|-4|-3|-1|2|5|7|8|9|10|