برنامج بقائمة خيارات و تنفيذ متكرر بلغة تجميع معالج ميبس
(Assembleur du processeur MIPS R 3000)
1. تقديم
في
كل الأمثلة السابقة حول البرمجة لغة Assembleur
du processeur MIPS R 3000 كان
البرنامج يقوم بمهمة واحدة و ينفذ مرة واحدة وعندما نريد تجريبه مرة أخرى نقوم
بإعادة التنفيذ، في هذه التدوينة سنقوم بإنجاز برنامج تكون فيه قائمة من المهام
التي يقوم بها البرنامج مع تنفيذ متكرر حتى يقرر المستعمل إنهاء تنفيذ البرنامج
كما الشكل التالي:
Veuillez introduire :
1 : Pour calculer
factorielle d’un nombre.
2 : Pour calculer puissance d’un nombre.
0 : Quitter le programme
Donner votre choix :
أي أن البرنامج يحسب
عاملي عدد عندما يدخل المستخدم 1 و يسحب القوة عندما يدخل 2 و ينهي البرنامج بإدخال
0، سنضيف في البرنامج أنه يدخل إدخال قيمة من الخيارات أي 0 أو 1 أو 2 إذا أدخل
قيمة تختلف عن هاته القيم.
سنقوم فيما يلي
بإعطاء الخوارزمية (algorithme) و البرنامج (programme).
2. الخوارزمية بقائمة خيارات و تنفيذ متكرر
فيما يلي الخوارزمية وفقا لما شرحناه أعلاه :
algorithme menu_repetition;
var i , n , ch , p ,
f : entier;
bebut
repeter
ecrireln
(" Veuillez introduire : ");
ecrireln
(" 1 : Pour calculer factorielle
d’un nombre. ");
ecrireln
(" 2 : Pour calculer puissance
d’un nombre. ");
ecrireln
(" 0 : Quitter le programme.
");
ecrireln
(" Donner votre choix : " ); lire (ch) ;
si (ch = 1) alors
lire(n);
//
boucle de calcul de la factorielle
f
<- 1;
pour
i <- 1 à n faire
f
<- p * i;
finpour
//
affichage de la valeur de la factorielle
ecrire("
la factorielle est ", f );
sinon
si
ch = 2 alors
ecrire (" Donner un nombre entier x "); lire(x);
ecrire (" Donner un nombre entier pour la puissance n ");
lire(n);
p <- 1;
pour i <- 1 à n faire
p <- p * x;
finpour
ecrire(" la puissance est ", p);
sinon
si
ch != 0 alors
ecrireln ("
Veuillez introduire un choix valide . ");
finsi
jusqu'à ch = 0 ;
ecrire("
Le programme est terminé ");
fin.
3. برنامج بقائمة خيارات و تنفيذ متكرر بلغة تجميع معالج ميبس
و فيما يلي برنامج بلغة ميبس يقوم بعرض الخيارات و يدخل المستخدم الإجراءات التي يريدها، كما أن البرنامج يكرر التنفيذ حتى يختار المستخدم الخروج.
# Program assembleur MIPS R 3000 avec menu des choix et
execution repetitive
.data
m1: .asciiz " \nVeuillez introduire : \n"
m2: .asciiz " 2 : Pour calculer
factorielle d'un nombre. \n"
m3: .asciiz " 1 : Pour calculer
puissance d'un nombre. \n"
m4: .asciiz " 0 : Quitter le
programme. \n"
m5: .asciiz " Donner votre choix :
"
m6: .asciiz " Veuillez introduire un choix valide \n"
m7: .asciiz " Le programme est termine \n"
msgf1: .asciiz "Donner un nombre entier positif n "
msgf2: .asciiz "la factorielle est
"
msgp1: .asciiz "Donner un nombre entier x "
msgp2: .asciiz "Donner un nombre entier pour la puissance n "
msgp3: .asciiz "la puissance est
"
.text
main:
boucle:
# Affichage du message Veuillez introduire :
la $a0 , m1
li $v0 , 4
syscall
# Affichage du message 1 : Pour calculer factorielle d'un nombre.
la $a0 , m2
li $v0 , 4
syscall
# Affichage du message 2 : Pour calculer puissance d'un nombre.
la $a0 , m3
li $v0 , 4
syscall
# Affichage du message 0 : Quitter le programme.
la $a0 , m4
li $v0 , 4
syscall
# Affichage du message Donner votre choix :
la $a0 , m5
li $v0 , 4
syscall
# lecture de la valeur du choix
li $v0 , 5
syscall
# on met la valeur du choix dans le registre $t0
move $t0 , $v0
li $t1 , 1
li $t2 , 2
# si ch != 2 allez a next1
bne $t0 , $t2 , next1
# debut calcul factorielle
# n! = 1*2*...*n
# lecture de la valeur de n, n doit etre positif
readn : la $a0,msgf1
li $v0,4
syscall
li $v0, 5
syscall
bltz $v0,readn
move $t0, $v0
# $t1 contient le compteur de la boucle
li $t1, 1
# $t2 contient la valeur de la factorielle
li $t2, 1
# boucle de calcul de la factorielle
boucle_f : bgt $t1, $t0, exit_f
mul $t2, $t2, $t1
addi $t1, $t1, 1
j boucle_f
exit_f:
# Affichage de la factorielle
la $a0,msgf2
li $v0,4
syscall
move $a0, $t2
li $v0, 1
syscall
# fin calcul factorielle
j boucle
# si ch != 1 allz a next2
next1 : bne $t0 , $t1 , next2
# debut calcul puissance
#read x
la $a0,msgp1
li $v0,4
syscall
li $v0, 5
syscall
move $t0, $v0
#read n
la $a0,msgp2
li $v0,4
syscall
li $v0, 5
syscall
move $t1, $v0
#$t2 contient le compteur de la boucle
li $t2, 1
#$t3 contient la valeur de la puissance
li $t3, 1
#boucle de calcul du puissance
boucle_p : bgt $t2, $t1, exit_p
mul $t3, $t3, $t0
addi $t2, $t2, 1
j boucle_p
exit_p:
# Affichage de la puissance
la $a0,msgp3
li $v0,4
syscall
move $a0, $t3
li $v0, 1
syscall
# fin calcul puissance
j boucle
# si ch = 0 allz a fin
next2 : beqz $t0 , fin
# Affichage du message Veuillez introduire un choix valide
la $a0 , m6
li $v0 , 4
syscall
j boucle
fin :
# Affichage du message le programme est termine
la $a0 , m7
li $v0 , 4
syscall
# fin du programme
li $v0 , 10
syscall
.end main
وهذا مثال على
تجريب البرنامج في QtSpim.
ليصلك
الجديد و تبقى دائما على إطلاع تابع مدونتنا و زر بإستمرار صفحاتنا على الفيس بوك : :الأستاذ
بن مير عبد القادر و baek-oasis
تعليقات
إرسال تعليق