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

بعض الأسألة حول الاسمبلي

مغلق
بدأه Al-Saqqaf في 9 أكتوبر 2004 · 6 رد · 958 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اول الامر احب ان اقول انه ليس لدي اي شي عن لغة الاسمبلي الا بعض المعلومات البسيطة جدا... وقد اخترت منتداكم الرائع لعلي اجد بعض الاجبات عن كثير من الاسألة التي تدور في خاطري

1- ما هو الفرق بين برنامج مكتوب بالأسمبلي و نفس البرنامج ولكن مكتوب بلغة عالية المستوى High Level Lan.رغم ان الكمبايلر يحول اللغة الي الاسمبلي في النهاية ... اي ان البرنامجان يكتبان بلغة واحدة.

2- نرى في كثير من البرامج انها لا تعمل الا على معالج معين او احدث فهل هناك علاقة لتعليمات الاسمبلي.

3- سؤال لا ادري ان كان له علاقة بالأسمبلي وهو عندما اعطي مؤشر Pointer في لغة عالية المستوى مثل C او الدلفي القيمة Nil فهد يدل على ان المؤشر لا يشير الي اي شي... ولكن حسب علمي المتواضع ان Nil ستكون لها قيمة عددية مثلا اذا مانت الصفر فأن الصفر هو عنوان في الذاكرة ارجو التوضيح.

وعذرا على الاطالة

ودمتم

#2

ممكن تكون إجابتي غير دقيقة

على سبيل المثال الكيوبيسك لما تعمل عليها برنامج

تحمل ملف سيستم بأوامر الكيوبيسك إلى الذاكرة ممكن

إنت ما تكون عم تستخدم كل الأوامر لذلك الأوامر البقية تحتل موقع في الذاكرة مهدور بالإسمبلي تكتب بس يلي بدك ياه

نعم دعم المعالج لصيغة أمر يختلف من معالج لأخر

يعني إذا أنا إستخدمت أمر أنشئ لـ 186 فما فوق لن يعمل على 8086

لأنه 8086 ما علموه صيغة الأمر و التعامل معه

بالتوفيق

#3

السلام عليكم

اولاً نرحب بك اخى السقاف فى المنتدى, ونسئل الله عز وجل ان ينفعك وينفع بك المنتدى.

اما بعد :

اقتباس
1- ما هو الفرق بين برنامج مكتوب بالأسمبلي و نفس البرنامج ولكن مكتوب بلغة عالية المستوى High Level Lan.رغم ان الكمبايلر يحول اللغة الي الاسمبلي في النهاية ... اي ان البرنامجان يكتبان بلغة واحدة.

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

انظر إلى هذا الكود مثلاً

if a == 0
    then b =2
elseif a == 1
    then b=3

الكمبايلر لن يتمكن ابداً من إختصار الكود بنفس الطريقه التى يمكن للإنسان ان يفعل.

على سبيل المثال يمكنك كتابة نفس الكود بالاسمبلى :

mov ebx,2
xor ebx,eax

بدون ان تقوم باى عملية مقارنه, ولكن من الصعب على الكمبايلر ان يتخذ مثل هذا القرار.

اقتباس
2- نرى في كثير من البرامج انها لا تعمل الا على معالج معين او احدث فهل هناك علاقة لتعليمات الاسمبلي.

كل معالج يختلف عن المعالجات الاخرى من حيث مكوناته, مثل ما انه صعب تركيب موتور مرسيدس على ساره فولكس فاجن صعب ايضاً تنصيب الوندوز على جهاز اميجا مثلاً.

والسلام

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

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

#4

أشكر الأخوة

وأضيف بعض الملاحظات

بالنسبة للأسئلة :

اقتباس
1- ما هو الفرق بين برنامج مكتوب بالأسمبلي و نفس البرنامج ولكن مكتوب بلغة عالية المستوى High Level Lan.رغم ان الكمبايلر يحول اللغة الي الاسمبلي في النهاية ... اي ان البرنامجان يكتبان بلغة واحدة.

جوابي سيكون مثال... لنفرض برنامج عبارة عن مسج فقط (برنامج يظهر رسالة للمستخدم لا أكثر ولا أقل )

لوكان هذا البرنامج مكتوب بالإسمبلي سيكون حجمة تقريبا 7 كيلوبايت

نفس البرنامج لو كتب بأي لغة أو مترجم آخر سيكون حجمة من 20 إلى 28 كيلوبايت

هنا يظهر الفرق في الحجم هل تعرف لماذا ؟

لأن مترجم الإسمبلي لا يترجم إلى ماكتبت في البرنامج أما المترجمات الأخرى فتكتب أكواد إضافية للنظام .. ولتشغيل البرنامج بطريقة صحيحة 100%100

لوفتحت البرنامج الأول (المكتوب بالإسمبلي ) لوجدت دالة واحدة فقط وهي إظهار رسالة للمستخدم

لوفتحت البرنامج الثاني (المكتوب مثلا بالسي ) لوجدت أكثر من 10 دوال

مثل دالة التأكد من تحميل البرنامج - دالة للتأكد من تحميل مكاتب الربط

دالة لإنشاء وتنسيق البرنامج في الذاكرة وهذة الدوال كلها لتشغيل البرنامج بشكل إحترافي .. وهكذا كل مترجم لة بنية محددة

يكتب بها برامجة .. إلى لغة الإسمبلي فهي تترجم ماتكتبة فقط لاتزيد حرف ولا تنقصة

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

لم أفهم قصدك (هل هناك علاقة لتعليمات الإسمبلي )

بعض المعالجات تختلف في الأوامر والمسجلات و..و.

ولكن أغلب المعالجات تدعم تعليمات إنتل

اقتباس
- سؤال لا ادري ان كان له علاقة بالأسمبلي وهو عندما اعطي مؤشر Pointer في لغة عالية المستوى مثل C او الدلفي القيمة Nil فهد يدل على ان المؤشر لا يشير الي اي شي... ولكن حسب علمي المتواضع ان Nil ستكون لها قيمة عددية مثلا اذا مانت الصفر فأن الصفر هو عنوان في الذاكرة ارجو التوضيح.

بصراحة سؤال ذكي ! :)

شوف أخي الكريم في لغة السي مثلا عرف مؤشر وضع قيتة NULL

حاول نقل أي قيمة لة ( ولاحظ الخطأ الناتج )

بإختصار نوع الخطأ .. تجاوز قوانين نظام التشغيل .. ولكن ليس إلى العنوان صفر ؟؟

المؤشر الذي تعرفة ستكون قيمتة 0 للقسم الذي عرفتة فية

أغلب التعاريف في قسم البيانات DS لنفرض أن قيمة هذا القسم 23

سيكون عنوان المؤشر 23:0 الصفر هو المؤشر

قد تعتقد أن الأمر صحيح لأنة مؤشر إلى الإزاحة 0 في قسم البيانات

ولكن الأمر ليس بهذة السهولة

أولا ماذا يمثل الرقم 23 (يمثل عنوان مقطع البيانات في الذاكرة )

بالله عليك هل تعتقد أنة 23 عنوان ؟

بكل إختصار هذة قيمة كود البيانات لكل البرامج في الجهاز .. وتسمى مجال برامج المستخدم.. والرقم 23 يمثل عنوان هذا المجال في جدول الواصفات الشامل

وهو أحد مسجلات النظام : راجع

/index.php?showtopic=42921

وأعتقد أنة يكفي إلى هنا ... لأنة لاتوجد نهاية للقصة ؟

وأي توضيح آخر تفضل

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#5

الف شكر لكم جميعا على المعلومات القيمة

بنسبة لأجابة السؤال الأول ما هي الفائدة التي سأحصل عليها اذا حشرت كود اسمبلي في لغة عالية المستوى .. اي اضيف قطعة كود اسمبلي في دالة ما!!!

هل هناك حالات يكون استخدام لغة عالية المستوى مع كود اسمبلي ضروريا

بالنسبة لسؤال الثالث شكرا كثيرا سيد jaas على الاجابة و لكن ارغب ان اتأكد من فهمي لما تفضلت به:

ما فهمته هو ان المؤشر الذي يحمل قيمة Null ثم نحاول ان نسند له قيما ما سيؤدي الي خرق قوانين نظام التشغيل وربما يكن تجاوز نظام التشغيل في محاولة تصرف البرنامج وكأنه في الحلقة صفر اي محاولة البرمجه المباشره في الذاكره

كذلك فهمت انه بأستطاعتي قراءة اي موقع في الذاكرة لكن الكتابة لا بد ان تتم تحت اعين نظام التشغيل

وشكرا على تعاونكم

#6

أخي الكريم ..

سؤالك الأول حول إدخال كود إسمبلي ضمن برنامج :

فقد تعمقنا في هذا الموضوع على الرابط التالي

/index.php?showtopic=47458

بالنسبة للمؤشارت وقيمة NULL

كلامك صحيح .. ولكن كأنة في الحلقة 0 خطأ

المؤشر عبارة عن قيمة في الذاكرة .. وليس قسم برنامج مثل CS-DS

وكما وضحت سابقا مؤشر =100 لايعني عنوان 100

ولكن معناها إزاحة 100 ضمن مقطع وينتج خطأ لأن الإسزاحة غير موجودة

اقتباس
كذلك فهمت انه بأستطاعتي قراءة اي موقع في الذاكرة لكن الكتابة لا بد ان تتم تحت اعين نظام التشغيل

في بيئة 32 بت ليس كل عنوان تستطيع أن تقرئة ولا أن تكتب إلية

من خلال برنامج في مستوى برامج المستخدم

إرجع إلى الرابط الأولى لتعرف السبب

وإلى اللقاء

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#7

تسلم...و كل عام وانتم بخير

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

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