Menu
Coddy logo textTech

dw - 워드 정의

Coddy Assembly 여정의 기초 섹션에 포함된 레슨 — 45개 중 25번째.

db는 1바이트의 데이터를 생성합니다. 하지만 때로는 단일 바이트(0-255)에 들어가지 않는 더 큰 숫자를 저장해야 할 때가 있습니다. 그럴 때는 dwDefine Word를 사용합니다.

x86 어셈블리에서 워드(word)는 2바이트(16비트)입니다.

구문:

label dw value
  • label — 이 메모리 주소에 부여하는 이름
  • dw — Define Word 지시어
  • value — 저장할 숫자 (0 ~ 65,535)

예제:

section .data
    smallNum dw 1000       ; 2바이트, 값 1000
    bigNum   dw 65535      ; 2바이트, 최댓값 (모든 비트가 1)
    price    dw 499        ; 2바이트, 값 499

워드(2바이트) 하나에 저장할 수 있는 것:

유형범위예시
작거나 중간 크기의 숫자0 ~ 65,535dw 32000
메모리 오프셋 (16비트)0 ~ 65,535dw 0x7FFF

한 줄에 여러 개의 워드:

section .data
    values dw 100, 200, 300, 400    ; 4개의 워드 생성 (총 8바이트)

코드에서 word를 사용하는 방법:

word는 2바이트이므로, 16비트 레지스터인 ax(al이 아님)를 사용합니다:

section .data
    myWord dw 1000

section .text
    mov ax, [myWord]    ; ax에 1000 값을 로드합니다
    add ax, 500         ; ax는 1500이 됩니다
    mov [myWord], ax    ; 1500을 다시 myWord에 저장합니다

비교: db vs dw

지시어크기범위사용할 레지스터
db1 바이트0 ~ 255al
dw2 바이트0 ~ 65,535ax
challenge icon

챌린지

쉬움

.data 섹션에 값이 25000인 population이라는 이름의 word를 생성하세요.

직접 해보기

%include "data.asm"

section .data
    msg db 'population = '
    msg_len equ $ - msg
    newline db 0xa

section .bss
    buffer resb 16

section .text
    global _start

_start:
    ; ax에 word 값을 로드
    mov ax, [population]
    
    ; ax를 10진수 문자열로 변환
    mov rsi, buffer
    add rsi, 15          ; 버퍼의 끝으로 이동
    mov byte [rsi], 0    ; 널 종료 문자
    
    mov cx, 10           ; 10진수 변환을 위한 제수
    
convert_loop:
    xor dx, dx           ; 나눗셈을 위해 dx를 비움
    div cx               ; ax를 10으로 나눔, ax = 몫, dx = 나머지
    add dl, '0'          ; 나머지를 ASCII로 변환
    dec rsi
    mov [rsi], dl        ; 숫자를 저장
    cmp ax, 0
    jnz convert_loop

    ; 값이 덮어씌워지기 전에 숫자 포인터와 길이를 저장
    mov r8, rsi          ; r8 = 첫 번째 숫자에 대한 포인터
    mov r9, buffer
    add r9, 15
    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
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨