dd - 더블 워드 정의
Coddy Assembly 여정의 기초 섹션에 포함된 레슨. 45개 중 26번째.
dw는 2바이트의 데이터를 생성합니다. 하지만 때로는 더 큰 수가 필요합니다. 이때 dd를 사용합니다. Define Double Word의 약자입니다.
x86 어셈블리에서 double word는 4바이트(32비트)입니다.
구문:
label dd value예시:
section .data
myNumber dd 50000 ; 4바이트, 값 50000
bigNum dd 4000000 ; 4바이트, 값 4백만
max32 dd 4294967295 ; 최대 32비트 값비교 표:
| 지시어 | 크기 | 범위 | 사용할 레지스터 |
|---|---|---|---|
db | 1 byte | 0 to 255 | al |
dw | 2 bytes | 0 to 65,535 | ax |
dd | 4 bytes | 0 to 4,294,967,295 | eax |
코드에서 double word를 사용하는 방법:
section .data
myNumber dd 50000
section .text
mov eax, [myNumber] ; 값을 eax에 로드
add eax, 10000 ; eax가 60000이 됨
mov [myNumber], eax ; 다시 저장중요한 규칙:
| 규칙 | 설명 |
|---|---|
불러오거나 저장할 때 eax 사용 | eax는 32비트 레지스터입니다 |
챌린지
쉬움distance라는 double word를 값 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 ; 버퍼의 끝으로 이동
mov byte [rsi], 0 ; 널 종료 문자
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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: Assembly 플레이그라운드