נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: פקודות הזזה באסמבלי

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
לוק
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט 11010010110

יש פתרון רגיל של bianry mask אבל יש מצב שיש משהוא יותר
מעניין. תנסי לתת מס' לדוגמא ולעקוב אחריי חוקיות ברמת ה
1 0 כשעושים הזזות
חזרה לתחילת העמוד הצג את כרטיס החבר של 11010010110 חפש הודעות אחרות של 11010010110
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג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% גודל קוד, ולהשתמש בשני אוגרים במקום בשלושה זה שיפור לא רע (למרות שאנחנו מדברים עכשיו על קוד די פשוט).
זמן לא ספרתי, נשאיר את זה כתרגיל לקורא.
חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה