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

[تنبيه - عدم تكرار المخالفة :]تصحيح الخطأ

بدأه ليااال في 17 ديسمبر 2010 · 5 رد · 821 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

محتاجة افهم اساسيات الاسمبلي عن طريق الكوز التالي حيث انني لم اتقن اساسياته

ياريت شرح الاجابة الصحيحة وتصحيح الخاطئ مع التعليل اذا سمحتوا

post-237276-061025500 1292571857_thumb.j

المرفقات
Quiz1.jpg
#2

الأخ الكريم/الأخت الكريمة

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

مرحباً بكم في منتدى الفريق العربي للبرمجة

هذا الموضوع يشتمل على مخالفة أو أكثر لقواعد المشاركة.

الرجاء التنبه وعدم تكرار المخالفة في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

#3

1- الـ unicode بايتين، لذلك 48 بت.

2- لمعرفة أكبر رقم غير مؤشر يمكن تخزينه في x بت، قومي بوضع x بت قيمتهم 1 إلى جانب بعضهم البعض (في هذا المثال 111111111111) وقومي بتحويل القيمة إلى رقم عشري، والإجابة تكون 111111111111b = 4095

لمعرفة أكبر رقم مؤشر يمكن تخزينه في x بت، قومي بتنفيذ ذات الخطوة السابقة ومن ثم اقسمي الناتج على 2 واطرحي منه 1، فتكون الإجابة 2047 والسبب هو أن لديك 2047 احتمال تحت الصفر والصفر و 2047 فوق الصفر فيكون المجموع هو 4095 احتمال.

3- التحويل من باينري إلى عشري للأعداد غير المؤشرة أتصور مفهوم، إن كان الأمر غير معروف بالنسبة لك أخبريني.

أما لتحويل باينري إلى رقم عشري مؤشر فالأمر بسيط.

بداية قومي بالحصول على المتمم الأحادي بقلب حالة جميع البتات فما قيمته 0 يصبح 1 وما قيمته 1 يصبح 0 كأنك تطبيقين NOT.

فالقيمة 11011011 تصبح 00100100

الآن أضيفي 1 إلى القيمة الجديدة فتصبح 00100101 وهو المتمم الثنائي

حولي هذه القيمة إلى عدد عشري فيكون لديك الناتج 37 وهو سالب أي الناتج -37

4- علينا تحويل العدد من عشري مؤشر إلى ثنائي لمعرفة العدد الأقل من الخانات التي نحتاجها لتمثيله ثنائياً..

هناك عدة طرق للتحويل سأذكر منها طريقة المتمم الثنائي أيضاً.

نكتب العدد بالتمثيل الثنائي وكأنه قيمة موجبة.. 512 تصبح 1000000000

نطبق NOT فنحصل على 0111111111

نضيف 1 فنحصل على 1000000000 (ما هذا! ذات الرقم) وتكون هذه هي القيمة المطلوبة فنجد أن أقل عدد مطلوب من البتات هو 10

لكن متى يتطابق الرقم إن كان موجب أو سالب بالتمثيل الثنائي ؟ الجواب: سيتطابق إن كان من الشكل: mimetex.cgi?2^n:n>=1 حيث يمكن ملاحظة أن 2 تساوي 10b و 4 تساوي 100b و 8 تساوي 1000b..

سأجيب على باقي الأسئلة بعد قليل.

علي الخروج الآن.

Do as I say, not as I do

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

#4

نتابع،

4- أكبر رقم يمكن تخزينه في 24 بت:

بنفس الطريقة المذكورة في الفقرة 2

5- أصغر عدد من البايتات التي نحتجها لتمثيل القيمة 5074

سنحتاج لتحويل القيمة إلى تمثيل ست عشري hexadecimal حتى يمكن معرفة عدد البايتات اللازمة، بالتحويل بالطرق المعروفة نجد أنه يلزم بايتين.

هل هناك طريقة أسرع لمعرفة عدد البايتات في هذه الحالة؟

بالطبع ;)

القيمة 0FFh تساوي 255

القيمة 0FFFFh تساوي 65535 وهذه قيم معروفة لمن درس الأسمبلي فأنت تحفظها بدون الحاجة إلى تطبيق التحويل وما شابه..

الرقم المذكور محصور بين القيمتين وأكبر من الأولى بالتالي هو ضمن حدود بايتين حصراً.

أصغر عدد من البتات المطلوبة لتمثيل القيمة 189

سنحتاج لتحويل الرقم إلى التمثيل الثنائي بالطرق المعروفة

نقسم الرقم على 2 فيكون الناتج 94 والباقي 1

نقسم الناتج على 2 فيكون الناتج 47 والباقي 0

نقسم الناتج على 2 فيكون الناتج 23 والباقي 1

نقسم الناتج على 2 فيكون الناتج 11 والباقي 1

نقسم الناتج على 2 فيكون الناتج 5 والباقي 1

نقسم الناتج على 2 فيكون الناتج 2 والباقي 1

نقسم الناتج على 2 فيكون الناتج 1 والباقي 0

نقسم الناتج على 2 فيكون الناتج 0 والباقي 1

نأخذ البواقي ونرتبها من اليمين إلى اليسار حسب ظهورها فيكون لدينا 10111101 وهو التمثيل الثنائي للرقم 189 وأصغر عدد من البتات نحتاجه هو 8

6- يبدو أنه مشطوب.

نتابع لاحقاً.

Do as I say, not as I do

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

#5

7- ناتج طرح C95F من 5A4B هو 90EC

لكن كيف نحصل على الناتج مع ملاحظة أن العدد الثاني هو أكبر من العدد الأول أي أن الناتج سيكون سالب.

عملية طرح رقمين تماثل عملية جمع الرقم الأول مع المتمم الثنائي للرقم الثاني، هذه القاعدة تنطبق على الأرقام الست عشرية أيضاً بالطبع..

هناك 3 طرق في الواقع أعرفها للحصول على المتمم الثنائي لقيمة ست عشرية

للفائدة سأذكرها:

1- من خلال المتمم الأحادي:

على اعتبار أن الرقم C95F سيتم طرحه، سنقوم بالحصول على المتمم الثنائي له وذلك من خلال تنفيذ NOT للحصول على المتمم الأحادي ومن ثم إضافة 1 للناتج فنحصل على القيمة (بالتمثيل ست عشري) 0x36A1

سنقوم الآن بجمع 0x36A1 مع 0x5A4B فنحصل على 0x90EC

2- من خلال طرح الرقم الثاني من القيمة 0xFFFF (لو كان الرقم يتكون من بايت واحد نستخدم 0xFF .. لو كان بايتين نستخدم 0xFFFF وهكذا) ومن ثم إضافة 1

بطرح 0xC95F من 0xFFFF نحصل على 0x36A0، نضيف لها 1 فنحصل على 0x36A1 وهي قيمة المتمم الثنائي ونتابع بالجمع.

3- كما توضحه الصورة التالية

post-7008-055796200 1292715819_thumb.png

ومن ثم إضافة 1 أيضاً، فنحصل على 0x36A1 ونتابع بالجمع.

8- للأسف لم أدرس النظام الثماني لعدم حاجتي إليه من قبل.

المرفقات
untitled.PNG

Do as I say, not as I do

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

#6

وفقك الله يا أخي

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