Menu
Coddy logo textTech

$ 기호

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

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

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

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

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

해결책: <strong>$lt;/strong>를 사용한 자동 길이 계산

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

예제 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실력 점검

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

기초의 모든 레슨