Menu
CoddyTech

מקטע .data

חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 23 מתוך 45.

בפרק 2 טענת ערכים מהזיכרון ושמרת ערכים בזיכרון. אבל מאיפה הגיע הזיכרון הזה? מי יצר את num1, את num2 ואת result?

התשובה היא יחידת .data. כאן יוצרים נתונים משלכם בזיכרון.

מהי יחידת .data?

יחידת .data היא חלק מתוכנית ה-assembly שלך שבו מגדירים נתונים שיישמרו בזיכרון לפני שהתוכנית שלך תרוץ.

תחביר:

section .data
    ; הגדרות הנתונים שלך יופיעו כאן

למה צריך את זה:

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

דוגמה פשוטה:

section .data
    age db 25           ; צור בית בשם "age" עם הערך 25
    price dw 1000       ; צור מילה בשם "price" עם הערך 1000
    name db 'Bob'       ; צור מחרוזת בשם "name" עם האותיות B, o, b

היכן זה נמצא בקבצים שלך:

זכור את התבנית של שני הקבצים מפרק 0:

קובץתוכן
data.asmsection .data עם הגדרות הנתונים שלך
main.asm%include "data.asm" ואחריו section .text עם הקוד שלך

מה קורה כשהתוכנית שלך פועלת:

  1. מערכת ההפעלה טוענת את התוכנית שלך לזיכרון
  2. היא קוראת את המקטע .data וממקמת את הנתונים שלך בכתובות זיכרון ספציפיות
  1. התוויות שלך (age, price, name) הופכות לכתובות
  2. הקוד שלך יכול כעת לגשת לכתובות האלה באמצעות [age], [price], [name]

כללים חשובים:

כללהסבר
שמרו את הנתונים שלכם יחדאפשר לפתוח את section .data יותר מפעם אחת (האסמבלר מחבר את החלקים), אבל קל יותר לקרוא כשיש יחידה אחת בקובץ data.asm
התוויות חייבות להיות ייחודיותאי אפשר להשתמש בשתי תוויות בשם age
הנתונים נוצרים לפני שהקוד שלכם רץהם מוכנים לשימוש כשהקוד מתחיל לפעול ב-_start

בשיעורים הבאים תלמדו כיצד להגדיר סוגים שונים של נתונים באמצעות db, dw, dd ו־dq

challenge icon

אתגר

כתבו את הקוד בקובץ data.asm כדי:

  1. ליצור את המקטע .data
  2. ליצור בית בשם count עם הערך 5

נסו בעצמכם

%include "data.asm"

section .text
    global _start

_start:
    ; טען את הערך מ-count אל al
    mov al, [count]
    
    ; שמור אותו לצורך הדפסה
    mov r12, rax
    
    ; המר ל-ASCII והדפס (0-9 בלבד)
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; צא
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: Assembly אונליין