התגובות שלי בפורום
-
מאתתגובות
-
19 בפברואר 2007 בשעה 03:24 בתגובה ל: לאחראי פורום/תחרות- שליחת השורד לתחרות מאימייל אחר.. אודה לקבלת תשובה #78390DL!משתתף
היי ניר,
אין שום בעיה.
אל תשכח לציין במייל את כל הפרטים המבוקשים (שם הקבוצה באנגלית, שמות חברי הצוות בעברית, גירסה סופית של השורדים המקומפלים).בהצלחה!
DL!משתתףExamples:
call far ptr 1008:3187 ; 9A 87 31 08 10
call far [bx] ; FF 1FUsage:
CALL FAR expects a single operand ("argument"), which can be either a direct address (1st example) or indirect address (2nd example).Then, it takes the following actions:
1. push the value of CS to the stack
2. push the value of IP to the stack (IP already points to the *next* opcode, that is – the one after the CALL FAR opcode)
3. set the values of CS and IP to the given address
In general, if you can't find documentation for some opcode – you can try going through the engine's source code. That way you can see for yourself exactly what the opcode does.DL!משתתףהמטרה של השורד היא לשרוד אחרון, ז"א להיות המתחרה האחרון שנשאר חי בזירה. לגבי הניקוד – השורד שנשאר חי בסוף כל סיבוב מקבל נקודה (אם כמה שורדים נשארו בחיים – הנקודה מתחלקת ביניהם).
מה המשמעות של להשאר בחיים?
שורד מת כשהוא מריץ פקודה בלתי חוקית (רצף בתים שלא מתורגם לפקודת אסמבלי חוקית). זה יכול לקרות, למשל, אם שורד מתחרה יצליח "לפגוע" בשורד שלך ולדרוך על הקוד שלו עם בתים אקראיים.זה הרעיון הבסיסי במשחק. מעבר לכך, אני מציע שתוריד את מנוע המשחק ותסתכל על שורדי הדוגמא שמגיעים איתו. פירוט רב יותר תוכל למצוא באתר תחת המדריך.
DL!משתתףהקפיצה לא מכוונת למקום ספציפי בקוד, למרות שזה נראה ככה במבט ראשון.
הסיבה היא שבאסמבלי של 8086 קפיצות הן בדר"כ רלטיביות, ז"א האופקוד אומר למעבד לקפוץ בזיכרון כמות מסויימת של תאים קדימה או אחורה *מהמיקום הנוכחי שלו*.
התרגום של האופקוד לשפה "קריאה" גורם לזה להראות כאילו הקפיצה היא למיקום קבוע, אבל זה לא המצב.בכל מקרה, המנוע מתייחס לזומבי כמו לכל שורד רגיל, כך שהוא יטען בכל פעם למיקום אקראי.
DL!משתתףקוד המקור של מנוע המשחק אכן זמין להורדה, בכתובת:
http://sourceforge.net/projects/corewars8086קוד המקור של השורדים מהתחרויות הקודמות אינו זמין להורדה, כיוון שהצוותים היו צריכים להגיש אך ורק את הקוד המקומפל.
יחד עם זאת, כיוון שקוד המקור היה באסמבלי – הקוד המקומפל כמעט ולא שונה ממנו. ניתן, למשל, לצפות בקבצים המקומפלים בדיבאגר כלשהו (*), ולראות בדיוק מה הם עושים.(*) debug, gdb, …
DL!משתתףבאופן עקרוני אין התחייבות מי מבין שני השורדים (באותה קבוצה) ירוץ קודם.
אתה יכול לבדוק מה קורה בפועל בשתי דרכים-
-
קריאת החלק הרלוונטי בקוד המקור של מנוע המשחק.
-
הרצת ניסוי.
DL!משתתףSorry, I don't know any good reference for 8086 assembly.
As for the other question, the engine implements all 8086 opcodes, except the following:
- segment prefix (CS:, DS:, ES:, SS:)
- DAA, DAS, AAA, AAS, AAM, AAD
- IMUL, IDIV
Also, the auxiliary flag is never updated.
DL!משתתףThe engine doesn't support segment prefixes, so the "ES:" part (which is not the default for "JMP FAR [DI]") is treated as invalid opcode.
Even if you managed to jump to ES:DI using supported opcodes (e.g "PUSH ES", "PUSH DI", "RETF"), you'd still have a problem, as the engine only allows you to run code from the Arena segment. Otherwise, your survivor would simply jump to its private memory / stack, where it can't be touched by the other survivors – making it invulnerable to attacks.
In fact, the engine doesn't look at your CS regsiter, but at the actual "linear" address your code is running from – this means you can change your CS segment to whatever you want, as long as your CS:IP still point the Arena memory (I believe the 2006 winning survivor actually used this feature). For example, say the Arena starts at 1000:0000 and ends in 1000:FFFF — changing CS:IP to 1001:0000 would be legal, but changing it to 1001:FFFF wouldn't be).
DL!משתתףשאלות ספציפיות כאלה, עדיף שתפנה ל-
support.codeguru@gmail.comDL!משתתףטוב, עכשיו כל התמונות שם.
DL!משתתףתודה, כיף לקרוא שנהניתם!
נשתדל להעלות תמונות בקרוב (ברגע שנמצא את כל המצלמות), ואולי אפילו סרטון וידאו.
בכל מקרה, אני אעלה את השורדים שהשתתפו בתחרות ל
SourceForge
(כמו בשנה שעברה)DL!משתתףקודגורו אקסטרים היא תחרות שנתית, ואם לא יהיו הפתעות מיוחדות – התחרות הבאה תערך בתחילת 2007.
אין התחייבות לגבי תאימות לאחור, אבל לא נראה לי סביר שנבטל את התמיכה בדברים שהזכרת (בסה"כ הם היו די מוצלחים השנה).
DL!משתתףAnd another thing to consider:
Notice the difference between
- JMP BX
- JMP [BX]
Your code does the second, but I think you mean the first.
DL!משתתףThe reason is Endianness issues.
The code would probably work fine if you change the second opcode to:
mov word ptr [bx], 0a5f3h ; rep stoswFor full details see http://en.wikipedia.org/wiki/Endianness
DL!משתתףאחלה רעיון לשורד.
-
-
מאתתגובות