السلام عليكم
انا اسف لكثرة الاسئلة
لكن عندي سؤال محيرني ماهو الهدف من الازاحة وفي مادا ساحتاج الى العمليات الحسابية
وشكرا
السلام عليكم
انا اسف لكثرة الاسئلة
لكن عندي سؤال محيرني ماهو الهدف من الازاحة وفي مادا ساحتاج الى العمليات الحسابية
وشكرا
تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 1 أبريل 2014 في 07:24 — السبب: تصغير الخط
سؤالك عجيب !
في ماذا ستحتاج العمليات الحسابية ؟ في كل شيء !
أما بالنسبة للإزاحة فهي عملية منطقية (على الأعداد الثنائية ) , توفرها لنا المعالجات وبالتالي توجد في لغة الأسمبلي , وتستخدم غالباً كضرب بقوى العدد 2 أو القسمة الصحيحة على قوى العدد 2 ..
بداية البرنامج لا تكون في كتابة التعليمات بل بالتخطيط للهدف , ثم ان احتجت العمليات المنطقية( كالإزاحة مثلاً) استعملتها وان احتجت العمليات الحسابية استعملتها
هل يمكنك توضيح سؤالك أكثر ؟
بالتوفيق
أخي إلى أي هدف تدرس الأسمبلي ؟
وهل بدأت بلغة غيرها ؟
لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر
Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone) Project = findNewProjectelse learn_codeمصطفى 36a2 كتب:سؤالك عجيب !
في ماذا ستحتاج العمليات الحسابية ؟ في كل شيء !
أما بالنسبة للإزاحة فهي عملية منطقية (على الأعداد الثنائية ) , توفرها لنا المعالجات وبالتالي توجد في لغة الأسمبلي , وتستخدم غالباً كضرب بقوى العدد 2 أو القسمة الصحيحة على قوى العدد 2 ..
بداية البرنامج لا تكون في كتابة التعليمات بل بالتخطيط للهدف , ثم ان احتجت العمليات المنطقية( كالإزاحة مثلاً) استعملتها وان احتجت العمليات الحسابية استعملتها
هل يمكنك توضيح سؤالك أكثر ؟
بالتوفيق
اخي اولا شكرا لك والله اعلم كم اعزك
بالنسبة للسؤال الاول
مثلا اريد ان اصنع برنامج فلاي غرض ساحتاج الضرب والقسمة
بالنسبة للسؤال الثاني
اتمنى ان تعطيني كود او سورس يشرح فائدة الازاحة ومثال اخر لا يحتاج الازاحة لانني بصراحة لم افهم الشرح جيدا
وشكرا لك اخي
Hisawa++ كتب:أخي إلى أي هدف تدرس الأسمبلي ؟
وهل بدأت بلغة غيرها ؟
لا احب وليس من عادتي ان اكدب
1 هدفي هو صنع برنامج رات بالاسمبلي له هدفين فقط
2 الفجوال بيسك لكن كل وقتي الان اقضيه في الاسمبلي
عندما تكتب كود بالأسمبلي فستحتاج غالبا للتعامل مع البتات بشكل مباشر و العمليات التى ستقوم بها هى وضع قيمة بت معين بصفر أو بواحد تحريك بت معين لليمين أو لليسار دمج مجموعة بتات معا بالإضافة او بالفرق و هكذا.
الإزاحه هى عملية تحريك بت أو مجموعة بتات لليمين أو لليسار و لها نوعين الإزاحه المنطقية و الإزاحه الحسابية و عندما تدرس أسمبلي ستعرف الفرق بينهم جيدا.
العمليات على مستوى البت لها أهداف كثيرة و إحداها إستخدام مساحه بالذاركة مثلما تستخدم المسجل EFlags.
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة C++er في 2 أبريل 2014 في 00:48
مدونتي: C++ Tips and Tricks
C++er كتب:عندما تكتب كود بالأسمبلي فستحتاج غالبا للتعامل مع البتات بشكل مباشر و العمليات التى ستقوم بها هى وضع قيمة بت معين بصفر أو بواحد تحريك بت معين لليمين أو لليسار دمج مجموعة بتات معا بالإضافة او بالفرق و هكذا.
الإزاحه هى عملية تحريك بت أو مجموعة بتات لليمين أو لليسار و لها نوعين الإزاحه المنطقية و الإزاحه الحسابية و عندما تدرس أسمبلي ستعرف الفرق بينهم جيدا.
العمليات على مستوى البت لها أهداف كثيرة و إحداها إستخدام مساحه بالذاركة مثلما تستخدم المسجل EFlags.
و الله ولي التوفيق
شكرا لك اخي على تواصلك
لو ممكن اخي مثال بسيط لهدف الازاحة
مثلا اريد ان اصنع برنامج فلاي غرض ساحتاج الضرب والقسمة
تذكر أن الجهاز الذي تستخدمه اسمه :" الحاسوب " ولم يحظ بهذا الاسم إلا لأنه يقوم في كل لحظة بالعمليات الحسابية والمنطقية
ليس الصحيح أن تقول" أريد مثال يحتاج الضرب والقسمة " بل انا أقول لك : أعطني مثل لبرنامج (متوسط الأهمية ) ولا يحتاج الضرب والقسمة :)
مثال بسيط وواقعي وقريب للفهم :
تريد رسم دائرة على الشاشة :)
ستحتاج بشكل واضح إلى تنفيذ معادلة الدائرة , الشكل الديكارتي : x*x+y*y=r*r هذا استخدام عملية الضرب والجمع :)
مثال آخر :
تريد
اتمنى ان تعطيني كود او سورس يشرح فائدة الازاحة ومثال اخر لا يحتاج الازاحة لانني بصراحة لم افهم الشرح جيدا
لنفرض أن لديك 4 مصابيح تضاء بالشكل التالي
x x x o
(حيث x يمثل المصباح المطفأ و o يمثل المضاء )
ثم تزاح الإضاءة لليسار
x x o x
x o x x
o x x x
وهكذا .. مثل الإعلانات على أبواب بعض المحلات مثلاً ..
هذا هو مبدأ الإزاحة بشكل تجميلي ..
----------------------
أنت تعرف المسجل ax صحيح ؟ يحتوي على al في القسم السفلي و ah في العلوي .. لنفرض أن لدينا 5 في al و 0 في ah
ماذا ستفعل لتنقل al إلى ah وتصفّر al ?
إحدى الطرق هي
mov ah,al
mov al,0
وباستخدام الإزاحة يمكن كتابة
shl ax,8
والذي سيقوم بإزاحة ax لليسار 8 بتات .. وعندها ستصبح بتات al في مكان بتات ah وستحوي al أصفاراً
بالتوفيق
مفهوم شكرا لك يا اخي تعبتك معي
والشكر موصول ايضا للاستاد C++er