פורסם 2010 באפריל 1415 שנים שלום אנשים קיבלתי כמה תרגילים כהגשה ואחד התרגילים אני פשוט לא מצליח להגיע לכתיבת התוכנית : התרגיל הוא: צריך לכתוב תוכנית באסמבלי שמקבלת מערך בשם arr1 בגודל 20 תאים, כל תא בגודל byte והופכת את סדר הסיביות שבכל אחד מתאי המערך. הופכת את הסדר לא ערך. לדוגמא: תן במערך שהתוכן שלו : 10010011 הסדר ההפוך יהיה : 11001001 אם זה 00110011 זה יהיה 11001100 אשמח פיתרון, אני כבר יושב הרבה זמן על זה :-\
פורסם 2010 באפריל 1415 שנים יכול להיות שיש דרך יותר חכמה אבל אני אתן לך מה שעלה לי בראש.כל פעם תיקח את המילה ותאכסן אותה שיש לך את המקור בזיכרון.בהתחלה אנחנו רוצים את הסיבית הראשונה אז נכפיל ב 00000001b.כל הספרות הלא רלוונטיות התאפסו ואז אתה מבצע rol שזה מזיז את הסיבית שמאלה, תבצע 7 פעמים ואז היא תהיה בהתחלה.את התוצאה תחבר למספר שאיפסת בהתחלה ככה שאחרי החיבור יהיה בו 10000000b.ככה תעבור על כל הסיביות...האמת נשמע לי כמו תוכנית גרועה במיוחד, יכול להיות שיש לך בפקודות מיעון סיבית? ככה אתה יכול לקחת סיבית ולהניח אותה במקום אחר.זה יהיה פשוט יותר.
פורסם 2010 באפריל 1415 שנים דרך קצת יותר פשוטה (זה קוד C, אבל אני מקווה שתבין את העקרון):x = ((x & 0x0f) << 4) | ((x & 0xf0) >> 4);x = ((x & 0x33) << 2) | ((x & 0xcc) >> 2);x = ((x & 0x55) << 1) | ((x & 0xaa) >> 1);כמובן את זה צריך לעשות לכל byte בנפרד.
פורסם 2010 באפריל 1415 שנים שניצל, רעיון ממש יפה לא בטוח כמה יפה ואלגנטי זה באסמבלר. אני מציע שיטה מסורתית ומובנת אינטואיטיבית, להזיז את כל הביטים שמאלה ולקחת אותם לרגיסטר אחר בכניסה ימינה (דרך ה-carry). אני לא ממש זוכר איך כותבים באסמבלי אבל הרעיון הוא כזה: הנתון יכנס לאוגר a וההיפוך ימצא בסוף ב-b mov al, Bytemove bl, 0loop for 8 bits:shl al, 1rcr bl, 1end loop
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.