Menu
Coddy logo textTech

Byte Count (rdx)

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

OS에게 어디에 출력할지(rdi)와 무엇을 출력할지(rsi)를 알려주었습니다. 이제 몇 바이트를 출력할지 알려주어야 합니다.

바이트 수를 위한 레지스터는 rdx입니다.

OS에 왜 길이가 필요한가요?

OS는 문자열이 어디서 끝나는지 알지 못합니다. 길이가 없다면, 메모리를 영원히 계속 읽게 될 것입니다. 길이는 OS에게 정확히 언제 멈춰야 할지를 알려줍니다.

예제:

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

section .text
    mov rdx, msgLen      ; rdx = 출력할 바이트 수

길이가 잘못되면 어떻게 되나요?

설정할 경우결과
너무 짧음문자열의 일부만 출력됨
너무 긺OS가 문자열을 지나 쓰레기 메모리(garbage memory)까지 계속 읽습니다. 무작위 문자가 출력되거나 충돌이 발생할 수 있습니다.
0아무것도 출력되지 않음

길이 자동 계산:

여러분은 이미 3장에서 $ - label 패턴을 배웠습니다:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + 줄바꿈)

이것은 문자열을 변경하더라도 길이가 항상 정확하게 유지되도록 보장합니다.

전체 예제:

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

section .text
    mov rax, 1           ; write 시스템 콜
    mov rdi, 1           ; 표준 출력(stdout)
    mov rsi, msg         ; 문자열 주소
    mov rdx, msgLen      ; 바이트 수
    syscall
challenge icon

챌린지

'Red' 값과 줄바꿈 문자가 포함된 color라는 이름의 문자열이 주어집니다. $ - color를 사용하여 colorLen이라는 상수가 이미 정의되어 있습니다.

colorLen 상수를 사용하여 rdx를 문자열의 길이로 설정하는 코드 한 줄을 작성하세요.

rdx에 대한 mov 명령어만 작성하세요.

직접 해보기

section .text
    global _start

_start:
    ; 학생의 코드가 먼저 실행됩니다 (rdx를 설정함)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx에는 이미 길이가 포함되어 있습니다 (학생의 코드로부터)
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz icon실력 점검

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

기초의 모든 레슨