מקטע .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]
כללים חשובים:
| כלל | הסבר |
|---|---|
מקטע .data אחד לכל תוכנית | יש לשים את כל הנתונים במקום אחד |
| התוויות חייבות להיות ייחודיות | לא יכולות להיות שתי תוויות בשם 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 אונליין