עבור לתוכן

שני Interrupt-ים שקשורים לזמן, לא עובדים ב-Assembly, ב-Windows?

Featured Replies

פורסם

שלום

אחרי שנים שלא נגעתי באסמבלי, רציתי לבנות תוכנית ממש קטנה שעושה Delay קטן, למשל של שנייה או כמה שניות.

אני משתמש ב-Windows XP SP3.

פתחתי חלון DOS, הרצתי debug.exe

והזנתי את התוכנית הבאה:

MOV CX,3D
MOV DX,0900
MOV AH,86
INT 15

פונקציה מספר 86h ב-Interrupt 15h, מבצעת delay,

כאשר הזמן להשהייה(במיקרושניות) נמצא באוגרים CX,DX

כך, אם אנחנו רוצים שהפונקציה תמתין 4 שניות, אז 4,000,000 מיקרושניות, בהקסה-דצימלי זה 3D0900h,

וזה בדיוק מה שהזנתי ל-CX,DX

הרצה של התוכנית הקטנה הזו מסתיימת מייד, בלי שום השהייה..

ניסיתי אופציה אחרת.

פונקציה מספר 0, ב-Interrupt 1Ah, אמורה להחזיר לנו את ערך השעון של המחשב, לתוך האוגרים CX,DX

הרצתי את התוכנית הזו:

MOV AH,0
INT 1A

וערך האוגרים CX,DX בסיומה הוא 0000..

יש סיבה ששני אינטרפטים שקשורים לשעון לא עובדים מתוך חלון DOS ב-Windows?

זה אמור להיות כך?

והאם יש משהו שיכול לאפשר את זה בחזרה?

תודה

נערך על-ידי card

פורסם
  • מחבר

מתברר שהסיבה לבעיות היא ש-Windows מריץ עבורנו את DOS במצב של Protected Mode,

ובמצב הזה הרבה גישות ל-BIOS (כמו דברים שקשורים לשעון) לא מאופשרים...

פורסם

מה עושה INT 15 זה כמו SLEEP?

לא יודע לי שיש בווינדוס פונקצייה שפשוט עושה DELAY או חוסמת לזמן מסויים אלא אם כן אתה מדבר על SLEEP שזה לא בדיוק אותו הדבר.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים