برنامج حساب القاسم المشترك الأكبر لعددين بلغة تجميع معالج ميبس بطريقة إقليدس
(Assembleur du processeur MIPS R 3
1. تقديم
في
هذه التدوينة سنقول بإنجاز برنامج بلغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000)، سنقدم أولا
الخوارزمية algorithme التي تحسب القاسم المشترك الأكبر لعددين بإستخدام خوارزمية إقليدس (algorithme d'Euclide) ثم نقوم بتحويلها إلى برنامج assembleur.
2. خوارزمية القاسم المشترك الأكبر لعددين بإستخدام خوارزمية إقليدس
الخوارزمية algorithme التي تحسب القاسم المشترك الأكبر بإستخدام خوارزمية إقليدس (algorithme d'Euclide)، خوارزمية إقليدس تقوم على أساس أن القاسم
المشترك لعددين هو القاسم المشترك الأكبر للعدد الثاني و باقي قسمة الأول على
الثاني بفرض أن الأول أكبر من الثاني . و نكرر العملية حتى يكون باقي القسمة يساوي
الصفر. وهنا يكون العدد الأول هو القاسم المشترك الأكبر
لا
بد أن يكون العددين صحيحين و موجبين.
//PGCD avec algorithme
d'Euclide
Algorithme
PGCD;
var x, y, z : entier;
debut
//boucle pour la lecture
de x pour assurer que x est positif
répéter
ecrire('Donner un nombre positif :');
lire(x);
jusqu'à x > 0;
//boucle pour la lecture de y pour assurer que y est
positif
répéter
ecrire('Donner un nombre positif :');
lire(y);
jusqu'à y > 0;
//Permutation des valeurs nombres x et y si y
> x
si y > x alors
Z <- x ;
X <- y ;
Y <- z ;
finsi
//boucle de recherche du PGCD
tantque y != 0 faire
//mod reste de la division entière
z <- x mod y ;
x
<- y ;
y <- z ;
fintantque
ecrire('la valeur PGCD est : ',x);
fin.
3. برنامج القاسم المشترك الأكبر لعددين بإستخدام خوارزمية إقليدس بلغة تجميع ميبس
فيما
يلي برنامج القاسم المشترك الأكبر PGCD بلغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000) بإستخدام خوارزمية إقليدس (algorithme
d'Euclide). سنضيف
هنا متغيرات نقوم يتخزين القيم المدخلة في الذاكرة المركزية وفيها و كذلك قيمة
القاسم المشترك الأكبر الذي نحصل عليه.
#variables
declarations
.data
x :
.word 0
y : .word 0
pgcd : .word 0
m1: .asciiz "Donner un nombre positif x "
m2: .asciiz "Donner un nombre positif y "
m3: .asciiz "PGCD =
"
.text
main:
#lecture de la valeur de x
readx : la $a0,m1
li $v0,4
syscall
li $v0,
5
syscall
blez
$v0,readx
move $t0, $v0
# souvegarder la valeur de x en memoire centrale
sw $t0, x
#lecture de la valeur de y
ready :
la $a0,m2
li
$v0,4
syscall
li $v0,
5
syscall
blez
$v0,ready
move $t1, $v0
# souvegarder la valeur de y en memoire centrale
sw $t1, y
#Permutation des nombres si x ($t0) < y ($t1)
bgt $t0, $t1 , gotopgcd
move $t2, $t0
move $t0, $t1
move $t1, $t2
gotopgcd:
#boucle de calcul du PGCD
boucle : beqz $t1, exit
div $t0, $t1
mfhi $t2
move $t0, $t1
move $t1, $t2
j boucle
exit:
# souvegarder la valeur de PGCD en memoire centrale
sw $t0, pgcd
#Affichage du PGCD
la $a0,m3
li $v0,4
syscall
move
$a0, $t0
li $v0,
1
syscall
# fin du programme
li $v0, 10
syscall
.end main
ليصلك الجديد و تبقى دائما على إطلاع
تابع مدونتنا و زر صفحاتنا على الفيس بوك : :الأستاذ
بن مير عبد القادر و baek-oasis
تعليقات
إرسال تعليق