الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

القسمة

مغلق
بدأه AssembleyStudent في 11 أكتوبر 2004 · 8 رد · 796 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كتبت هذا الكود لقسمة عددين بدون باقي و لا أعرف إذا كان صحيحاً أم لا لعدم وجود كومبايلر لدى الآن و هو واجب يجب أن أسلمه قبل منصف هذه الليلة .

! format=1


INP :x:;
INP :y:;
:loop: SUB :one:;
JMP LTZ :done:
LDA :x:;
ADD :z:
JUMP LWY :loop:
:done: OUT :z:
HLT

:x: (0);
:y: (0);
:z: (o);
:one: (1);

كذلك أريد أن أعرف كيف يمكن أن أحتفظ بالباقي ..

شكراً جزيلاً

#2

السلام عليكم,

أولا أريد أن أعرف ما نوع الأسمبلر الذي تستعمله وعلى ما يبدو قد يكون HLA .

في الأسمبلر العادي حين نريد أن نقسم عددين a/b نقوم كما يلي باستعمال التيعليمة div:

إذا كان b من قيمة بايت فسنقسم ما في الرجستر ax على قيمة b وستكون النتيجة في الرجستر al والباقي في الرجستر ah .

أما إذا كان b من قيمة وورد فسنقسم ما في dx:ax على قيمة b وسيكون عندنا النتيجة في الرجستر ax والباقي في الرجسترس dx .

إلى اللقاء.

#3

السلام عليكم

ما هذه الغه انا اول مره اراها, هل هى للمعالج INTEL ؟؟

عموماً البرنامج خطاء لو تابعنا الكود منطقياً:

فى الاول تحصل على رقمين X و Y , ثم تقوم بتقليق قيمة :one: يمعدل واحد.

بعد ذالك تختبر القيمه إذا كانت اقل من الصفر LTZ , وهو ليست كذالك, فبتالى تقوم باحضار القيمه الموجوده فى :x: و إضافت القيمه الموجوده فى :z: الا وهى 0 .

ثم تعود مره اخرى ل :loop: وتقلل قمة :one: فتصبح 1- والجامب ياخذك إلى :done: وهنا تكتب القيمه الموجوده فى :x: نلاحظ انها هو نفس القيمه التى كانت فى :x: وينتهى البرناج.

انا لا افرف هذه اللغه ولكن بالتحليل المنطقى توصلت إلى هذه النتيجه, ربما احد الاخوه يستطيع ان يساعدك اكثر, النتيجه التى توصلت إليها هى ان البرنامج لا يقوم بما تريده.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#4

السلام عليكم

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

أخطأت في الكود الذي فوق فهو لضرب عددين .. أنا آسف

و هذا هو الكود الذي يقوم بقسمة عددين في ون أدرس مشين ..

! format=1


INP :x:;
INP :y:
:loop: LDA :x:; 
SUB :y:;
JMP LTZ :done:
LDA :z:;
ADD :one:;
JMP LWY :loop:
:done: LDA :z:;
OUT :z:;
HLT;

:x: (0);
:y: (0);
:z: (o);
:one: (1);

الساعة الآن العاشرة أرجو أن لا أكون مسببا لإزعاجكم و لكنني مضطر .. سامحوني

#5
chik كتب:
السلام عليكم,

أولا أريد أن أعرف ما نوع الأسمبلر الذي تستعمله وعلى ما يبدو قد يكون HLA .

في الأسمبلر العادي حين نريد أن نقسم عددين a/b نقوم كما يلي باستعمال التيعليمة div:

إذا كان b من قيمة بايت فسنقسم ما في الرجستر ax على قيمة b وستكون النتيجة في الرجستر al والباقي في الرجستر ah .

أما إذا كان b من قيمة وورد فسنقسم ما في dx:ax على قيمة b وسيكون عندنا النتيجة في الرجستر ax والباقي في الرجسترس dx .

إلى اللقاء.

اقتباس
في الأسمبلر العادي حين نريد أن نقسم عددين a/b نقوم كما يلي باستعمال التيعليمة div:

لا أستطيع استخدام هذا الأمر لأن الأستاذ لا يريدنا استخدامه

شكرا

#6

.. و هذا التمرين لملئ ذاكرة الحاسب بالرقم واحد

! format=1

:loop: LDA :x:; 
STA :c:;
SHF (1);
JMP LWY :loop:
HLT;

:x: (1);

كتبته الآن ، لأن لا يوجد لدى كومبايلر لا أستطيع التأكد و التغيير إن كان خطأ ، يرجو من يستطيع مساعدتي أن لا يبخل على بذلك .

#7

السلام عليكم

برنامج القسمه يبدو صحيح من الناحيه المنطقيه, اذكرك انى لا اعرف الغه وإنما احاول التخمين.

بالنسبه لملا الذاكره بالرقم واحد فمن الصعب على تحدبد إذا كان الكود مظبوط.

اما الكود الاول فانا متاكد انه خطاء, لانك لم تستخدم العدد الذى حصلت عليه فى :y:

ارجو ان اكون قد افدتك.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#8

شكرا يا أخ أحمد

لم أعرف كيف أحتفظ بالباقي في القسمة

هل بإمكانك أن تشرح لي كيف ؟

#9

السلام عليكم

اخى الحبيب لو انك اخبرتنا باسم الغه لسهل علينا المر كثيراً, على كل حال اتوقع ان الحل يكون على النحو التالى:

! format=1


INP :x:;
INP :y:
:loop: LDA :x:; 
SUB :y:;
JMP LTZ :done:
LDA :z:;
ADD :one:;
JMP LWY :loop:
:done: LDA :z:;
LDA :x:;
ADD :y:;
OUT :x:;
OUT :z:;
HLT;

:x: (0);
:y: (0);
:z: (o);
:one: (1);

هذا مجرد إستنتاج قد يكون خاطئ, لذالك عليك ان تخبرنا باسم الغه او تدلنا على رابط يشرح قواعد الغه كى نستطيع ان نمد لك يد العون.

والسلام

تم تعديل هذه المشاركة بواسطة احمد غريب في 18 أكتوبر 2004 في 00:06

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

هذا الموضوع مغلق.

مواضيع مشابهة