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

[ تمت الإجابة ]اسئلة بخصوص كود والمكدس

بدأه clrscr_funct في 4 أبريل 2010 · 3 رد · 1,202 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

1 .model small قرات في بعض المواقع ان هده التتعليمه تحجز لنا في داكره ko64 لكن انا عندما ساقوم بكتابة برنامج لااعرف كم من segment سيحتاج هل ko64 ام اكثر فهل يوجد يااخوه اي طريقة لتنجب وقوع مشاكل في البرنامج ادا كانت مساحته اكبرمن 64ko

mov ax,@data هل هده التعليمه تقوم بوضع عنوان segment التي تم حجزها في ax وهل هده الطريقة صحيحة mov ax,seg karim حيث ان المتغير كريم موجود في .data

3

msg db "file est trouve","&"

لمادا اضيفت & في اخر الكود عوض الرقم صفر.

4 - اريد فقط ان اعرف هل المكدس يستعمل للدوال فقط اي اننا لانستعمله الى ادا قمنا بكتابة داله واردنا استدعائها وماهو دور .stack الموجود في البرنامج وهل توجد اي دروس او تمارين تخص المكدس لانني قرات مجموعة من الكتب لكن معضمها تشرح فقط التعليمات الخاصه به مثل pop push lifo دون اي مثال تطبيقي.ولهدا ارجو منكم يااخوه ان تضعوا لي اي رابط يحتوي على امثلة تطبيقة لاستعمال المكدس .

وادا كان لديكم يااخوه اي موقع فيه تمارين الاسمبلي مع الحل فلا تبخلوا علينا بها فلغه مثل لاسمبلي لايمكن تعلمها من خلال الدروس فقط

وجزاكم الله الف خير

وشكرا مقدما. :lol:

#2
clrscr_funct كتب:

1 .model small قرات في بعض المواقع ان هده التتعليمه تحجز لنا في داكره ko64 لكن انا عندما ساقوم بكتابة برنامج لااعرف كم من segment سيحتاج هل ko64 ام اكثر فهل يوجد يااخوه اي طريقة لتنجب وقوع مشاكل في البرنامج ادا كانت مساحته اكبرمن 64ko

model هده Directive تحدد الـMemory Model التي ستستعملها في برناجك

ادا كان البرنامج لبيئة 32 بت فالـMemory Model الوحيد هو Flat

في بيئة 16 بت يمكن استعمال الاخرى ......Tiny,Huge,Large

راجع الموضوع الاتي :

اقرأ الجدول Table 2.1 Attributes of Memory Models

http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/ProgrammersGuide/Chap_02.htm

clrscr_funct كتب:

mov ax,@data هل هده التعليمه تقوم بوضع عنوان segment التي تم حجزها في ax

هده التعليمة تقوم بوضع عنوان الموقع الدي حجزت به البيانات في المسجل ax

وبعدها يجب نقله الى المسجل ds

clrscr_funct كتب:

وهل هده الطريقة صحيحة mov ax,seg karim حيث ان المتغير كريم موجود في .data

غير صحيحة

المسجل ds يجب ان يأشر على بداية مقطع البيانات لهدا من الضروري ان نمرر له العنوان في الاول

اما ادا اردت الوصول الى بيانات معينة تستعمل هده التعليمة

mov ax,offset karim

clrscr_funct كتب:

مادا اضيفت & في اخر الكود عوض الرقم صفر.

ليست & انما $ اضيفت لان النص في مقاطعات الدوس ينتهي بها

كما في الـWin32 Api ينتهي بـNULL

clrscr_funct كتب:

4 - اريد فقط ان اعرف هل المكدس يستعمل للدوال فقط اي اننا لانستعمله الى ادا قمنا بكتابة داله واردنا استدعائها وماهو دور .stack الموجود في البرنامج وهل توجد اي دروس او تمارين تخص المكدس لانني قرات مجموعة من الكتب لكن معضمها تشرح فقط التعليمات الخاصه به مثل pop push lifo دون اي مثال تطبيقي.ولهدا ارجو منكم يااخوه ان تضعوا لي اي رابط يحتوي على امثلة تطبيقة لاستعمال المكدس .

راجع الرد في هدا الموضوع

/index.php?showtopic=217090

بخصوص الامتلة فابحت في المنتدى ستجد عدة امتلة

2
#3

اولا Memory Model لن تحل المشكله لانه عن تجاوز الحد المسموح به من طرف model سيتوقف البرنامج عن العمل

وثانيا اخي عندما اقوم بكتابة برنامج انا لاعرف كم من segment سيحتاج فهل من طريقة لمعرفة دلك . لكي اعرف اي model يجب ان استعمل بالظبط

اقتباس
غير صحيحة

المسجل ds يجب ان يأشر على بداية مقطع البيانات لهدا من الضروري ان نمرر له العنوان في الاول

اما ادا اردت الوصول الى بيانات معينة تستعمل هده التعليمة

mov ax,offset karim

mov ax,seg karim انا لااقصد ال offset بل segment اي ان ax سياخد قيمة ال segment الموجود فيها المتغير كريم ومن ثم ds = ax فهل هده الطريقة صحيحه

اقتباس
ليست & انما $ اضيفت لان النص في مقاطعات الدوس ينتهي بها

الكود اللدي لدي فيه & وليس $ فما الفرق بينها وبين الصفر -

راجعت الرابط وقرات فيه ان المكدس يستعمل للدوال وهدا مادكرته في مشاركتي السابقه اي انه لايضيف اي شئ جديد لما قلت ولايجيب عن اسئلتي المطروحه بخصوص المكدسة,فطلبي كان مثال تطبيقي -داله اعطيها رقم وتقوم بحساب factorial هدا الرقم مثلا-

وجزاك الله الف خير اخي على سرعة ردك و :ty:

#4
clrscr_funct كتب:

اولا Memory Model لن تحل المشكله لانه عن تجاوز الحد المسموح به من طرف model سيتوقف البرنامج عن العمل

وثانيا اخي عندما اقوم بكتابة برنامج انا لاعرف كم من segment سيحتاج فهل من طريقة لمعرفة دلك . لكي اعرف اي model يجب ان استعمل بالظبط

لم افهم ما الدي تقصد بالضبط لكن يبدو انك تهت في موضوع segmentation , استعمل small

بالنسبة لكم من segment فهناك اربعة code segment , data segment , extra segment , stack segment

clrscr_funct كتب:

mov ax,seg karim انا لااقصد ال offset بل segment اي ان ax سياخد قيمة ال segment الموجود فيها المتغير كريم ومن ثم ds = ax فهل هده الطريقة صحيحه

غير صحيحة اخي في الرد الاول دكرت لك ان عنوان data sgement يتم اسناده للمسجل ds في اول بداية البرنامج ولا يوجد segment اسمه karim يجب استعمال الكلمة المحجوزة .data وليس karim

clrscr_funct كتب:

الكود اللدي لدي فيه & وليس $ فما الفرق بينها وبين الصفر -

راجع جيدا الكود ستجدها $ وليس & ومتلها متل الصفر

clrscr_funct كتب:

']

مثال تطبيقي -داله اعطيها رقم وتقوم بحساب factorial هدا الرقم مثلا-

ضع محاولتك اولا

تم تعديل هذه المشاركة بواسطة Ph-RevIng في 6 أبريل 2010 في 17:34

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…