כותב |
|
לוק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 19 February 2008 בשעה 17:18 | | IP רשוּם
|
|
|
|
אני צריכה להפוך כל זוג ספרות הקסה בעזרת פקודת הזזה ובלי להשתמש בלולאה,
לדוגמה: לפני - EAX = F542EBCA
אחרי - EAX = 5F24BEAC
יש פקודת הזזה שיכולה לעזור?? זה די דחוף .. ואין לי מושג איך פותרים את זה.
|
חזרה לתחילת העמוד |
|
|
11010010110 פורומיסט על
הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת הודעות: 2621
|
נשלח בתאריך: 19 February 2008 בשעה 18:22 | | IP רשוּם
|
|
|
|
יש פתרון רגיל של bianry mask אבל יש מצב שיש משהוא יותר
מעניין. תנסי לתת מס' לדוגמא ולעקוב אחריי חוקיות ברמת ה
1 0 כשעושים הזזות
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 20 February 2008 בשעה 03:03 | | IP רשוּם
|
|
|
|
לוק כתב:
אני צריכה להפוך כל זוג ספרות הקסה בעזרת פקודת הזזה ובלי להשתמש בלולאה,
לדוגמה: לפני - EAX = F542EBCA
אחרי - EAX = 5F24BEAC
יש פקודת הזזה שיכולה לעזור?? זה די דחוף .. ואין לי מושג איך פותרים את זה. |
|
|
הו. חזרנו. השאלה היא אם לחשוב לבד ניסינו?
F542EBCA ________ F_4_E_C_ -> _F_4_E_C _5_2_B_A -> 5_2_B_A_ ________ 5F24BEAC
מה אנחנו אמורים לעשות עכשיו?
|
חזרה לתחילת העמוד |
|
|
לוק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 20 February 2008 בשעה 21:16 | | IP רשוּם
|
|
|
|
משהו עם AND ו-OR , זה מה שאמרו לי אבל אין לי מושג איך... רק התחלתי ללמוד אסמבלי ואין לי הרבה מושג בזה כמו שבטח שמת לב
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 20 February 2008 בשעה 21:26 | | IP רשוּם
|
|
|
|
מה כתבתי למעלה? שמתי תרשים שמראה תהליך שבו F542EBCA הופך ל-5F24BEAC. אתה לא מבין את התהליך? נסה בכל-זאת להסביר במילים מה קרה שם.
|
חזרה לתחילת העמוד |
|
|
לוק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 20 February 2008 בשעה 22:41 | | IP רשוּם
|
|
|
|
הפרדת בין הזוגיים לאי זוגיים, הזזת את הזוגיים שמאלה וחיברת הכל, את זה הבנתי...
אבל לא הבנתי איך כותבים את זה באסמבלי
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 20 February 2008 בשעה 23:36 | | IP רשוּם
|
|
|
|
אבל השאלה היא שאלה בחשבון ולא באסמבלי. חשבון אתה יודע? לעשות AND, OR ושיפט אתה יודע?
עזוב אסמבלי. זה תרגיל בחשבון. תפתור את התרגיל ותשכח מהאסמבלי.
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 23 February 2008 בשעה 18:44 | | IP רשוּם
|
|
|
|
ננסה להקל עליך טיפה. מה אם נחליף את האנדרסקורים באפסים:
F542EBCA ________ F040E0C0 -> 0F040E0C 05020B0A -> 5020B0A0 ________ 5F24BEAC
איך אפשר לעשות את התהליכים האלה בעזרת AND-ים ו-OR-ים?
|
חזרה לתחילת העמוד |
|
|
לוק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 23 February 2008 בשעה 23:40 | | IP רשוּם
|
|
|
|
פתרתי את השאלה כבר... ד"א אני בת, ויפה שאתה יודע תכנות כל הכבוד, אבל אתה לא צריך להתנשא מעל אנשים ששואלים שאלות. אם הייתי מבינה את החומר לא הייתי פה, "אתה יודע?"
MOV EAX, 0F542EBCAh ; initializing the register EAX
MOV EBX, 0F542EBCAh
MOV ECX, 0F542EBCAh
AND EBX, 0F0F0F0Fh
AND ECX, 0F0F0F0F0h
SHL EBX, 1
SHR ECX, 1
OR EBX, ECX
MOV EAX, EBX
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 24 February 2008 בשעה 00:24 | | IP רשוּם
|
|
|
|
אם לא היה אכפת לי, לא הייתי חוזר לאשכול הזה, "את יודעת"? אם הייתי רוצה להתנשא, לא הייתי מוביל אותך באף דרך הפיתרון, אלא מציין שהאשכול הזה רומס את חוקי הפורום: באת לפה כדי שיפתרו לך תרגיל, בלי להגיד מה ניסית, איפה נתקעת, וכו'.
הבעיה שלך, היא שאת לא מוכנה ללמוד. אין קשר לזה ש"יופי, אני יודע תכנות", כי, כמו שאמרתי למעלה, זו שאלה בחשבון ולא בתכנות. היכולת להבין את הדבר הזה היא השלב הראשון בדרך לפתור את התרגיל. אם תקשיבי למה שאומרים לך, אולי תלמדי משהו.
את מסרבת ללמוד, ופשוט רצה שיפתרו לך כל דבר שאת לא מצליחה בו. בעולם האמיתי זה לא ילך לך.
נ.ב. טעות שלי ששכחתי להתייחס בחוקי הפורום ל"דחוף"-ים למיניהם. יתוקן מיד.
נ.ב. 2 הערות לגבי הקוד עצמו:
- לתוך EBX ו-ECX את אמורה להעביר את הערך הנוכחי של EAX, ולא לכתוב את אותו קבוע בקוד שוב. אם תרצי לבצע את החישוב עבור מספר אחר, תשני אותו רק בשורה הראשונה.
- בגלל שממילא את לא משתמשת ב-EBX וב-ECX בו-זמנית, אין סיבה לבזבז 3 אוגרים בחישוב הזה (כשהחישוב הזה יהיה חלק מקוד גדול יותר, תראי שאין לך הרבה אוגרים לבזבז). את יכול לחשב רק ב-EBX, בהתחלה חצי אחד ואחר כך חצי שני.
משהו כזה בערך:
MOV EAX, 0F542EBCAh MOV EBX, EAX AND EBX, 0F0F0F0Fh SHL EBX, 4 AND EAX, F0F0F0F0h SHR EAX, 4 OR EAX, EBX
(לא בדקתי שזה עובד, רק ערכתי את הקוד שלך בחלון ההודעה של הפורום, אבל זה הכיוון) מעתיקים ל-EBX. ב-EBX לוקחים רק את הזוגיים ומזיזים שמאלה. ב-EAX עושים את החישוב ישר (כי בעצם אין סיבה להעתיק ל-ECX): משאירים רק את האי-זוגיים ומזיזים ימינה. מחברים את EBX המוזז ל-EAX המוזז. 4, כי קובעים כמה ביטים מזיזים ולא כמה בתים.
עריכה: הקוד שלך לוקח 37 בתים. אם רק נשים לתוך EBX ו-ECX את EAX במקום קבוע, כבר ירדנו ל-31 בתים. זה גם יותר נוח, וגם נותן שיפור של שישית בערך בגודל. אם נשתמש בקוד שלי, גם נחסוך אוגר מיותר, וגם נרד לגודל של 26 בתים. זה מוריד אותנו בעוד שישית בערך.
באסמבלי מתרחשת הרבה פעמים התופעה המעניינת שבה חוסכים בגודל, במקום ובזמן גם יחד כשכותבים קוד לא בזבזני. בדרך כלל, עדיף לתת לקומפיילר להתעסק בזה, אבל אם כותבים באסמבלי, כנראה שיש לזה סיבה, ואז כדאי להשקיע את המאמץ. לרדת ל-70% גודל קוד, ולהשתמש בשני אוגרים במקום בשלושה זה שיפור לא רע (למרות שאנחנו מדברים עכשיו על קוד די פשוט). זמן לא ספרתי, נשאיר את זה כתרגיל לקורא.
|
חזרה לתחילת העמוד |
|
|