ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › אקסטרים › מישהו יכול לתת קוד דוגמה להעברת תוכן אוגר למקטע המשותף לשורדים?
- This topic has 4 תגובות, 5 משתתפים, and was last updated לפני 16 שנים, 9 חודשים by rahamim.
-
מאתתגובות
-
27 בינואר 2008 בשעה 11:45 #76923hzhzמשתתף
שאלה בכותרת
28 בינואר 2008 בשעה 08:05 #78305rahamimמשתתףכתיבה באמצעות stosw.
קריאה באמצעות lodsw.
שים לב שתצטרך לקבוע את ds כes מכיוון שlodsw קורא מהכתובת שנמצאת באוגרים ds:si.
כלומר
push es
pop ds
lodsw28 בינואר 2008 בשעה 08:21 #78304Sarthobiמשתתףאני מצטער לומר אבל אל אף שהכוונה טובה בהערה מעליי, קשה מעוד להסיק ממנה את המידע הדרוש.
האמת היא שקראתי כאן בהרבה מקומות והתגובות לרוב מתומצתות מדי ואפשר להשקיע הרבה יותר בתגובה.
קודם כל בהסבר למעלה יש שילוב של אנגלית שדיי קיקל את המשמעות של המשפט, ויהיה הרבה יותר נחמד אם מי שרשם ישקיע קצת יותר בהסבר כי בסך הכל השאלה יכולה לעזור להרבה אנשים שרוצים להבין דברים כאלה.
ובנוסף יש אפשרות להסביר גם על הפקודות קצת? כי לזרוק סתם ככה לא עוזר הרבה ובעצם מאלץ את אלה שצריכים את התשובה המפורטת ללכת לחפש את המידע המדוייק במקומות אחרים.
לפי מה שאני הבנתי כדי לקרוא /לכתוב אל הזיכרון המשותף כדאי להשתמש בפעולות כמו:
lodsw
stosw
ופעולות אלה משתמשות באוגרים:
SI
DI
בהתאמה וכותבים/קוראים מאוגר
AX
האם ישנן דרכים אחרות לכתיבה/קריאה מסגמנט הקוד לסגמנט המשותף? (לא מדבר בהכרח על יעילות או קלות למרות שתמיד עדיף שיהיה קל ויעיל [: )
31 בינואר 2008 בשעה 15:41 #78300DL!משתתףSarthobi:
A workaround for the English/Hebrew problems: copy the text, paste to Notepad and press right ctrl+shift.
Rahamim's comment is correct. To read more about the LODSW and STOSW opcodes, try searching them in Google (the first result explains exactly what each of them does).
Generally speaking, there are several ways to read and write to the memory in 8086 assembly. The important thing to notice here, is that you need to access memory that is in a different segment than CS and DS (in fact, it is pointed to by ES). Since most opcodes that access memory assume it is in the segment pointed to by DS, you usually need to set DS to ES before executing them (like Rahamim did: PUSH ES and then POP DS). After you do so, you can use any opcode you like. For example, calling
MOV WORD PTR [0000], AA55
will write AA55 to the first word in the segment, and
MOV AX, WORD PTR [0000]
will read it to the AX register.1 בפברואר 2008 בשעה 00:04 #78295CodeGuruמנהל בפורוםעוד הערה קטנה – הדרך המקובלת בשפת סף (אסמבלי) לפנות למקטע (סגמנט) אחר היא, למשל,
mov es:[1000],ax
הבעיה היא שמנוע התחרות *לא* תומך בפעולות אלה. ולכן צריך להשתמש בשיטות שתוארו לעיל: להחליף תוכן של אוגר מקטע, להשתמש בפקודות שברירת המחדל שלהן היא מקטע אחר וכדומה.
-
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.