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 = 출력할 바이트 수

length가 잘못되면 어떻게 될까요?

다음과 같이 설정하면결과
너무 짧음string의 일부만 출력됩니다
너무 김OS가 string을 지나 쓰레기 메모리까지 계속 읽습니다. 무작위 문자가 출력되거나 충돌할 수 있습니다
0아무것도 출력되지 않습니다

길이 자동 계산:

Chapter 3에서 이미 $ - label 패턴을 학습했습니다. already

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

이는 string을 변경하더라도 length가 항상 올바르도록 보장합니다.

완전한 예제:

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

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

챌린지

color라는 문자열이 주어지며, 값은 'Red' 뒤에 newline이 옵니다. $ - color를 사용하여 colorLen이라는 상수가 이미 정의되어 있습니다.

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

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

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

기초의 모든 레슨

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