Menu
Coddy logo textTech

dd - Definir Double Word

Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 26 de 45.

dw cria 2 bytes de dados. Mas às vezes você precisa de números ainda maiores. Para isso, você usa ddDefine Double Word.

Uma palavra dupla em assembly x86 tem 4 bytes (32 bits).

Sintaxe:

label dd value

Exemplos:

section .data
    myNumber dd 50000        ; 4 bytes, valor 50000
    bigNum   dd 4000000      ; 4 bytes, valor 4 milhões
    max32    dd 4294967295   ; Valor máximo de 32 bits

Tabela de comparação:

DiretivaTamanhoIntervaloRegistrador a ser usado
db1 byte0 a 255al
dw2 bytes0 a 65.535ax
dd4 bytes0 a 4.294.967.295eax

Como usar uma double word em seu código:

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; Carrega o valor em eax
    add eax, 10000         ; eax torna-se 60000
    mov [myNumber], eax    ; Armazena de volta

Regra importante:

RegraExplicação
Use eax para carregar ou armazenareax é o registrador de 32 bits
challenge icon

Desafio

Fácil

Crie uma double word chamada distance com o valor 125000 na seção .data.

Experimente você mesmo

%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:
    ; Carrega o valor double word em eax
    mov eax, [distance]
    
    ; Converte eax para uma string decimal
    mov rsi, buffer
    add rsi, 31          ; Vai para o final do buffer
    mov byte [rsi], 0    ; Terminador nulo
    
    mov ecx, 10          ; Divisor para conversão decimal

convert_loop:
    xor edx, edx         ; Limpa edx para a divisão
    div ecx              ; Divide eax por 10, eax = quociente, edx = resto
    add dl, '0'          ; Converte o resto para ASCII
    dec rsi
    mov [rsi], dl        ; Armazena o dígito
    cmp eax, 0
    jnz convert_loop

    ; Salva o ponteiro do dígito e o comprimento ANTES que sejam alterados
    mov r8, rsi          ; r8 = ponteiro para o primeiro dígito
    mov r9, buffer
    add r9, 31
    sub r9, rsi          ; r9 = número de dígitos
    
    ; Imprime a mensagem
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; Imprime o número
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; Imprime nova linha
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; Sair
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos