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

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

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

מה זה עושה?

מתוזמן נעוץ נעול הועבר תכנות
6 פוסטים 3 כותבים 111 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • שאלתיאלש
    שאלתיאלש
    שאלתיאל
    כתב נערך לאחרונה על ידי
    #1
    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
    

    זה הקוד המלא, מדפיס 10000 למסך.

    לא כ"כ הבנתי למה לחסר אחד מRDI אחרי ההעברה של באפר+7 (מבוסס היסט)
    וכו' למה זה ככה?

    @yossiz

    תגובה 1 תגובה אחרונה
    0
    • yossizY
      yossizY
      yossiz
      כתב נערך לאחרונה על ידי yossiz
      #2

      ולמה בתוך הלולאה (שורה 27) מחסרים אחד מ-RDI, זה כן הבנת?
      בגדול הקוד עובר בסדר הפוך על הבתים של הבאפר וממלא אותם, אחרי שהוא ממלא את הבית האחרון עם התו \n הוא חוזר לבית שלפני זה על ידי ה-dec

      אגב, מאיפה הקוד? זה מועתק מאיפשהו? כי ChatGPT טוען שיש באג בקוד... (אני מאמין לו, אבל לא התעמצתי יותר מדי לוודא את זה)

      גלוי נאות: אני אדם עצלן ואני משתמש ב-AI כדי לענות לך. אבל אני לא כותב שום דבר שאני לא מבין טוב. אבל תדע לך שגם אתה יכול להתשתמש ב-AI כדי להבין, ואפשר לשגע אותו עד שאתה מבין כל מילה.

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה
      👈 רוצים כתובת מייל בעברית? כנסו למייל.קום 👉

      תגובה 1 תגובה אחרונה
      4
      • שאלתיאלש
        שאלתיאלש
        שאלתיאל
        כתב נערך לאחרונה על ידי
        #3

        @yossiz לא! זה בדיוק מה שאני שואל, אני עוד בשורה 19 שם יש גם חיסור ואת זה אנוכי מנסה להבין.

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

        תגובה 1 תגובה אחרונה
        0
        • yossizY
          yossizY
          yossiz
          כתב נערך לאחרונה על ידי yossiz
          #4

          @שאלתיאל קודם כל צריך שיהיה לך מבט-על של מה התוכנה עושה, התמונה הכללית

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

          האלגוריתם להמיר מספר בינארי n למחרוזת s בייצוג דצימלי הוא כזה (בפסאודו קוד) :

          while n > 0:
            d = n % 10
            s = d + s
            n = n / 10
          

          ℹ️ הפעולה % היא "מודולו", ופעולת החילוק כאן היא חילוק אינטגרלי (מספר שלם) בלי השארית.

          ניקח לדוגמה את המספר 1234.

          המצב ההתחלתי:

          n = 1234
          d =
          s = ""
          

          הנה השלבים המלאים:

          • n > 0? ⇐ כן!
          • d = n % 10 ⇐ תוצאה: d = 4
          • s = d + s ⇐ תוצאה: s = "4"‎
          • n = n / 10 ⇐ תוצאה: n = 123

          • n > 0? ⇐ כן!
          • d = n % 10 ⇐ תוצאה: d = 3
          • s = d + s ⇐ תוצאה: s = "34"‎
          • n = n / 10 ⇐ תוצאה: n = 12

          • n > 0? ⇐ כן!
          • d = n % 10 ⇐ תוצאה: d = 2
          • s = d + s ⇐ תוצאה: s = "234"‎
          • n = n / 10 ⇐ תוצאה: n = 1

          • n > 0? ⇐ כן!
          • d = n % 10 ⇐ תוצאה: d = 1
          • s = d + s ⇐ תוצאה: s = "1234"‎
          • n = n / 10 ⇐ תוצאה: n = 0

          • n > 0? ⇐ לא.

          הלולאה הסתיימה וקיבלנו:

          s = "1234"
          

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

          לכן בתוכנה שלך הלולאה עוברת על הבאפר מהסוף להתחלה

          כדי למלאות את הבאפר מהסוף להתחלה, המצביע RDI מתחיל בהצבעה על buffer+7 ואז עובר ל-buffer+6, עובר ל-buffer+5 וכן הלאה

          עדיין לא מובן? תשאל שוב

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה
          👈 רוצים כתובת מייל בעברית? כנסו למייל.קום 👉

          תגובה 1 תגובה אחרונה
          3
          • שאלתיאלש
            שאלתיאלש
            שאלתיאל
            כתב נערך לאחרונה על ידי שאלתיאל
            #5

            @yossiz
            א. מה זה פסאודו קוד
            ב. למה אי אפשר לכתוב פשוט 1000
            ג. למה מיותר? ולמה אתה חושב שזה טוב ללמידה?
            ד.מה בדיוק הולך פה איזה אלגוריתם?
            ה.סליחה שאני חופר אתה פשוט מורה מצוין
            ו. מה זה חילוק אינטגרלי?

            תגובה 1 תגובה אחרונה
            -1
            • dovidD
              dovidD
              dovid
              ניהול
              כתב נערך לאחרונה על ידי dovid
              #6

              @שאלתיאל אכן אתה לא לחינם הרגשת בעיה, בא נגדיר "חופר":
              כל שאלה שאתה שואל תעשה מאמץ מקדים למצוא תשובה, אם אין לך כח, חכה שיהיה. לגיטימי שלא תצליח בקלות, ואז זה הזמן לשאול.
              מנסחים את השאלה בינך לעצמך, מחליטים ששווה שאלה ושלא מצאת פתרון, ופותחים נושא ייעודי רק לשאלה זו. שאלות כאלה אתה יכול לשאול בלי סוף ובלי נקיפות מצפון.
              אבל חשוב להיות שקוף וכנה עם העונים לך - תלמד ותשאל לפי הסדר: אתה לא יודע מה זה ייצוג מספרי בבינארית. העונה מצפה שתדע את זה וראית היטב שהוא מצפה לזה, הוא גם כתב לך את זה בעבר, וגם מדריכי אסמבלר שקראת גם הניחו שאתה יודע, אבל אתה "החלקת" את העניין.
              אתה בנקודה כזו צריך להחליט: אפשרות א: אני לומד, ואנסה להבין, אפשרות ב: אני שואל וכותב מפורש שהתקשיתי בזה ואני מעדיף להתעלם מהמידע הזה. ככה לעונה יש אפשרות לשקול מה לענות לך והוא לא טורח בשרשרת של תיבת פנדורה.

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

              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              תגובה 1 תגובה אחרונה
              3
              • dovidD dovid נעל נושא זה

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

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

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

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


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

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

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