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
تعليقات
إرسال تعليق