ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › אקסטרים › קוד השורד או פיענוח קוד הזומבים?
- This topic has 4 תגובות, 3 משתתפים, and was last updated לפני 9 שנים, 9 חודשים by eyalido.
-
מאתתגובות
-
7 בפברואר 2015 בשעה 23:17 #83100shaharmaמשתתף
רציתי לשאול על מה כדאי לי לעבוד קודם, פיענוח קוד הזומבי או כתיבת קוד בסיסי לתחרות, ואח"כ לשבת על הקוד של הזומבים.
בנוסף, נתקלתי בכמה בעיות בשכפול השורד, אשמח לקבל הסבר קצר מעבר למה שמוסבר במצגת.8 בפברואר 2015 בשעה 20:37 #83101eyalidoמשתתףאני מאמין שיותר חשוב לעבוד על קוד לתחרות, כי לא משנה אם תוכל להשתלט על הזומבים, אם לא יהיה לך קוד בשבילם להריץ זה לא יעזור לך בכלל.
לגבי העתקה של הקוד שלך, הדרך הפשוטה ביותר והבסיסית ביותר להעתיק את הקוד שלך הוא באמצעות הפקודה 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:9 בפברואר 2015 בשעה 20:26 #83102Idan Dorמשתתף"בנוסף, נתקלתי בכמה בעיות בשכפול השורד, אשמח לקבל הסבר קצר מעבר למה שמוסבר במצגת."
האם אתה מתכוון לשיכפול קוד כמו שאייל מדבר עליו או על שיכפול קוד מהסוג של שימוש בשתי שורדים זהים?לאייל אני די בטוח ש movsw זה move single word ולא move string word (לדוגמא הפקודה movdw שלא נתמכת במנוע המשחק היא move double word שמעבירה 4 בתים של מידע אז יותר הגיוני שזה single ולא string)
9 בפברואר 2015 בשעה 20:31 #83103Idan Dorמשתתףלאחר בדיקה נראה שאתה צודק וזה באמת move string word.
אופס.10 בפברואר 2015 בשעה 16:30 #83104eyalidoמשתתףאגב לגבי הקוד לדוגמא שנתתי כאן, מפני שאני משתמש בmovsb ולא movsw, יכול להיות מאוד פשוט להוסיף עוד שורה שתתקיף (כמו לעשות בהתחלה push cs, pop ss ולהוסיף אחרי זה פקודת push בשביל לתקוף את הזיכרון בכיוון ההפוך). כל מה שתצטרך לעשות אחרי זה (כל עוד הפקודה שאתה מכניס היא אופקוד באורך של ביית ולא יותר מזה) זה להחליף את movsb בmovsw וזה עדיין יעתיק לך את כל הקוד בפקודה אחת..
לעידן, קודם כל קוראים לי עידו, אבל לא נורא 🙂
לגבי מה הראשי תיבות אומרים, זה לא ממש משנה, זה לא מה שיעזור לי לכתוב קוד מנצח חחח. -
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.