Menu
Coddy logo textTech

dd - definiowanie podwójnego słowa

Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 26 z 45.

dw tworzy 2 bajty danych. Czasami potrzebujesz jednak jeszcze większych liczb. Do tego użyj dd: Define Double Word.

Podwójne słowo w asemblerze x86 ma 4 bajty (32 bity).

Składnia:

label dd value

Przykłady:

section .data
    myNumber dd 50000        ; 4 bajty, wartość 50000
    bigNum   dd 4000000      ; 4 bajty, wartość 4 miliony
    max32    dd 4294967295   ; Maksymalna wartość 32-bitowa

Tabela porównawcza:

DyrektywaRozmiarZakresRejestr do użycia
db1 bajt0 do 255al
dw2 bajty0 do 65,535ax
dd4 bajty0 do 4,294,967,295eax

Jak używać podwójnego słowa w kodzie:

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; Załaduj wartość do eax
    add eax, 10000         ; eax przyjmuje wartość 60000
    mov [myNumber], eax    ; Zapisz z powrotem

Ważna zasada:

ZasadaWyjaśnienie
Użyj eax do wczytywania lub zapisywaniaeax to rejestr 32-bitowy
challenge icon

Wyzwanie

Łatwy

Utwórz podwójne słowo o nazwie distance i wartości 125000 w sekcji .data.

Spróbuj swoich sił

%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:
    ; Załaduj wartość dwusłowa do eax
    mov eax, [distance]
    
    ; Przekształć eax w ciąg cyfr dziesiętnych
    mov rsi, buffer
    add rsi, 31          ; Przejdź na koniec bufora
    mov byte [rsi], 0    ; Znak końca ciągu
    
    mov ecx, 10          ; Dzielnik do konwersji na zapis dziesiętny

convert_loop:
    xor edx, edx         ; Wyzeruj edx przed dzieleniem
    div ecx              ; Podziel eax przez 10, eax = iloraz, edx = reszta
    add dl, '0'          ; Przekształć resztę w znak ASCII
    dec rsi
    mov [rsi], dl        ; Zapisz cyfrę
    cmp eax, 0
    jnz convert_loop

    ; Zapisz wskaźnik na cyfrę i długość, ZANIM zostaną nadpisane
    mov r8, rsi          ; r8 = wskaźnik na pierwszą cyfrę
    mov r9, buffer
    add r9, 31
    sub r9, rsi          ; r9 = liczba cyfr
    
    ; Wyświetl komunikat
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; Wyświetl liczbę
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; Wyświetl znak nowego wiersza
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; Zakończ program
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly