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

الصفحات

برنامج حساب عدد أس عدد موجب وسالب بلغة تجميع معالج ميبس

برنامج حساب الأس السالب و الموجب بلغة تجميع معالج ميبس
 (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

واجهة برنامج  QtSpim


1. نفذ البرنامج من أجل قيم موجبة و معدومة و سالبة هل يعطي نتائج صحيحة في كل الحالات.

قم بترك أجوبتك و تعديلاتك على تعليق حتى يتكمن الجميع من فهم و تعديل البرنامج.

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

تعليقات