Menu
CoddyTech

db - הגדרת בית

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

הדרך הבסיסית ביותר ליצור נתונים בזיכרון היא db: הגדרת בית. היא יוצרת בית אחד (8 ביטים) של נתונים.

תחביר:

label db value
  • label: השם שנותנים לכתובת הזיכרון הזאת
  • db: הוראה להגדרת בית
  • value: המספר או התו לאחסון (0 עד 255)

דוגמאות:

section .data
    age db 25          ; יוצר בית בשם "age" המכיל 25
    grade db 'A'       ; יוצר בית בשם "grade" המכיל 65 (קוד ASCII עבור 'A')
    zero db 0          ; יוצר בית בשם "zero" המכיל 0

מה אפשר לאחסן בבית אחד:

סוגטווחדוגמה
מספר קטן0 עד 255db 100
תו'A' עד 'z'db 'X'
קוד ASCII0 עד 255db 65 (זהה ל-'A')

כמה בתים בשורה אחת:

אפשר להגדיר כמה בתים ברצף באמצעות פסיקים:

section .data
    numbers db 5, 10, 15, 20    ; יוצר 4 בתים: 5, 10, 15, 20
    letters db 'A', 'B', 'C'    ; יוצר 3 בתים: 65, 66, 67

איך להשתמש בבית בקוד שלך:

section .data
    myByte db 42

section .text
    mov al, [myByte]    ; טען את הערך 42 לתוך al
    add al, 1           ; al הופך ל-43
    mov [myByte], al    ; אחסן את 43 בחזרה ב-myByte

כלל חשוב:

כללהסבר
הערך חייב להתאים לבייט אחד0 עד 255 (או תו יחיד)
יש להשתמש באוגר של 8 סיביות, כגון al, לטעינה או לאחסוןal (כמו bl, cl, dl) הוא אוגר של 8 סיביות

טעות נפוצה:

; שגוי: ניסיון לאחסן מספר גדול מדי עבור byte
section .data
    error db 300    ; 300 גדול מדי (המקסימום הוא 255)
challenge icon

אתגר

קל

צרו בית בשם score עם הערך 15 ביחידת .data.

כתבו את הקובץ data.asm עם יחידת .data וההנחיה db הנכונות.

נסו בעצמכם

%include "data.asm"

section .text
    global _start

_start:
    mov al, [score]
    
    mov r12, rax
    
    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 אונליין