פורסם 2008 ביולי 2617 שנים שלום. איך אני עושה מסגרת כמו בתמונה המצורפת? הגעתי עד המצב שזה מקרין את השם שלי במרכז המסך (ממש בעיה ) , איך אני מוסיף לזה מסגרת? [attachment deleted by admin]
פורסם 2008 ביולי 2617 שנים שים לב שהמסגרת בעצם עשויה מתווים.תגלה את התווים שיוצרים גבולות לטבלאות ותדפיס גם אותם, כמו כל מחרוזת אחרת.
פורסם 2008 ביולי 2617 שנים מחבר אבל הבעיה שאני צריך שזה יתאים את עצמו אוטומטית לכל אורך של טקסט שאני יכניס, להדפיס את התוים זה לא בעיה. יש לי רעיון לאלגוריתם אבל לפני שאשבור את הראש איך ליישם אותו (תוכנית ראשונה שלי באסמבלי) אשמח לשמוע אם הוא יעיל מספיק:1. לבדוק את אורך המחרוזת2. להקרין שורה של החלק העליון של המסגרת עד len ואז לרדת שורהואת ההמשך כבר הבנתם.השאלה איך אני אני עובד עם ההיסטים, איך אני משחק עם היסט של הסמן?
פורסם 2008 ביולי 2617 שנים אתה יודע בדיוק מה רוחב המסך שלך, אז תעשה עוד חישוב לפני זה.כך שתתחיל לכתוב במיקום (screen_length / 2) - (string_length / 2) - 1התו הנוסף הוא עבור התו של המסגרת.
פורסם 2008 ביולי 2617 שנים מחבר אכן אני יודע אבל שאלתי היא איך אני מזיז את הסמן (לא את גודל ההזזה).יש איזה אוגר היסט או משהו כזה?
פורסם 2008 ביולי 2717 שנים אני לא מבין. איך הצלחת להדפיס טקסט באמצע המסך, ולמה אתה לא יכול להשתמש באותה שיטה להדפיס את המסגרת?
פורסם 2008 ביולי 2717 שנים מחבר כי עשיתי זאת בשיטה שלא נראת לי הכי סימפטית.במקטע הנתונים הגדרתי X בתים לא מאותחלים ואז את הטקסט הקרנתי החל מהoffset שלהם (ובמקרה זה יצא במרכז המסך).אין פה שום אוטומציה וגם לא נראה לי שאני יכול לגעת במקטע הנתונים בזמן ריצה. data segment middle db 994 dup() msg db 'Bla Bla$' data ends sseg segment stack 'stack' db 200h dup(?) sseg ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ah,9 mov dx,offset middle int 21h mov ah,4ch int 21h code ends end start
פורסם 2008 ביולי 2717 שנים הייתי ממליץ לך לבדוק איך הדפסת טקסט למסך באמת עובדת ולא לנסות לנחש.ככה תבין יותר טוב למה מה שאתה מדפיס נמצא איפה שאתה מדפיס אותו ואיך תוכל לשלוט במה שאתה מדפיס.האמת שאני לא מכיר את האסמבלר הזה אבל שמתי לב שאתה קורא ל-ds בשם data ואז נראה כי שתי השורות הראשונות מיותרות.כמו כן כדאי לוודא ביציאה שהאוגר ax מכיל 4c00h ולא סתם מספר ב-al שמכיל את קוד היציאה, סתם בשביל כתיבה נכונה.בקשר להדפסה, יש לך (ככה זה בדוס בכללי) 25 שורות ו-80 עמודות במסך, שהרי הטקסט בדוס הוא ברוחב אחיד לכל תו,ואתה רוצה להדפיס במיקום ספציפי, אתה מקבל כך את המיקום בו יש להתחיל את ההדפסהoffset = ((row) * 80) + col - (string_length / 2)
פורסם 2008 ביולי 2717 שנים מחבר יש איזה דרך לחשב אורך של מחרוזת (חוץ מחיסור היסטים)?כי הרי length str תחזיר 1 ולא את אורך של str
פורסם 2008 ביולי 2717 שנים בוודאי, אתה יכול להגדיר איזשהו בית אחרי המחרוזת ולחסר את ההיסט שלו מההיסט של תחילת המחרוזת.אפשר גם לבנות פונקציה שסוכמת את מספר הבתים מהיסט מתקבל עד לבית המכיל '$' ולהחזיר את מספר הבתים שעברו.
פורסם 2008 ביולי 2817 שנים מחבר זה מה שהצלחתי עד כה (הפלט מצורף) הבעיה שהוא תוקע לי רווח אחרי כל - - - אני מנחש שזה בגלל הדולר או בגלל שפונקציה 9 פשוט מוסיפה רווח.איך נפטרים מהרווח הזה?נא לרחם בהערות - זאת הפעם הראשונה שאני נוגע באסמבלי. data segment msg db 'Yakobi Oren$' strlen EQU $ - msg - 1 CRLF db ,13,10,"$" SPACE db ,20h,"$" border1 db ,45,"$" border2 db ,179,"$" var dw 1 dup() data ends sseg segment stack 'stack' db 200h dup(?) sseg ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov var,strlen mov cx,10 mov ah,9 call middle mov cx,14 call spaces rectangle: mov cx,var call upper mov dx,offset CRLF int 21h mov cx,14 call spaces mov dx,offset border2 int 21h mov dx,offset msg int 21h mov dx,offset border2 int 21h mov dx,offset CRLF int 21h mov cx,14 call spaces mov cx,var call upper mov ah,4ch int 21h ;----------procedures---------- spaces: mov dx,offset SPACE int 21h dec cx cmp cx,0 JG spaces ret ;---- middle: mov dx,offset CRLF int 21h dec cx cmp cx,0 JG middle ret ;---- upper: mov dx,offset border1 int 21h dec cx cmp cx,0 JG upper ret ;---- code ends end start[attachment deleted by admin]
פורסם 2008 ביולי 2817 שנים מחבר מצאתי את הבעיההפסיק שמימין של db מיותר.אשמח להצעות יעול הקוד (הוא תקין).יש לי עד מחר אחר הצהריים.תודה בכל אופן בנתיים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.