برنامج حساب الأس السالب و الموجب بلغة تجميع معالج ميبس
(Assembleur du processeur MIPS R 3000)
1. تقديم
في
التدوينة السابقة قمنا بإنجاز برنامج بلغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000) يحسب عدد أس عدد xn (puissance) حيث x و n عددين صحيحين.
و
قد رأينا أنه لا يعطي نتائج صحيحة من اجل الأس السالب، كما إقترحنا تحويل البرنامج
إلى حساب عاملي عدد n ! .
سنقوم أولا بأتمام الخوارزمية
لتتعامل مع الأس السالب و المبدأ هو أن في الأس السالب x-n=1/xn
أي أننا نحسب xn ثم نقوم بقسمة الواحد 1 على الناتج
2. خوارزمية حساب الأس سالبا أو موجبا
الخوارزمية algorithme التي تحسب عدد قوة عدد (الأس)
تقوم بتكرار ضرب العدد في نفسه n مرة لأن:
xn= x*x*….*x n مرة
أذا
كان n موجب نعرض xn
و إذا كان n سالب فإننا نحسب x|n| ثم نعرض 1/xn.
// Puissance d'un nombre entier
algorithme Puissance;
var x,
n, p, i : entier;
neg : boolean;
debut
ecrire
("Donner un nombre entier x ");lire(x);
ecrire
("Donner un nombre entier pour la puissance n ");lire(n);
neg <- faux;
si n < 0
alors
n <- abs (n);
neg <- vrai;
finsi
p <- 1;
pour i <- 1 à
n faire
p <-
p*x;
finpour
si neg = vrai
alors
p <-
1/p; //division entière
finsi
ecrire("la
puissance est ", p);
fin.
3. برنامج حساب الأس سالبا أو موجبا بلغة تجميع المعالج ميبس
فيما
يلي برنامج يحسب عدد أس عدد xn (puissance) حيث x و n عددين صحيحين. سنضيف
هنا متغيرات نقوم يتخزين القيم المدخلة في الذاكرة المركزية مباشرة بعد الإدخال ثم
نقوم بتحميلها (charger) إلى السجلات (registres) فيما بعد وفيها و كذلك نخزن الأس الذي نحصل
عليه. عندما يكون الأس n
سالب نحسب الأس ل n- ثم نحسب الأس و نعرض 1/xn .
.data
x :
.word 0
n :
.word 0
p : .word 0
m1: .asciiz "Donner un nombre entier x
"
m2: .asciiz "Donner un nombre entier pour la
puissance n "
m3: .asciiz "la puissance est "
.text
main:
# lecture de la valeur de x
la $a0,m1
li $v0,4
syscall
li $v0, 5
syscall
# souvegarder la valeur de x en memoire centrale
sw $v0, x
# lecture de la valeur de n
la $a0,m2
li $v0,4
syscall
li $v0, 5
syscall
# souvegarder la valeur de n en memoire centrale
sw $v0, n
# $t2 contient le compteur de la boucle
li $t2, 1
# $t3 contient la valeur de la puissance
li $t3, 1
# charger la valeur de la variable x dans le registre $t0
lw $t0, x
# charger la valeur de la variable n dans le registre $t1
lw $t1, n
li $t4, 1
bgez $t1, next
li $t4, -1
abs $t1, $t1
next:
# boucle de calcul de la puissance
boucle : bgt $t2, $t1, exit
mul $t3, $t3, $t0
addi $t2, $t2, 1
j boucle
exit:
# p <- 1/p : x^-n = 1/p^n
bgez $t4, affich
li $t4, 1
div $t3, $t4, $t3
# souvegarder la valeur de la puissance en memoire centrale
sw $t3, p
affich:
# Affichage de la puissance
la $a0,m3
li $v0,4
syscall
move $a0, $t3
li $v0, 1
syscall
# fin du programme
li $v0, 10
syscall
.end main
1.
نفذ البرنامج من أجل قيم موجبة و معدومة و سالبة هل يعطي نتائج صحيحة في كل الحالات.
قم بترك
أجوبتك و تعديلاتك على تعليق حتى يتكمن الجميع من فهم و تعديل البرنامج.
تعليقات
إرسال تعليق