דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. האם ההבנה שלי נכונה?

האם ההבנה שלי נכונה?

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

    בהמשך לפוסט הזה
    קיבלתי משוב קצת כועס מר' @dovid בצדק מסוים למרות שלא מסכים עם הכול.
    בכל מקרה השקעתי כמו שהוא אמר ולמדתי את הנושא לעומק אני כותב כאן את ההבנה שלי
    ואשמח לקבל פידבק ממי שיוכל להשקיע מזמנו ללמד מתכנת מתחיל. אציין שהשקעתי ביומים האחרונים כמה שעות בלמידה ואני לא בא חלילה להטריח.
    יש את הקטע קוד הזה

    global main
    extern GetStdHandle
    extern WriteConsoleA
    extern ExitProcess
     
    section .bss
        buffer  resb 8
        written resd 1
     
    section .text
    main:
        push    r12
        push    r13
        sub     rsp, 40
     
        mov     eax, 10000
        lea     rdi, [rel buffer+7]
        mov     byte [rdi], 10
        dec     rdi
     
    .convert_loop:
        xor     edx, edx
        mov     ecx, 10
        div     ecx
        add     edx, '0'
        mov     [rdi], dl
        dec     rdi
        test    eax, eax
        jnz     .convert_loop
     
        lea     rax, [rel buffer+8]
        sub     rax, rdi
        mov     r13d, eax
        mov     r12, rdi
     
        mov     ecx, -11
        call    GetStdHandle
     
        mov     rcx, rax
        mov     rdx, r12
        mov     r8d, r13d
        lea     r9, [rel written]
        mov     qword [rsp+32], 0
        call    WriteConsoleA
     
        xor     ecx, ecx
        call    ExitProcess
    

    אני כותב כאן את הדברים לפי סדר השורות ואשמח לתיקון:

    1. משאיר Main גלוי שיהיה גלוי ללינקר
      2/3/4. הצהרה על זה שהקוד מחוץ לקובץ האסמבלי הזה.
    2. מקטע נתונים בלתי מאותחלים
      7.שומר תוית בזיכרון בשם באפר של עד 8 בתים
      8.שומר דאבל וורד אחד
    3. מקטע הקוד
    4. התחלת המיין כלומר הקוד
      12/13. דוחף את R12 R13 למחסנית לשמור נתונים לפני דריסה של התוכנית
    5. מוריד 40 בתים מRSP (שהוא מצביע על המחסנית) 32 כי זה מוסכמת הABI ועוד 8 לפרמטר חמישי.
    6. מעביר את 10000 לאוגר EAX
    7. חיבור של באפר ועוד 7 (סוגריים מרובעים- שווה כתובת) את הערך שומר בRDI
    8. מעביר תו 10 בגודל ביט אחד לRDI יותר נכון לכתובת עליה הוא מצביע (ירידת שורה)
    9. מוריד 1 מRDI שהתוכנית לא תדרוס את התו אז מוריד תו אחד למטה
    10. מתחת הוא כבר עושה לולאה על 10000 מחלק כל פעם ב10 ושומר שארית 0 ואז מחבר בדיוק כמו ש@yossiz היקר הסביר.
      עד פה בערך חפרתי וניסיתי להבין אחרי הנזיפה של דוד אציין שלא נעזרתי בAI לכתיבת הפוסט או למושגים כל מה שכתבתי זה ההבנה הטהורה שלי נטו (נכונה או אם לא) באמצעות שבירת ראש וAI
      אשמח להארות והערות.
    תגובה 1 תגובה אחרונה
    1
    • לי ראשל
      לי ראשל
      לי ראש
      כתב נערך לאחרונה על ידי
      #2

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

      main:
          push    r12
          push    r13
          sub     rsp, 40
       
          mov     eax, 10000
          lea     rdi, [rel buffer+7]
       
      .convert_loop:
          xor     edx, edx
          mov     ecx, 10
          div     ecx
          add     edx, '0'
          mov     [rdi], dl
          dec     rdi
          test    eax, eax
          jnz     .convert_loop
       
          lea     rax, [rel buffer+8]
          sub     rax, rdi
          mov     r8d, eax
          mov     rdx, rdi
       
          mov     ecx, -11
          call    GetStdHandle
       
          mov     rcx, rax
          lea     r9, [rel written]
          call    WriteConsoleA
      
      תגובה 1 תגובה אחרונה
      0

      שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

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

      בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

      הרשמה התחברות
      תגובה
      • תגובה כנושא
      התחברו כדי לפרסם תגובה
      • מהישן לחדש
      • מהחדש לישן
      • הכי הרבה הצבעות


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

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום