Menu
Coddy logo textTech

$ 기호

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

write 시스템 호출(5장)을 사용하여 문자열을 출력할 때는 CPU에 출력할 바이트 수를 알려야 합니다.

문자를 수동으로 셀 수도 있습니다:

message db 'Hello', 0x0a    ; 6바이트 (H e l l o 개행)
mov rdx, 6                  ; 수동 카운트

하지만 수동으로 세는 작업은 느리고 오류가 발생하기 쉽습니다. 문자열을 변경하면 다시 세고 숫자를 업데이트해야 합니다.

해법: $를 사용한 자동 길이 계산

$위치 카운터입니다. 다음 바이트가 배치될 현재 메모리 주소를 나타냅니다.

예제 1: 간단한 문자열

section .data
    message db 'Hello', 0x0a
    msgLen equ $ - message

작동 방식:

  • message는 시작 주소입니다(예: 1000).
  • 6바이트를 저장한 후 $는 1006이 됩니다.
  • $ - message = 1006 − 1000 = 6(길이)

참고: equequate를 의미합니다. 이는 값을 나타내는 이름인 상수를 생성합니다.

예제 2: 여러 문자열

section .data
    first db 'Hi', 0x0a
    len1 equ $ - first      ; len1 = 3 ('H','i', 개행)
    second db 'Hello', 0x0a
    len2 equ $ - second     ; len2 = 6 ('H','e','l','l','o', 개행)

각 문자열에는 자동으로 계산되는 고유한 길이가 있습니다. 각 문자열 바로 뒤의 현재 위치를 항상 가리키므로 $는 계산할 때마다 재설정됩니다.

challenge icon

챌린지

쉬움

값이 'Paris'이고 그 뒤에 줄바꿈(0x0a)이 오는 city라는 문자열을 만드세요. 그런 다음 $ - city를 사용하여 길이를 자동으로 계산하는 cityLen이라는 상수를 만드세요.

직접 해보기

%include "data.asm"

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, city
    mov rdx, cityLen
    syscall
    
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon실력 점검

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

기초의 모든 레슨

직접 연습해 보세요: Assembly 플레이그라운드