المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: سؤال حول مقاطع الذاكرة::::
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
إسماعيل ابراهيم
علمت أن نظام التشغيل يخزن معلوماته في قطاع معين من الذاكرة (على ما اظن 0040×0)وفي هذا القطاع توجد في كل قطعة معلومة
-(مثلا 0017 معلومات لوحة المفاتيح أي انه في 0017-0040 توجد معلومات لوحة المفاتيح) أين أجد قائمة بكل العناوين وما يشغلها من معلومات النظام؟؟
خضر ترزي
مقاطع الذاكرة تلك مرتبطة بخطوط مقاطعة في الجهاز

نظام التشغيل ليس لديه طريقة موحدة لتخزين المعلومات و لكنه يوفر اوامر API لتزويدك بمعلومات اضافية عن الجهاز

جميع اوامر ال API يفترض ان توجد في ال Windows Developer SDK في مكان ما في http://msdn.microsoft.com اذا لم اكن مخطى فالمستندات هناك في ذلك الملف يمكن وصل حجمها الى 200 ميجابايت

الطريقة المثلى للحصول على معلومات من خلال المعالج نفسه هو باستخدام خطوط المقاطعة الاولية، مثل توجيه امر الى لوحة الشاشة او اللوحة الام لتحصل على معلومات منها

طريقة التعامل مع خطوط المقاطعة و لغة الالة كلها معا موجودة في مستندات المعالج بنتيوم التي تقدمها انتل ايضا في مكان ما في موقعها في انترنت wink_smile.gif ، في مكان ما المشكلة لانني لا اتذكر اين و لكنني انزلت مستندات رائعة العام السابق تشرح كل ما يمكن ان تتخيله في اللوحة الام و الطريقة التي يعمل بها المعالج بصورة اولية بدون الحاجة الى نظاام تشغيل، تلك المستندات تستخدم بالمناسبة لبناء نظم التشغيل http://www.intel.com

المسئلة انه هل سوف تسمح لك نسخة ال Windows التي تستخدمها بتنفيذ تعليمات وصول مباشر الى الذاكرة او موارد الجهاز، حتى ولو كنت تستخدم Linux لا اعتقد بانه سوف يسمح لك للحفاظ على استقرار النظام، فعملية كتابة واحدة قد تؤدي الى انهيار تكامل النظام و اعادة تشغيل الجهاز

في Windows على ما اظن يجب ان تطلب من ال compiler ان يبني البرنامج على شكل Service ليسمح له بالعمل في الحلقة رقم 2 من حلقات المعالج او الحلقة رقم 1 ربما حيث يسمح للكود بعمل امور تخاطب متقدمة و اظن على شكل VXD او DRV (مش متذكر الاختصار) المهم ان الكود عبارة عن driver فسوف يسمح له بالعمل في الحلقة صفر

السابق يتعلق ب Windows NT و 2000 و XP لا اعلم بخصوص Windows 9x حيث اظن نظم الحماية فيه تمنع فقط التعامل المباشر مع القرص الصلب
إسماعيل ابراهيم
شكرا لك أخي على هذا الرد السريع والمفيد...
لا تتصور كم أفدتني ب(مقالك) هذا...


الف شكر لك أخي خضر
Developer .NET
ويندوز لا يستخدم إلا حلقة 3 و حلقة 0

لا يستخدم الحلقة 1و لا 2

لكي يتوافق مع المعالجات الأخري غير معالجات انتل ....

ويمكنك برمجة برنامج في الحقلة 0 بإستخدام ال DDK
إسماعيل ابراهيم
لاحظت أنكم تركزون على نظام الويندوز .. الذي هو نظام محمي ..لكن ماذا عن الدوس؟
وأيضا سؤالي كان حول الحصول على المعلومة وليس كتابة الى هذا العنوان في الذاكرة.
ففي أحد البرامج ورد ما يلي :
[PHP]kayboard far *keys=MK_FP(0x0040,0x0017)[/PHP]
حيث : keyboard هو مبنى تم تعريفه في البرنامج
و far لأنشاء مؤشر يحمل عنوان كبير (32بت 16 للقطاع و 16 للمقطع)
و MK_FP لإنشاء مؤشر كبير يحوي العنوان الموجود بين الاقواس.. بهذه الطريقة نضع المعلومات في ذلك العنوان داخل المبنى keyboard لاننا نعلم أن العنوان 00400017 يحتوي على معلومات لوحة المفاتيح أو بالاحرى حالات المفاتيح!

لو غيرت ال 0017 لشيء آخر سأحصل على معلومات أخرى.. أين أجد قائمة بهذه العناوين والمعلومات...
شكرا على تفاعلكم..
هاني الأتاسي
بالنسبة للدوس أو النمط الوهمي Virtual Mode فكلامك صحيح .. حيث يوجد قسم بحجم 256 بايت من الذاكرة يسمى بمتحولات البيوس أو Bios Variables هذا يكون طبعا في المقطع 40H ويبدأ بالازاحة 0000H حتى 0100H ..

أنا عندي كتاب اسمه PC INTERN وهو أفضل موسوعة برمجية للهاردوير وميزته أنه يعطي الأمثلة بثلاث لغات (السي ، البيسك ، الأسمبلي) .

يوجد في هذا الكتاب شرح وافي على هذه المنطقة من الذاكرة وسوف تجدها في الصفحة 67 . الكتاب حملته مؤقتا في الوصلة التالية وسوف أمسحه قريبا (شي أسبوع) وحجمه حوالي 50 ميجا .
http://people.msoe.edu/~atassim/download/PCINTERN.PDF

بالنسبة لكلامك لدي تعليق :
far لا تعني مؤشر يحمل عنان 32 بت .. هذا فقط في حالة كانة نوع الذاكرة المستخدمة flat وهي في هذه الحالة فاننا نستخدم Protected Mode للوصول إلى الذاكرة عن طريق مساعدات مثل DPMI أو Dos Protected Mode Invironment .
في كودك هذا far تعني مؤشر حجمه 20 بت . أي أن مؤشر الfar يمكن أن يؤشر في أي محل ضمن ال 1 ميجا . مؤشر الfar يحتوي على قسمين ال segment أو مقطع و ال offset أو ازاحة . وكل واحدة منها عبارة عن 16 بت ولكن لا يتم جمعهما من أجل تكوين 32 بت كما قلت ولكن يتم جمعهما كالتالي :
segment * 10H + offset
أي يتم ازاحة المقطع أربع بتتات ومن ثم يتم جمع الازاحة له من أجل تكوين عنوان من 20 بت .

بالنسبة إلى متحولات البيوس فالعنوان الحقيقي لها هو :
[code2]
from 0040:0000 == 400H
to 0040:0100 == 500H
[/code2]
إسماعيل ابراهيم
شكرا لك أخي هاني... والله إنك موسوعة يا راجل... teeth_smile.gif شكرا على المعلومات القيمة.. ومنكم نستفيد.. دائما بإذن الله
Firas Sadiyyah
إلى الأخ هاني،

ألف شكر على هذا التوضيح الممتاز ، الرجاء عدم مسح الكتاب المذكور كمان شوي، بسبب أنه حجمه كبير، والإنترنت عنا (Syria) عدم خالص، وأنت بتعرف شو القصة.:mad: :mad: omg_smile.gif omg_smile.gif :confused: :'(


تشكرات teeth_smile.gif wink_smile.gif
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.