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 סיביות

טעות נפוצה:

; שגוי: ניסיון לאחסן מספר גדול מדי עבור בית אחד
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 אונליין