עבור לתוכן

|שאלה| איך אפשר לקרוא תווים מתוך המסך? - ASM

Featured Replies

פורסם

אני בונה משחק באסמבלר ואני צריך שבכל תזוזה של השחקן תתבצע בדיקה של התו שכתוב על הלוח מולו. אמרו לי שהפקודה הזאת נמצאת תחת הפסקה של int 21h וקראתי את כל הפקודות שיש באתר שם (http://spike.scu.edu.au/~barry/interrupts.html) ולא הצלחתי למצוא... הפקודה שאני צריך היא בסך הכל בדיקה של איזה תו כתוב בנקודה מסוימת על הלוח.

תודה רבה!

פורסם
  • מחבר

לא כל כך הבנתי את מה שכתבת והאתר לא עובד לי...

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

אני יודע שיש אופציה כזאת בפיסקה של int 21h אבל קשה לי לבדוק באתר שלהם בגלל שאני לא כל כך מבין את האנגלית שם, וגם שאלתי אנשים שמבינים אנגלית והם לא מבינים בגלל שמדובר שם על מחשבים...

פורסם

הזכרון הזה מכיל פשוט מה שיש על המסך. בשביל לדעת מה כתוב על המסך, רק צריך לקרוא אותו. שים לב אגב שלכל תו על המסך יש שני בתים בזכרון - הראשון אומר איזה תו יש שם, והשני אומר את המאפיינים שלו (צבע וכד'). כלומר, התו בפינה השמאלית עליונה שמור במקום הראשון, התו הבא במקום השלישי, וכן הלאה.

למה זה בעייתי?

אני לא רואה שב-int 21h יש אופציה לקרוא מהמסך. אני רואה רק אופציה לקרוא מ-stdin (כלומר מהמקלדת).

פורסם
  • מחבר

בעצם זה לא בעייתי...

אז נגיד אם יש לי את הערך של השורה ושל העמודה של התו, אני פשוט עושה את השורה כפול 160 (מספר העמודות בשורה כפול שתיים) ועוד העמודה ועוד 0B800h?

פורסם

קרוב אבל לא בדיוק:

אתה מעביר לאחד מאוגרי הסגמנט את הכתובת 0B800H ומתייחס לאופסט שלו למשל:

mov ax,0b800h
mov ex,ax
mov ax,es:bx

(כאשר bx מכיל את השורה כפול 160 ועוד העמודה)

פורסם
  • מחבר

נכון... מצוין!! תודה רבה רבה ושבת שלום!

ארכיון

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

דיונים חדשים