חוקי הפורום

לימוד אסמבלי



  • אני מחפש מדריכים ללימוד אסמבלי
    לבנתיים התחלתי מהמדריך הזה.

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

    
    section .text				;section declaration
    
    			;we must export the entry point to the ELF linker or
        global _start	;loader. They conventionally recognize _start as their
    			;entry point. Use ld -e foo to override the default.
    
    _start:
    
    ;write our string to stdout
    
            mov     edx,len ;third argument: message length
            mov     ecx,msg ;second argument: pointer to message to write
            mov     ebx,1   ;first argument: file handle (stdout)
            mov     eax,4   ;system call number (sys_write)
            int     0x80	;call kernel
    
    ;and exit
    
    	mov	ebx,0	;first syscall argument: exit code
            mov     eax,1   ;system call number (sys_exit)
            int     0x80	;call kernel
    
    section .data				;section declaration
    
    msg     db      "Hello, world!",0xa	;our dear string
    len     equ     $ - msg                 ;length of our dear string
    

    אני מבין שיוצרים את המשתנה msg עם סטרינג
    ואז מוסיפים את המשתנה len עם אורך המחרוזת.
    ואז מעתיקים את msg לאוגר מסויים (למה דווקא אליו?)
    ואת האורך לאוגר אחר (למה?).
    ואז רושמים באוגר נוסף את היעד לכתיבה
    ובאוגר נוסף את המספר פקודה למערכת הפעלה( sys_write?)
    ואז מפעילים עם int 0x80 (שנקרא גם syscall)
    כנ"ל כשרוצים לעשות exit
    מכניסים לאוגרים הנ"ל את הקוד 0 ו 1
    ואז ה syscall מבצע יציאה.

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


  • תכנות

    @nigun יש לך כאן: https://www.tutorialspoint.com/assembly_programming/
    יש שם חלק של Quick Guide איך ליצור Hello World, קומפיילר אונליין ועוד. בהצלחה!


  • תכנות

    @nigun אתה מבקש כאן 2 דברים:
    א. להבין מה כל פקודה עושה.
    ב. להבין למה דווקא בחרו באוגר הזה, בשביל זה צריך להבין קצת יותר את הארכיטקטורה של המעבד..

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

    https://data.cyber.org.il/assembly/assembly_book.pdf



  • @avr416
    כמו שציינתי למעלה התחלתי לעבור על המדריך הנ"ל (כמובן באופן לא כ"כ מסודר)
    לא הצלחתי להוציא ממנו את התשובות לשאלות שלי
    אבל יתכן שפשוט אני צריך לקרוא עוד.


  • תכנות

    @nigun תסתכל בעמודים 57-62 על סוגי האוגרים (רגיסטרי בלעז).
    ובכללי פרק 3, מלמד אותך על מבנה המעבד (80x86) ודרך פעילותו, שזה חיוני להבנת אסמבלי.
    אני לא הספקתי להתקדם שם יותר מדי, אז אני לא יכול לענות על השאלות שלך.



  • @avr416
    על זה עברתי כבר
    ועדיין לא ברור לי.
    תודה בכל אופן.



  • @nigun אמר בלימוד אסמבלי:

    ואז מוסיפים את המשתנה len עם אורך המחרוזת.
    ואז מעתיקים את msg לאוגר מסויים (למה דווקא אליו?)
    ואת האורך לאוגר אחר (למה?).
    ואז רושמים באוגר נוסף את היעד לכתיבה
    ובאוגר נוסף את המספר פקודה למערכת הפעלה( sys_write?)

    הקוד שהבאת מיועד עבור מערכת לינוקס.
    בלינוקס יש פרוטוקול איך מעבירים את הארגומנטים לקרנל
    https://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux#Via_interrupt
    הארגומנטים של write נמצאים פה: man 2 write או פה



  • @yossiz
    מה הייתי עושה בלעדיך?
    שובר את הראש עוד כמה שעות
    עד שהייתי נזכר שהפקודות לכל מערכת הפעלה יכולים להיות שונים?🙄


התחבר כדי לפרסם תגובה
 

בא תתחבר לדף היומי!