السلام عليكم
في جهاز يقبل كود C . خلاص ، وهذا الجهاز نفسه يستخدم المعاملات القسمة في اشياء اخري ، لذلك نريد عمل قسمة فيه وبطبع لا نقدر استخدم معاملات القسمة
السؤال
ما هي الطريقة التي به نقسم و بدون هذه المعاملات -معاملات القسمة- ؟
شكرا
السلام عليكم
في جهاز يقبل كود C . خلاص ، وهذا الجهاز نفسه يستخدم المعاملات القسمة في اشياء اخري ، لذلك نريد عمل قسمة فيه وبطبع لا نقدر استخدم معاملات القسمة
السؤال
ما هي الطريقة التي به نقسم و بدون هذه المعاملات -معاملات القسمة- ؟
شكرا
السلام عليكم
جرب
أخي انظر هذا الموضوع :
حيث يمكنك اجراء القسمة بالعشري بنفس الطريقة
بالتوفيق
استخدم تعليمات الازاحة Shift
الازاحة نحو اليمين تعني قسمة الازاحة نحو اليسار تعني ضرب (او العكس لا اذكر تماما)
الاخوان في قسم الاسمبلي قد يساعدونك في ذلك
اللهم صل و سلم على سيدنا محمد
كاف و نون خلقهم و فنائهم كاف و نون
عالمي شاشة و لغتي صفر و واحد
Just Smile ............You can do it
When you stop learning ... You stop leading
لساني بنطقي صامت عنه عادل............وقلبي بصمتي ضاحك منه هازل
وأتـعـب من نـاداك من لا تـجيبـه............وأغـيظ من عـاداك من لا تـشاكـل
مدونتي الشخصية : Tammam Koujan
آخر مواضيع المدونة :
أخي تمام كوجان
الإزاحة حالة خاصة فقط من القسمة و الضرب
إذ أن الإزاحة المنطقية إلى اليمين عبارة عن قسمة على 2 فقط
و الإزاحة المنطقية إلى اليسار عبارة عن الضرب في 2 فقط
باقي الأرقام تستوجب تركيبات معقدة مما سبق ذكره (إن كانت ممكنة أصلا)
الأخ الفاضل ...
يمكنك تحويل القسمة إلى عملية طرح متكرر، كالتالى:
int main ()
{
int num = 31; // الرقم
int base = 4; // المقسوم عليه
int result=0; // الناتج
int remind=0; // الباقى
if (base==0) // إذا كانت القسمة على صفر
printf("Divid by ZERO"); // كمية غير معرفة
else
{
remind = abs(num);
while(remind>=abs(base))
{
remind-=abs(base);
result++;
}
if (num<0) remind*=-1;
if ((num*base)<0) result*=-1;
printf("Result: %d / Remind: %d", result, remind);
}
return 0;
}أرجوا أن يكون هذا المطلوب، حيث 31 مقسومة على 4 = 7 والباقى 3
شكراً
Nothing is impossible, the word impossible itself says that: I M - Possible
السلام عليكم ورحمة الله وبركاته
نفس المثال ولكن بالأسمبلي
كنت استخدمته في أحد مشاريعي السابقة
_div_start: movl $0,%ecx lbl_div_subtract: subl %ebx,%eax incl %ecx cmpl %ebx,%eax jge lbl_div_subtract movl %ecx,%eax ret
المعطيات في المسجلات eax وebx
والنتيجة في eax
ولو كان ecx مهم فحطه في المكدس قبل طلب الدالة div
بالطبع سيحدث لوب اذا تمت القسمة على صفر بدون إضافة استثناء لذلك في صورة خطا أو ما شابه
وأفتكر أني كنت صممت برامج بسيطة لقسمة الكسور (بدون اللجوء لأوامر الfpu زي اللي في الx87 وغيرها) .. يمكنني البحث عنها إذا حبيت .
تم تعديل هذه المشاركة بواسطة ماشي في 2 أبريل 2007 في 11:24
هذا الموضوع مغلق.