מקטע .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.asm | section .data עם הגדרות הנתונים שלך |
main.asm | %include "data.asm" ואחריו section .text עם הקוד שלך |
מה קורה כשהתוכנית שלך פועלת:
- מערכת ההפעלה טוענת את התוכנית שלך לזיכרון
- היא קוראת את המקטע
.dataוממקמת את הנתונים שלך בכתובות זיכרון ספציפיות
- התוויות שלך (
age,price,name) הופכות לכתובות - הקוד שלך יכול כעת לגשת לכתובות האלה באמצעות
[age],[price],[name]
כללים חשובים:
| כלל | הסבר |
|---|---|
| שמרו את הנתונים שלכם יחד | אפשר לפתוח את section .data יותר מפעם אחת (האסמבלר מחבר את החלקים), אבל קל יותר לקרוא כשיש יחידה אחת בקובץ data.asm |
| התוויות חייבות להיות ייחודיות | אי אפשר להשתמש בשתי תוויות בשם age |
| הנתונים נוצרים לפני שהקוד שלכם רץ | הם מוכנים לשימוש כשהקוד מתחיל לפעול ב-_start |
בשיעורים הבאים תלמדו כיצד להגדיר סוגים שונים של נתונים באמצעות db, dw, dd ו־dq
אתגר
כתבו את הקוד בקובץ data.asm כדי:
- ליצור את המקטע
.data - ליצור בית בשם
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השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
תרגלו בעצמכם: Assembly אונליין