בעיות הוספה וגישה לזכרון באסמבלר - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

בעיות הוספה וגישה לזכרון באסמבלר


SweeT_EviL

Recommended Posts

יש לי שני שורות שעושות לי בעיות

xchg turn,nextTurn

mov game[gameLoction],"wn"

אני מניח שבראשון זה קשור לזה שיש שני משתנים בשני הצדדים, ובשני שזה מחרוזת או הGAMELOCTION (אולי אפשר להכניס רק BX/SI/DI).

השאלה שלי מה אני יכול לעשות כדי לתקן את זה?

עריכה:

וגם

xor xLoction,xLoction

קישור לתוכן
שתף באתרים אחרים

בגדול ב- assembly אתה לא יכול לעשות פעולה בין שני שני תאי זכרון, אלא רק בין תא זכרון לרסיסטר (או כמובן שני רגיסטרים).

אתה יכול לעשות משהו בסגנון:


mov eax, [turn]
xchg nextTurn, eax
mov [turn], eax

קח בחשבון שיש הבדל מבחינת האטומיות של הפעולה, אבל אני מסופק שזה משנה לך. כמו כן קח בחשבון שלא כתבתי אסמבלי כבר המון זמן, ויתכן שהסינטקס קצת שונה.

קישור לתוכן
שתף באתרים אחרים

במקום זה

mov game[gameLoction],"wn"

שיניתי ל

mov si,gameLoction
mov game[si],"wn"

ועובד

הבעיה הבאה שלי

הZF אחרי הקוד הבא אמור להיות 1 אבל הוא 0, יש בעיה בקוד או שאתה חושבים זה בא ממקום אחר

mov si,gameLoction
cmp game[si-1ah],"em"

הGAME מיוצג אצלי הDW כלומר כל תא הוא בעצם 2 והמערך הוא 12*12 (או בעצם 24*24 אם תרצו).

קישור לתוכן
שתף באתרים אחרים

גם אני חשבתי שאי אפשר לעבוד ככה עם מחרוזות(והתחלתי לעשות הסבה למספרים) אבל מסתבר שאין בעיה...נראה לי

מתוך הנחה שאם זה עובד

mov game[si],"em"

אז אין סיבה שזה לא יעבוד

cmp game[si],"em"

או שההנחה מוטעת?

ותאמת אני לא רואה שום בעיה משום שבמקום המחרוזת מוצב שם הHEXA שלו(ולא כתובת למקום) והוא פשוט אמור להשוות בין הHEXA של כל אחד.

UI אם שני הביטויים יהיו שווים הZF יהיה 1. (משום שהתוצאה תהפוך ל0 מה שיהפוך את הZF ל1).

קישור לתוכן
שתף באתרים אחרים

השורה הזו

mov game[si],"em"

תקינה.

הוא מכניס לזכרון את הHEXA של כל אות לתא(המערך הוא DW).

בקשר לאורך, אני(המתכנת) היחיד שמכניס ומשווה תמחרוזת. היא תמיד תיהיה שני תווים ובכך תוכנס תושווה לאותם שני תאים סמוכים, או תיהיה תו בודד וגם כאשר יש יחס לתו בודד אני אקדם את מיקום התא באחד ויוסיף לפני BYTE PTR.

אתם יודעים מה אולי אני טועה במיקום, תסתקלו ותגידו לי אם יש טעות באחד החישובים(או האיתחולים).

אמור להצביע על ה wn הראשון משמאל(למעלה).

gameLoction dw 34h 

	game dw 0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh
dw 0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh
dw 0ffffh,0ffffh,"wn","em","wn","em","wn","em","wn","em",0ffffh,0ffffh
dw 0ffffh,0ffffh,"em","wn","em","wn","em","wn","em","wn",0ffffh,0ffffh
dw 0ffffh,0ffffh,"wn","em","wn","em","wn","em","wn","em",0ffffh,0ffffh
dw 0ffffh,0ffffh,"em",0ffffh,"em",0ffffh,"em",0ffffh,"em",0ffffh,0ffffh,0ffffh
dw 0ffffh,0ffffh,0ffffh,"em",0ffffh,"em",0ffffh,"em",0ffffh,"em",0ffffh,0ffffh
dw 0ffffh,0ffffh,"em","bn","em","bn","em","bn","em","bn",0ffffh,0ffffh
dw 0ffffh,0ffffh,"bn","em","bn","em","bn","em","bn","em",0ffffh,0ffffh
dw 0ffffh,0ffffh,"em","bn","em","bn","em","bn","em","bn",0ffffh,0ffffh
dw 0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh
dw 0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh

עולה אחד

sub gameLoction,18h

יורד אחד

add gameLoction,18h

אחד שמאלה

sub gameLoction,2h

אחד ימינה

add gameLoction,2h

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...