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

الصفحات

حساب مساحة و محيط دائرة بلغة تجميع معالج ميبس

برنامج حساب مساحة و محيط بلغة تجميع معالج ميبس
 (Assembleur du processeur MIPS R 3000)


حساب مساحة و محيط دائرة بلغة تجميع معالج ميبس




1. تقديم

في هذه التدوينة سنتطرق إلى FPU في لغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000)، و لشرح FPU سنقوم بإنجاز برنامج يحسب مساحة ومحيط دائرة  (  surface et périmètre  d’un cercle). و كالعادة سنقدم أولا الخوارزمية algorithme ثم نقوم بتحويلها إلى برنامج assembleur.

حيث أننا رأينا في التدوينات السابقة التعامل مع الأعداد الصحيحة فإننا سنرى في هذه التدوينة التعامل مع الأعداد الحقيقية و هناك نوعان من الأعداد الحقيقية قي لغة MIPS R3000 و هما float و double. حيث float يمثل على 32 bits أما double فيمثل على 64 bits.

توجد عدة تعليمات و أوامر خاصة بالتعامل معها سنحاول أن نتطرق لها بعدة أمثلة، و في مثالنا التالي سنقوم بمعرفة كيف نصرح بعدد حقيقي و كيف نقرأ قيمة حقيقية و كيف نقوم بالحصول على قيمة حقيقية من الذاكرة و المركزية و كذلك كيف نقوم ببعض العمليات الحسابية ثم كيف نعرض قيمة حقيقية في console.

سنستخدم في برامجنا FP Regs كما هو موضح في الصورة أسفله:


2. خورزمية حساب مساحة و محيط دائرة

الخوارزمية algorithme التي تحسب مساحة ومحيط دائرة  (  surface et périmètre  d’un cercle). و كما نعلم فإن مساحة الدائرة تحسب بأنها نصف القطر مربع مضروب في العدد Pi، أما المحيط فهو 2 نصف القطر مضروب في العدد Pi.


Algorithme S_P_Cercle;
   var r : reel;
debut
         ecrire('Donner le rayon :');
         lire(r);
         s <- r*r*3.14 ;
         ecrire('Surface = ',s);
         p <- 2*r*3.14 ;
         ecrire('Perimetre = ',p);
         
fin.

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

فيما يلي برنامج حساب مساحة ومحيط دائرة  (  surface et périmètre  d’un cercle) بلغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000)
# calcul surface et perimetre cercle
# surface = r^2 * Pi
# Perimetre = 2* r * Pi

.data
fPI  : .float  3.14
fnum2: .float  2.0
msg1 : .asciiz " Donner le rayon : "
msg2 : .asciiz " Surface = "
msg3 : .asciiz "\n Perimetre = "
.text
main:

# Affichage des messages
la $a0 , msg1
li $v0 , 4
syscall

# lecture r
li $v0 , 6
syscall

# le nombre introduit est dans le registre d entree sortie $f0
# la valeur du $f0 est copie dans $f1
mov.s $f1 , $f0

# surface = r^2 * Pi
# r * r (r^2) dans $f2
mul.s $f2 , $f1 , $f1

# PI dans $f3
l.s $f3 , fPI

# calcul du surface
mul.s $f4 , $f2 , $f3

# Affichage des messages
la $a0 , msg2
li $v0 , 4
syscall

#print surface
mov.s $f12 , $f4
li $v0 , 2
syscall


# Perimetre = 2 * r * Pi
l.s $f5 , fnum2
# 2 * r
mul.s $f6 , $f5 , $f1
# 2 * r * Pi
mul.s $f6 , $f6 , $f3

# Affichage des messages
la $a0 , msg3
li $v0 , 4
syscall

#print perimetre
mov.s $f12 , $f6
li $v0 , 2
syscall

# end program
li $v0 , 10
syscall
.end main

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



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


تعليقات