לימוד Assembly - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

לימוד Assembly


ImFondOfComputers

Recommended Posts

היי,

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

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

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

תודה :xyxthumbs:

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

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

לגבי סוגי העבודה שבהם נדרשת עדיין עבודה ברמות שכאלו, זה בד"כ כשכותבים קוד בשפה עילית ואז מגלים שחלק ממנו (החלקים החמים) רצים באופן ניכר איטי יותר בגלל שהקומפיילר לא עושה עבודה טובה (אופטימיזציה גרועה / אי-שימוש נכון במשאבים כמו SIMD) ואז עם ידע ב ASM אפשר לשנות את הקוד ו/או להחליף אותו בקוד ASM.

הדבר חשוב הרבה יותר ככל שהסביבה שבה אתה עובד / כח המחשוב קטן יותר, ואז כל טיפת ביצועים חשובה יותר. למשל אתה יכול לראות דוגמאות רבות לחשיבות של אסמבלי בתוכנה יחסית פופלארית כמו VIRTUALDUB שהבלוג של המפתח שלה נוגע בסוגיות כאלו, כמו למשל (יש לו בבלוג הרבה התייחסיות לנושא):

http://www.virtualdub.org/blog/pivot/entry.php?id=236#body

מעבר להיבטים האלו, יש גם את החשיבות של הבנת איך הקוד שלך רץ בסוף (איך פרמטרים עוברים בקריאה לפונקציה, איך המחסנית עובדת ולמה יש בעיות כמו buffer overflow, הסתכלות בדיבאגר על הקוד המיוצר, או קוד שאין לך ייצוג בשפת עילית שלו).

אבל שוב, אין הכרח ללמוד את השפה הזו בשביל להיות מתכנת, בטח היום כשיש אנשים שלומדים ישר שפות כמו JAVA/.NET בלי להבין אפילו נושאים כמו איך הזיכרון מנוהל ומה זה בכלל פוינטרים.

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

תלוי במה אתה רוצה לעסוק..

כשפה ראשונה אין טעם ללמוד אסמבלי כי לבנות בה תוכנות פשוטות יקח הרבה מאוד זמן (דוגמא אמיתית: כתיבת תוכנה שקולטת שתי מחרוזות באורך המגובל ל 8 תווים או פחות בצורה הקסדצימלית [כלומר יש בדיקה האם לא הקלדת בטעות מספר לא חוקי כמו G] מחרוזת נוספת מאותה צורה, והמטרה היא לחפש את המחרוזת השלישית בין הכתובות שמיוצגות על ידי שתי המחרוזות הראשונות, תוכנה זה נכתבה בכ 40-60דקות ולקחה כ 300-400 שורות קוד, כאשר בשפות כגון C ניתן להגיעה לזה בהרבה יותר מהר).

לעומת זאת אסמבלי לא מתה ויש תחומים שבהם עוסקים הרבה מאוד באסמבלי, אחד מהם התחום שאני מאוד מתעניין זה תחום מערכות ההפעלה, כתיבת BOOT LOADER מתבצע 100% באסמבלי ואין שפה אחרת שניתן לעשות זאת, שליחת פקודות ל CONTROLLERS מסויימים מתבצעת אך ורק באסמבלי, מעבר בין מצבים שונים במעבד (הפעלת מנגון ה PROTECTED MODE, הפעלת PAGING, קבלת כתובת של PAGE FAULT, MULTITASKING בסופו של דבר) כל זה נעשה באסמבלי.

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

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

אסמבלי ממש לא השפה הראשונה שלי, יש לי ותק של שלוש שנים בc,c++ ושנה בc# , בכל מקרה אני חושב לפי מה ששניכם אמרתם שזה נורא משתלם ללמוד אסמבלי. לגבי אבטחת מידע, יש איזשהו קשר?

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

יש הרבה מערכות הפעלה (אומנם לא לשימוש ביתי) שלא רק שלא כתובות באסמבלר (חלקם בכלל לא) אלא כל-כולם כתובות בשפות כמו C# כמו למשל:

http://www.sharpos.org/doku.php

שאפילו כתבו קומפיילר מיוחד רק בשביל שלא יצטרכו לכתוב קוד אסמבלר לתחילת ההפעלה של מערכת ההפעלה (ויש פרוייקטים קצת יותר סולידים כמו Singularity של שמכיל חלקים קטנים של C ואסמבלר).

לגבי אבטחת מידע ? זה טוב בשביל הבנת קונספטים שציינתי וגם כמובן עם יכולת מסוימת של reverse engineering אפשר למצוא עם זה כל מני פרצות בתוכנות / מנגנוני הגנה (אבל זה דורש לטעמי הרבה יותר מללמוד את השפה).

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

יש הרבה מערכות הפעלה (אומנם לא לשימוש ביתי) שלא רק שלא כתובות באסמבלר (חלקם בכלל לא) אלא כל-כולם כתובות בשפות כמו C# כמו למשל:

http://www.sharpos.org/doku.php

שאפילו כתבו קומפיילר מיוחד רק בשביל שלא יצטרכו לכתוב קוד אסמבלר לתחילת ההפעלה של מערכת ההפעלה (ויש פרוייקטים קצת יותר סולידים כמו Singularity של שמכיל חלקים קטנים של C ואסמבלר).

לגבי אבטחת מידע ? זה טוב בשביל הבנת קונספטים שציינתי וגם כמובן עם יכולת מסוימת של reverse engineering אפשר למצוא עם זה כל מני פרצות בתוכנות / מנגנוני הגנה (אבל זה דורש לטעמי הרבה יותר ללמוד את השפה).

שמעתי על SINGULARITY, אבל תעשה לי טובה: בשפת C#? נו באמת.. זה לא יותר מ "research project" ויקח לזה דיי הרבה זמן עד שזה יגיעה לשולחן הביתי (למרות שאפילו היום המחשבים מספיק חזקים להריץ את זה).

שאפילו כתבו קומפיילר מיוחד רק בשביל שלא יצטרכו לכתוב קוד אסמבלר לתחילת ההפעלה של מערכת ההפעלה

אני דיי בטוח שהקומפיילר הזה הופך את ה"קוד" שלהם לקוד אסמבלי בסופו של דבר.

אבל אין טעם להיתווכח בנושא הזה.

בכל מקרה העלת פה נקודה אחרת שמשתמשים באסמבלי זו היא ה reverse engineering.

אלא אם כן חשובה המהירות ריצה של התוכנה הנבנית ואבטחתה. אני צודק?

עכשיו אתה צודק

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

שמעתי על SINGULARITY, אבל תעשה לי טובה: בשפת C#? נו באמת.. זה לא יותר מ "research project" ויקח לזה דיי הרבה זמן עד שזה יגיעה לשולחן הביתי (למרות שאפילו היום המחשבים מספיק חזקים להריץ את זה).אני דיי בטוח שהקומפיילר הזה הופך את ה"קוד" שלהם לקוד אסמבלי בסופו של דבר.

אבל אין טעם להיתווכח בנושא הזה.

בכל מקרה העלת פה נקודה אחרת שמשתמשים באסמבלי זו היא ה reverse engineering.

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

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

אבל כן, זה מחקרי ונחמד, ולא יותר מזה :)

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

רק בשביל העניין בדקתי, ואכן SHARPOS כתוב 100% ב C#, בשביל BOOTLOADER הוא משתמש ב GRUB.

למה האם ייתכן ? גם אם צריך לקרוא לפסיקה ו/או לגשת לאיזה I/O פורט, יש פקודות בשפות עילית שעושות זאת. (וכפי שאתה רואה מהפרוייקטים האלו, יש דריברים שכותבים ב C ויש כאלו שכותבים ב C# :) ).

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

מספר שורות הקוד וגם הרבה יותר קשה לתכנת ב assembly.

באסמבלי אתה עובד ברמה של שפת מכונה, ואתה יכול להשתמש בכלים בסיסיים מאוד ביחס לתכנות בשפה עילית.

אין לי יותר מדי נסיון, אני לומד חצי שנה אסמבלי ו C# (ויש לי גם קצת ידע ב C).

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

ארכיון

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

×
  • צור חדש...