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 valuePrzykłady:
section .data
myNumber dd 50000 ; 4 bajty, wartość 50000
bigNum dd 4000000 ; 4 bajty, wartość 4 miliony
max32 dd 4294967295 ; Maksymalna wartość 32-bitowaTabela porównawcza:
| Dyrektywa | Rozmiar | Zakres | Rejestr do użycia |
|---|---|---|---|
db | 1 bajt | 0 do 255 | al |
dw | 2 bajty | 0 do 65,535 | ax |
dd | 4 bajty | 0 do 4,294,967,295 | eax |
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 powrotemWażna zasada:
| Zasada | Wyjaśnienie |
|---|---|
Użyj eax do wczytywania lub zapisywania | eax to rejestr 32-bitowy |
Wyzwanie
ŁatwyUtwó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
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Maszyna
Czym jest CPUPamięćRejestry a pamięćJak działają instrukcjeWzorzec dwóch plikówArchitektura x86-644Definiowanie danych
Sekcja .datadb - definiowanie bajtudw - definiowanie słowadd - definiowanie podwójnego słowadq - definiowanie poczwórnego słowaCiągi znaków z dbSymbol $Podsumowanie: budowanie data.asm2Systemy liczbowe
Dlaczego system binarny?Liczby binarneZamiana z systemu dziesiętnego na binarnyDlaczego system szesnastkowy?Zamiana z systemu szesnastkowego na dziesiętnyZamiana z systemu dziesiętnego na szesnastkowyASCII i system szesnastkowy5Wywołanie systemowe zakończenia
Czym jest syscall?Wywołanie systemowe zakończenia (60)Kody zakończeniaPodsumowanie: prawidłowe zakończeniePoćwicz samodzielnie: Edytor online Assembly