קוד השורד או פיענוח קוד הזומבים?

עמוד

ברוכים הבאים לאתר תחרויות קודגורו! פורומים אקסטרים קוד השורד או פיענוח קוד הזומבים?

מוצגות 5 תגובות – 1 עד 5 (מתוך 5 סה״כ)
  • מאת
    תגובות
  • #83100
    shaharma
    משתתף

    רציתי לשאול על מה כדאי לי לעבוד קודם, פיענוח קוד הזומבי או כתיבת קוד בסיסי לתחרות, ואח"כ לשבת על הקוד של הזומבים.
    בנוסף, נתקלתי בכמה בעיות בשכפול השורד, אשמח לקבל הסבר קצר מעבר למה שמוסבר במצגת.

    #83101
    eyalido
    משתתף

    אני מאמין שיותר חשוב לעבוד על קוד לתחרות, כי לא משנה אם תוכל להשתלט על הזומבים, אם לא יהיה לך קוד בשבילם להריץ זה לא יעזור לך בכלל.
    לגבי העתקה של הקוד שלך, הדרך הפשוטה ביותר והבסיסית ביותר להעתיק את הקוד שלך הוא באמצעות הפקודה movsw. הפקודה movsw שפירושה move string word בעצם לוקחת את המילה (שני בתים) במיקום הds:[si] וכותבת אותה אל המיקום es:[di]. חשוב קודם כל אם משתמשים בפקודה להעביר את es כך שיצביע על cs, אז אפשר להשתמש בpush cs ואחר כך pop es. אחרי זה כמובן שצריך לגרום לsi להצביע על תחילת הקוד שתרצה להעתיק. הפקודה גם עושה auto increment לsi ולdi כך שאין צורך לדאוג לכך, ורק צריך לדאוג שהיא תרוץ מספר פעמים שמתאים לאורך הקוד שלך (אם משתמשים בmovsw כמובן צריך לדאוג שאורך הקוד יהיה מספר בתים זוגי..). אני מקווה שהסברתי מספיק ברור, אבל לצורך העניין אני אצרף קוד פשוט שמעתיק את עצמו מיד אחרי הקוד שלו (כך שהip שלנו יתקדם ישירות לקוד החדש ולא יהיה צורך לפקודת jmp). שים לב אגב שפקודת movsb היא אותו דבר רק שהיא מעבירה בית אחד ולא שניים.
    before:
    push cs
    pop es
    add ax,start-before
    mov si,ax
    add ax,endd-start
    mov di,ax
    start:
    movsb
    endd:

    #83102
    Idan Dor
    משתתף

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

    לאייל אני די בטוח ש movsw זה move single word ולא move string word (לדוגמא הפקודה movdw שלא נתמכת במנוע המשחק היא move double word שמעבירה 4 בתים של מידע אז יותר הגיוני שזה single ולא string)

    #83103
    Idan Dor
    משתתף

    לאחר בדיקה נראה שאתה צודק וזה באמת move string word.
    אופס.

    #83104
    eyalido
    משתתף

    אגב לגבי הקוד לדוגמא שנתתי כאן, מפני שאני משתמש בmovsb ולא movsw, יכול להיות מאוד פשוט להוסיף עוד שורה שתתקיף (כמו לעשות בהתחלה push cs, pop ss ולהוסיף אחרי זה פקודת push בשביל לתקוף את הזיכרון בכיוון ההפוך). כל מה שתצטרך לעשות אחרי זה (כל עוד הפקודה שאתה מכניס היא אופקוד באורך של ביית ולא יותר מזה) זה להחליף את movsb בmovsw וזה עדיין יעתיק לך את כל הקוד בפקודה אחת..

    לעידן, קודם כל קוראים לי עידו, אבל לא נורא 🙂
    לגבי מה הראשי תיבות אומרים, זה לא ממש משנה, זה לא מה שיעזור לי לכתוב קוד מנצח חחח.

מוצגות 5 תגובות – 1 עד 5 (מתוך 5 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.