Menu
Coddy logo textTech

dd - הגדרת מילה כפולה

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

dw יוצר 2 בתים של נתונים. אבל לפעמים צריך מספרים גדולים עוד יותר. לשם כך משתמשים ב־dd: הגדרת מילה כפולה.

מילה כפולה ב־x86 assembly היא 4 בתים (32 סיביות).

תחביר:

label dd value

דוגמאות:

section .data
    myNumber dd 50000        ; 4 בתים, ערך 50000
    bigNum   dd 4000000      ; 4 בתים, ערך 4 מיליון
    max32    dd 4294967295   ; ערך 32-bit מרבי

טבלת השוואה:

הנחיהגודלטווחאוגר לשימוש
dbבייט אחד0 עד 255al
dw2 בייטים0 עד 65,535ax
dd4 בייטים0 עד 4,294,967,295eax

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

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; טען את הערך לתוך eax
    add eax, 10000         ; eax הופך ל-60000
    mov [myNumber], eax    ; שמור בחזרה

כלל חשוב:

כללהסבר
השתמשו ב-eax כדי לטעון או לאחסןeax הוא אוגר של 32 סיביות
challenge icon

אתגר

קל

צרו מילה כפולה בשם distance עם הערך 125000 במקטע .data.

נסו בעצמכם

%include "data.asm"

section .data
    msg db 'distance = '
    msg_len equ $ - msg
    newline db 0xa

section .bss
    buffer resb 32

section .text
    global _start

_start:
    ; טען את ערך המילה הכפולה אל eax
    mov eax, [distance]
    
    ; המר את eax למחרוזת עשרונית
    mov rsi, buffer
    add rsi, 31          ; עבור לסוף buffer
    mov byte [rsi], 0    ; תו סיום מסוג null
    
    mov ecx, 10          ; מחלק להמרה עשרונית

convert_loop:
    xor edx, edx         ; אפס את edx לקראת החלוקה
    div ecx              ; חלק את eax ב־10, eax = מנה, edx = שארית
    add dl, '0'          ; המר את השארית ל־ASCII
    dec rsi
    mov [rsi], dl        ; אחסן את הספרה
    cmp eax, 0
    jnz convert_loop

    ; שמור את המצביע לספרה ואת האורך לפני שערכיהם יידרסו
    mov r8, rsi          ; r8 = מצביע לספרה הראשונה
    mov r9, buffer
    add r9, 31
    sub r9, rsi          ; r9 = מספר הספרות
    
    ; הדפס את ההודעה
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; הדפס את המספר
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; הדפס ירידת שורה
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; צא מהתוכנית
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconבחנו את עצמכם

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

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

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