| כותב |  | 
      
        | לוק אורח
 
  
 
 הצטרף / הצטרפה: 01 October 2003
 משתמש: אונליין
 הודעות: 12647
 | 
          אני צריכה להפוך כל זוג ספרות הקסה בעזרת פקודת הזזה ובלי להשתמש בלולאה,
           | | נשלח בתאריך: 19 February 2008 בשעה 17:18 | | IP רשוּם | 
 |   |  
           | 
 |  לדוגמה: לפני - EAX = F542EBCA           אחרי - EAX = 5F24BEAC יש פקודת הזזה שיכולה לעזור?? זה די דחוף .. ואין לי מושג איך פותרים את זה.  | 
       
        | חזרה לתחילת העמוד |       | 
       
       
        |  | 
        | 11010010110 פורומיסט על
 
  
  
 הצטרף / הצטרפה: 23 April 2006
 משתמש: מנותק/ת
 הודעות: 2621
 | 
          יש פתרון רגיל של bianry mask אבל יש מצב שיש משהוא יותר
           | | נשלח בתאריך: 19 February 2008 בשעה 18:22 | | IP רשוּם | 
 |   |  
           | 
 |  מעניין. תנסי לתת מס' לדוגמא ולעקוב אחריי חוקיות ברמת ה
 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
 | 
          משהו עם AND ו-OR , זה מה שאמרו לי אבל אין לי מושג איך... רק התחלתי ללמוד אסמבלי ואין לי הרבה מושג בזה כמו שבטח שמת לב
           | | נשלח בתאריך: 20 February 2008 בשעה 21:16 | | IP רשוּם | 
 |   |  
           | 
 |  | 
       
        | חזרה לתחילת העמוד |       | 
       
       
        |  | 
        | אלצ'קו אחראי פורומים
 
  
   ג2ר פ33תי
 
 הצטרף / הצטרפה: 20 January 2006
 משתמש: מנותק/ת
 הודעות: 609
 | 
          מה כתבתי למעלה? שמתי תרשים שמראה תהליך שבו F542EBCA הופך ל-5F24BEAC. אתה לא מבין את התהליך? נסה בכל-זאת להסביר במילים מה קרה שם.
           | | נשלח בתאריך: 20 February 2008 בשעה 21:26 | | IP רשוּם | 
 |   |  
           | 
 |  | 
       
        | חזרה לתחילת העמוד |     | 
       
       
        |  | 
        | לוק אורח
 
  
 
 הצטרף / הצטרפה: 01 October 2003
 משתמש: אונליין
 הודעות: 12647
 | 
          
           | | נשלח בתאריך: 20 February 2008 בשעה 22:41 | | IP רשוּם | 
 |   |  
           | 
 |  הפרדת בין הזוגיים לאי זוגיים, הזזת את הזוגיים שמאלה וחיברת הכל, את זה הבנתי...  אבל לא הבנתי איך כותבים את זה באסמבלי  | 
       
        | חזרה לתחילת העמוד |       | 
       
       
        |  | 
        | אלצ'קו אחראי פורומים
 
  
   ג2ר פ33תי
 
 הצטרף / הצטרפה: 20 January 2006
 משתמש: מנותק/ת
 הודעות: 609
 | 
          אבל השאלה היא שאלה בחשבון ולא באסמבלי. חשבון אתה יודע? לעשות AND, OR ושיפט אתה יודע?
           | | נשלח בתאריך: 20 February 2008 בשעה 23:36 | | IP רשוּם | 
 |   |  
           | 
 |  
 עזוב אסמבלי. זה תרגיל בחשבון. תפתור את התרגיל ותשכח מהאסמבלי.
 
 | 
       
        | חזרה לתחילת העמוד |     | 
       
       
        |  | 
        | אלצ'קו אחראי פורומים
 
  
   ג2ר פ33תי
 
 הצטרף / הצטרפה: 20 January 2006
 משתמש: מנותק/ת
 הודעות: 609
 | 
          ננסה להקל עליך טיפה. מה אם נחליף את האנדרסקורים באפסים:
           | | נשלח בתאריך: 23 February 2008 בשעה 18:44 | | IP רשוּם | 
 |   |  
           | 
 |  
 F542EBCAאיך אפשר לעשות את התהליכים האלה בעזרת AND-ים ו-OR-ים?________
 F040E0C0 -> 0F040E0C
 05020B0A -> 5020B0A0
 ________
 5F24BEAC
 
 
 | 
       
        | חזרה לתחילת העמוד |     | 
       
       
        |  | 
        | לוק אורח
 
  
 
 הצטרף / הצטרפה: 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% גודל קוד, ולהשתמש בשני אוגרים במקום בשלושה זה שיפור לא רע (למרות שאנחנו מדברים עכשיו על קוד די פשוט).
 זמן לא ספרתי, נשאיר את זה כתרגיל לקורא.
 
 | 
       
        | חזרה לתחילת העמוד |     | 
       
       
        |  |