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

الصفحات

بنية الشرط للأعداد الحقيقية في لغة تجميع معالج ميبس


بنية الشرط للأعداد الحقيقية في لغة تجميع معالج ميبس
 (Assembleur du processeur MIPS R 3000)


بنية الشرط للأعداد الحقيقية في لغة تجميع معالج ميبس


1. تقديم

في هذه التدوينة سنتطرق إلى الشرط condition FPU في لغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000)، و لشرح ذلك سنقوم بإنجاز برنامج يحل معادلة من الدرجة الأولى  (  Résolution d’une équation du premier degré). و كالعادة سنقدم أولا الخوارزمية algorithme ثم نقوم بتحويلها إلى برنامج assembleur.

في البرنامج بلغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000) سنقوم بالحل بطريقتين: الطريقة الأولى نستخدم بها تعليمات الشرط الخاصة بالأعداد الصحيحة (Les opérations de Branchement : bgt, ble, …) و هنا لا بد أن نحول الأعداد التي نريد إجراء الشرط عليها من float  إلى word، أما الثانية فبإستخدام تعليمات الشرط الخاصة ب float.

2. خوارزمية حل معادلة من الدرجة الأولى

الخوارزمية algorithme التي تحل معادلة من الدرجة الأولى  (  Résolution d’une équation du premier degré).


Résolution d'une équation du premier degré
algorithme Eqd1;
var x, a, b : reel;
debut
    ecrire (" Donner la valeur de a "); lire(a);
    ecrire (" Donner la valeur de b "); lire(b);
    si a <> alors
         x <- -b/;
          ecrire(" la solution est ", x );
    sinon
          ecrire (" Pas de solution a = 0 ");
fin.

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

فيما يلي برنامج يحل معادلة من الدرجة الأولى  (  Résolution d’une équation du premier degré).

1.3 حل المعادلة بإستخدام بنية شرط الأعداد الصحيحة

# Resolution d une equation du premier degre
# x = -b/a si a != 0
.data

m1: .asciiz " Donner la valeur de a : "
m2: .asciiz " Donner la valeur de b : "
m3: .asciiz " la solution est "
m4: .asciiz " Pas de solution a = 0 "

msg : .asciiz " Program assembleur MIPS R 3000 de resolution d une equation du premier degre \n"

.text
main:

# Presentation du programme
la $a0 , msg
li $v0 , 4
syscall

# lecture de la valeur de a
la $a0,m1
li $v0,4
syscall
li $v0, 6
syscall
mov.s $f1, $f0

# lecture de la valeur de b
la $a0,m2
li $v0,4
syscall
li $v0, 6
syscall
mov.s $f2, $f0

li.s $f3, 0.0

# convertir a en int
cvt.w.s $f5, $f1
mfc1 $t0, $f5

li $t1, 0

# Tester a = 0 ou non
beq $t0, $t1, non_sol
li.s $f3, -1.0
div.s $f4, $f2, $f3
div.s $f4, $f4, $f1

# Afficher message
la $a0,m3
li $v0,4
syscall

# Afficher la valeur de la solution x
mov.s $f12, $f4
li $v0, 2
syscall
j fin

non_sol:
# Afficher message Pas de solution a = 0
la $a0,m4
li $v0,4
syscall

fin:
li $v0, 10
syscall

.end main

2.3 حل المعادلة بإستخدام بنية شرط الأعداد الحقيقية

#Comparison of FP values sets a code in a special register
#c.eq.s $f2, $f4 if $f2 == $f4 then code = 1 else code = 0
#c.ne.s $f2, $f4 if $f2 != $f4 then code = 1 else code = 0
#c.le.s $f2, $f4 if $f2 <= $f4 then code = 1 else code = 0
#c.lt.s $f2, $f4 if $f2 < $f4 then code = 1 else code = 0
#c.ge.s $f2, $f4 if $f2 >= $f4 then code = 1 else code = 0
#c.gt.s $f2, $f4 if $f2 > $f4 then code = 1 else code = 0

#Branch instructions jump depending on the value of the code
#bc1f label if code == 0 then jump to label
#bc1t label if code == 1 then jump to label

# Resolution d une equation du premier degre
# x = -b/a si a != 0
.data

m1: .asciiz " Donner la valeur de a : "
m2: .asciiz " Donner la valeur de b : "
m3: .asciiz " la solution est "
m4: .asciiz " Pas de solution a = 0 "
msg : .asciiz " Program assembleur MIPS R 3000 de resolution d une equation du premier degre \n"

.text
main:

# Presentation du programme
la $a0 , msg
li $v0 , 4
syscall

# lecture de la valeur de a
la $a0,m1
li $v0,4
syscall
li $v0, 6
syscall
mov.s $f1, $f0

# lecture de la valeur de b
la $a0,m2
li $v0,4
syscall
li $v0, 6
syscall
mov.s $f2, $f0

li.s $f3, 0.0


# convertir a en int
#cvt.w.s $f5, $f1
#mfc1 $t0, $f5

#li $t1, 0

# Tester a = 0 ou non
#beq $t0, $t1, non_sol

c.eq.s $f1, $f3
bc1t non_sol
li.s $f3, -1.0
div.s $f4, $f2, $f3
div.s $f4, $f4, $f1

# Afficher message
la $a0,m3
li $v0,4
syscall

# Afficher la valeur de la solution x
mov.s $f12, $f4
li $v0, 2
syscall
j fin

non_sol:
# Afficher message Pas de solution a = 0
la $a0,m4
li $v0,4
syscall

fin:
li $v0, 10
syscall

.end main

وهذا مثال على تجريب البرنامج في  QtSpim:

ُexemple execution programme MIPS R3000 equation premier degré

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

تعليقات