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

كيف يتم جعل ال Cpu ينتظر مدة زمنية معينة؟؟؟

مغلق
بدأه M.A.K. في 30 يناير 2008 · 8 رد · 2,270 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لقد بحثت في شتى أصقاع النت عن كيفية جعل ال CPU ينتظر مدة زمنية معينة

قبل تنفيذ باقي أجزاء البرنامج [ يعني مثل sleep في ال C ]

و لم أجد إلا بعض المقالات عن WAIT, INT 15H

و قد حاولت كثيرا لكني كل محاولاتي بائت بالفشل :tantrum:

ساعدوني جزاكم الله خيرا .. فالبرنامج بأكمله متوقف على هذه النقطة...

وفقكم الله جميعا

==================================================

( اللهم إني أسألك علما نافعا ورزقا طيبا وعملا متقبلا )

I'm not an expert programmer but I will do my best to be

غدًا سنكون أفضل منهم .... إنها مسألة إرادة و وقت

#2

السلام عليكم,

طيب طالما وجدت int 15 / ah = 08h ما المشكلة؟

هل هو 16 ام 32 بت ما تبحث عنه؟

تم تعديل هذه المشاركة بواسطة Junkie في 30 يناير 2008 في 13:13

Do as I say, not as I do

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

#3

يمكن فعل ذلك ايضا عن طريق الحصول على وقت النظام ومقارنة الفرق

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#4

شكرًا جزيلا على الردود

المشكلة هي أن ال CF تكون قيمته تساوي واحد

و هو إما بسبب أن ال function هي أصلا مشغولة

( و هي لم تكن مشغولة؟!! )

أو بسبب أن الجهاز لا يدعم هذه الخاصية

( لا أعرف كيف لا يدعمها ؟ لأني أظن أن أي OS لا بد أن يستخدمها في بعض الأماكن؟؟ )

أما لكونها 16 bit أو 32 bit ...

أن أصلا أريدها 16 bit

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

أرجو أن تنورني يا أستاذ Junkie جزاك الله خيرا

و شكرا أيضا للأستاذ GamingMasteR .. لكنني في الحقيقة أريدها أن تنتظر أجزاء من الثانية

آسف للإطالة

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

( بالنسبة لجهازي PentiumIII 1GHZ و WinXP )

تم تعديل هذه المشاركة بواسطة M.A.K. في 31 يناير 2008 في 11:56

==================================================

( اللهم إني أسألك علما نافعا ورزقا طيبا وعملا متقبلا )

I'm not an expert programmer but I will do my best to be

غدًا سنكون أفضل منهم .... إنها مسألة إرادة و وقت

#5

السلام عليكم ,

بالنسبة للـ32 بت فالدالة GetTickCount ترجع قيمة الوقت الذي مر على تنفيذ الويندوز بالمللي ثانية ,يمكنك استعمالها مرتين وحساب الفرق في loop

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#6

هل لك ان تضع الكود الذي تستخدمه

يمكنك استخدام NOP في delay function لكن دعنا نحاول اصلاح المشكلة من خلال المقاطعة بالبداية.

Do as I say, not as I do

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

#7

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

أنا آسف جدًا للتأخير في الرد بسبب مشاكل في مزود الخدمة عندي

عمومًا

لقد أفادني أحد الخبراء أن هذا الموضوع ( Timing in PC )

هو موضوع دراسة بحد ذاته و هو مفيد جدا و لا غنى عنه لمبرمجي الأسمبلي..

و يوجد العديد من الطرق كل له مزاياها و عيوبها

و قد أحببت أن أشارك ما وجدت معكم

تحميـــل المـلف

و الحمد لله قد وجدت ما كنت أبحث عنه فيه و يزيد!!

و لا أستطيع إلا أن أشكر كل من تفضل بالرد و بالمساعدة

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

pctim003.zip

تم تعديل هذه المشاركة بواسطة M.A.K. في 8 فبراير 2008 في 02:19

==================================================

( اللهم إني أسألك علما نافعا ورزقا طيبا وعملا متقبلا )

I'm not an expert programmer but I will do my best to be

غدًا سنكون أفضل منهم .... إنها مسألة إرادة و وقت

#8

شكرا اخي على الإفادة :thumb_up:

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#9

ما شاء الله, سلمت يداك على الإفادة :)

Do as I say, not as I do

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

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

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