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

مثال حاولت تطبيقة ولم اصل لنتيجه RCR+SHL

بدأه خيالي... في 27 أبريل 2010 · 3 رد · 729 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة لله وبركاته

حاولت يا اخون حل هذا المثال (الموجود في احد الكتب)بشكل مفصل حتى اتمكن من فهم الطريقه بشكل افضل

فالمثال يقوم بعكس القيمه من 11011100 الى 00111011

وهذا هو المثال :

أكتب جزء من برنامج يقوم بعكس الخانات الموجودة في المسجل AL ووضع النتيجة في المسجل DL فمثلاً إذا كانت محتويات المسجل AL

هي الرقم الثاني 11011100 يتم وضع الرقم 00111011 في المسجل BL.

الحل :

يتم استخدام الأمر SHL حيث يتم وضع الخانة ذات الوزن الأكبر في بيرق المحمول وبعدها مباشرة يتم استخدام الأمر RCR لوضعها في

الخانة ذات الوزن الأعلى في المسجل BL وتكرار هذه العملية عدد 8 مرات. كما في الجزء التالي

MOV CX, 8

Reverse: SHL AL,1

RCR BL,1

Loop Reverse

MOV AL , BL

فقمت بتفصيل الحل بحيث كتبت القيمه الاساسية وهي

11011100

طبعا اعرف ان CX عباره عن عداد يحسب عدد الخانات المحوله

SHL AL,1

تعطينا النتجه

10111000

الان يصبح CF بواحد

اخرجنا اول خانه من اليسار

وادخلنا صفر من اليمين

RCRثم نقوم بعمليه على القيمه السابقه 10111000

وتصبح

11011100

بحيث اخرجنا من جهة اليمين اول خانه وادخلنا CF والذي يحتوي على الرقم واحد

ومع تكرار ذلك اكثر من مره وجدت النتيجه واحده !!!!!

ولم يكن هناك اي تغير

ارجوا مساعدتي لتوضيح الفكره بشكل صحيح

#2

أخي الكريم لاحظ ما كتبته

اقتباس
RCRثم نقوم بعمليه على القيمه السابقه 10111000

RCR أنت لا تطبقها على العملية السابقة، أنت تطبقها على BL

RCR ستقوم بأخذ البت الذي تم إخراجه إلى CL وتضعه في الـ most-significant bit الخاص بـ BL وتخرج الـ least-significant bit منه وتضعه في CF

AL = 11011100b

BL = 00000000b

بعد 1 جولة: BL = 10000000b

بعد 2 جولة: BL = 11000000b

بعد 3 جولة: BL = 01100000b

بعد 4 جولة: BL = 10110000b

بعد 5 جولة: BL = 11011000b

بعد 6 جولة: BL = 11101100b

بعد 7 جولة: BL = 01110110b

بعد 8 جولة: BL = 00111011b

مختصر الكلام، ما كتبته يقوم بتنفيذ ما تريد بشكل صحيح 100%

لكنك أخطأت في التحليل فقط على ما يبدو جراء قراءة الكثير من الـ ones & zeros :D

تم تعديل هذه المشاركة بواسطة Xacker في 27 أبريل 2010 في 17:11

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

بارك الله فيك اخي Xacker

اقتباس

لكنك أخطأت في التحليل فقط على ما يبدو جراء قراءة الكثير من الـ ones & zeros

:D فعلا كنت محتاج في المثال لتوضيح قيمه BL بقيمتها الابتدائية وهي 00000000

وان قيمه CF الاولى تدخل على المسجل الذي يليه وليس كما توقعت انه لكل مسجل CF خاص به يتم التعامل معه بصفه منفرده عن المسجل السابق

اشكرك من الاعماق

تم تعديل هذه المشاركة بواسطة خيالي... في 27 أبريل 2010 في 21:29

#4

العفو، من يجتهد في البحث عن حل مشكلته لن يصعب عليه شئ وإن حصل فنحن هنا للمساعدة :)

بالتوفيق.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

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