התגובות שלי בפורום
-
מאתתגובות
-
CodeGuruמנהל בפורום
שלום,
- יש כיתת מחשבים; את השורדים שולחים בדוא"ל לפני התחרות והם מורצים על ידי צוות התחרות
- בכל סיבוב רצים ארבעה שורדים, עוברים על כל האפשרויות לארבעה מתוך כלל השורדים ומכפיל הסיבובים נקבע כך שזמן הריצה יהיה סביר (ככל שיהיו יותר צוותים הוא יהיה יותר נמוך).
- שלב ראשון – השורדים כפי שנשלחו מראש; שלב שני – בבוקר התחרות ואז כולם רואים את השורדים של כולם ויש להם זמן לשנות. שלב שלישי – אחרי התיקונים; שלב רביעי – ארבעת הזוכים בשקלול של שלב א' ושלב ב' עולים לגמר; בגמר הניקוד מתחיל מאפס
- אין מגבלות לשינויים, אבל מכיוון שהציון משוקלל, אם תשלח שורד מצ'וקמק בהתחלה, תקבל ציון נמוך
- המנצח, כאמור בסוף סעיף 3 – הוא המנצח בגמר (בלי קשר לציונים הקודמים – הם רק הביאו אותו להשתתף בגמר).
- מותר להיות יצירתי, אסור לרמות. למשל – לגנוב שורדים של מתחרים לפני פרסומם. אם יש לך ספק – אתה מוזמן להוועץ באופן פרטי ולברר
בהצלחה!
CodeGuruמנהל בפורוםלהורדה של הדיבגר המקומפל
https://github.com/downloads/kirill578/CoreWars8086-Debugger/Compiled.rarCodeGuruמנהל בפורוםאתה מוזמן להשתמש בתוכנה שקיריל כתב
https://github.com/kirill578/corewars8086
לדבג את השורד.CodeGuruמנהל בפורוםשלום Abit
אתה צריך לכתוב
mov word [es:bx],07c6h
הבעיה היא ב
Endianity
ראה
סדר בתיםמקווה שעזרתי,
בהצלחה!CodeGuruמנהל בפורוםניחוש טוב, אבל לא בדיוק. אם תקרא את
RFC-1991
תראה שלחתימה יש מבנה מיוחד. אפשר לקודד באמצעות מבנה זה גם דברים אחרים…CodeGuruמנהל בפורוםytmaj5Wemt2b5FmavBHb6ZlLtZmbmxmcuBnYzpGa6FWcm5ma0d2YxJWa1J3ZjpnbmZ3blhnd6hWV
ll3dvZGcthnYuRGbx12bmlmcpNXZuNWciV2clRncvhmVmhmWK4ics52Ymhme4tmeyR2b6JHdhFmZ
4RGa1RXYvxCbr9mZ09Ga5JXal9mbn1GbllGVK4CeyB3bpRmb1ZnY0Rna0l3bjJ3YqR3avl2Zw1WY
ylWa0hnYuNmcwdHdiF3c112b5d2akJ3cvlmcwNlCuknYkV3ZsR2c2xmc2JmclNXY5JHdvlGZu9WZ
nNndIpAL5VXa0RXcj5malFnd0pHa19GasYGbr9WallHa3d2b4RlCqJ2d2lXbsVXd6EGal1memhGe
1ZXZv9me4lGZyNWZtF3YxdWdutmdr1WYu9GeTpALt1WZkNHeodHeh1WZjJnekhGesEGdipHZWNXa
pRnbnpnbm52b4NlCuYnel12Y0hWYj5mYoJndkh2Y0VWcuV3YvBHbolXc1lGZlhncwZlCsk3bppHa
udWbqFWdzhnck5Gbldyc5Jmei1iciRXezdXcpJGcHpgZt5mZwdneyFGZoVnZ1Zmdo9Wbsd2ZpVWZ
sFXamhme1JGa3BHRKkna3FHa1J3apdnc1BXZ6ZHejV2c1pXYtVHZiN3b61mcvl2VKszazF3aypWZ
=ogLldWa4dWYnIHdvVGeuhXcpZGa6xme0JWa0dmcCodeGuruמנהל בפורוםנכון, זו בדיוק השאלה.
כדי לא לקלקל את ההנאה לפותרים אתן רק רמז קטן:
כמו מה זה נראה?CodeGuruמנהל בפורוםשלום אבי,
לא נקלקל לאחרים את ההנאה בלנסות לפתור, אבל רק אומר שהפתרון של כל אחת מארבעת השאלות האחרונות הוא מחרוזת תווים קצרה יחסית.
עודדCodeGuruמנהל בפורוםפורים
CodeGuruמנהל בפורוםשלום אבי,
אני מניח שקראת את
http://codeguru.co.il/Xtreme/tech2.htm
אתה צריך להוריד ולהתקין אסמבלי ואז ההרצה המתוארת היא דרך חלון
DOSCodeGuruמנהל בפורוםאם נגדיר, למשל, מערך שכל איבר בו מכיל שני מספרים שלמים, מספר ממשי, וביט בוליאני אז הגודל של כל איבר יהיה
2*sizeof(int)+sizeof(float)+sizeof(boolean) = 2*4+4+1 = 13
ואז, אם שמים אותם ברציפות בזכרון, הכתובת של האיבר ה
N
היא
Base + 13*Nולמה זה מכפיל ב-13? הנה הסבר:
mov eax, edx ax = dx
add eax, eax ax = ax+ax = 2*dx
add eax, edx ax = ax+dx = 3*dx
shl eax, 2 ax = ax<<2 = 12*dx
add eax, edx ax = ax+dx = 13*dxCodeGuruמנהל בפורוםשני החלקים מחשבים משהו כפונקציה של
[ebp+var_4]
החלק הראשון נראה כמו הכפלה ב-13 (שמתאים למבנה נתונים בגודל כזה) והתוצאה ב
[ebp+var_8]
והשני מחשב ביט בודד (אפס או מינוס אחת).
והתוצאה ב
[ebp+var_c]כדאי לראות את קטע הקוד בשפה העילית במקביל.
CodeGuruמנהל בפורוםב"רגילים" התכוונתי לשמירה במחסנית של ערך של אוגר כדי שאפשר יהיה להשתמש בו למשהו אחר ואז הוצאה ממנה חזרה של הערך המקורי. למשל דוגמא 7.7 בעמוד 276 בספר של האוניברסיטה הפתוחה
cse.proj.ac.il/asembli/st-book-pdf.pdf
חייבים לשמור במקרה שצריך את הערך המקורי אחר כך, אבל קומפילרים שומרים הכל בכל מקרה כי לפעמים קשה לדעת האם הערך ישתנה ואו האם נזדקק לערך הישן בעתיד. לעיתים אופטימיזציה טובה יכולה להשמיט פקודות אלו.
בדרך כלל יש רק מחסנית אחת (צריך לעשות פעולות מיוחדות כדי לייצר יותר מאחת). הפקודות
push ebp
mov ebp, esp
נועדו לשמור על מצב המחסנית ולשחזר אותה בסוף השגרה על ידי זוג הפקודות
mov esp, ebp
pop ebpRET
הוא לחזור משגרה. האסמבלי מתרגם אותו ל
Return Near או Return Far
בהתאם לסוג השגרה
Call או Call FarCodeGuruמנהל בפורוםפקודות המחסנית שציינת הם שמירה "רגילה" של ערכי אוגרים. הקומפילר יכול לשים חלק מהמשתנים באוגרים אבל במקור לכל אחד מהם יש שטח זכרון משלו.
אני מאוד אוהב את הדף (שני עמודים) המתומצת הזה
http://www.jegerlehner.ch/intel/IntelCodeTable.pdf
הוא אמנם לא מכיל את ערכי ההקסה של הפקודות, אותם אפשר למצוא ב
Debug
או באתר
http://www.mlsite.net/8086/
אותו והרבה אחרים אפשר למצוא בדף הקישורים הזה
http://cs.haifa.ac.il/courses/com_org_etgar/web/references.htmlלשאלתך
40 = INC AX
41 = INC CX
42 = INC DX
43 = INC BX
44 = INC SP
45 = INC BP
46 = INC SI
47 = INC DI
והשאלה השניה
C2 = RET N
C3 = RETCodeGuruמנהל בפורוםשלום nopsled (איזה שם נחמד),
דחיפת המשתנים לפני הקריאה היא לא על מנת לשמור את ערכם, אלא כדרך להעביר פרמטרים לפונקציה.
ראי, למשל, סעיף 8.2.1.4
http://courses.engr.illinois.edu/ece390/books/labmanual/c-prog-mixing.htmlעודד
-
מאתתגובות