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 dd — Define Double Word.
Uma palavra dupla em assembly x86 tem 4 bytes (32 bits).
Sintaxe:
label dd valueExemplos:
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 bitsTabela de comparação:
| Diretiva | Tamanho | Intervalo | Registrador a ser usado |
|---|---|---|---|
db | 1 byte | 0 a 255 | al |
dw | 2 bytes | 0 a 65.535 | ax |
dd | 4 bytes | 0 a 4.294.967.295 | eax |
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 voltaRegra importante:
| Regra | Explicação |
|---|---|
Use eax para carregar ou armazenar | eax é o registrador de 32 bits |
Desafio
FácilCrie 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
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
1A Máquina
O que é CPUMemóriaRegistradores vs MemóriaComo as instruções funcionamPadrão de Dois ArquivosA Arquitetura x86-644Definição de Dados
A Seção .datadb - Definir Bytedw - Definir Worddd - Definir Double Worddq - Definir Quad WordStrings com dbO Símbolo $Recapitulação: Build data.asm