القائمة الرئيسية

الصفحات

برنامج بقائمة خيارات و تنفيذ متكرر بلغة تجميع معالج ميبس


برنامج بقائمة خيارات و تنفيذ متكرر بلغة تجميع معالج ميبس

 (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.

برنامج بقائمة خيارات و تنفيذ متكرر (programme avec menu des choix et exécution répétitive ) بلغة Assembleur du processeur MIPS R 3000

ليصلك الجديد و تبقى دائما على إطلاع تابع مدونتنا و زر بإستمرار صفحاتنا على الفيس بوك : :الأستاذ بن مير عبد القادر و baek-oasis



تعليقات