Menu
Coddy logo textTech

두 문자열 출력하기

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

이미 하나의 문자열을 출력하는 방법을 알고 있습니다. 하지만 두 개의 별도 문자열을 출력하고 싶다면 어떻게 해야 할까요? 예를 들어, "Hello "와 "World!"를 출력하려면 어떻게 해야 할까요?

단순히 write 시스템 콜을 두 번 호출하면 됩니다. 각 문자열에 대해 한 번씩 호출합니다.

작동 방식:

; 첫 번째 출력
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall

; 두 번째 출력
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscall

예제:

section .data
    first db 'Hello ', 0x0a
    firstLen equ $-first

    second db 'World!', 0x0a
    secondLen equ $-second

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, first
    mov rdx, firstLen
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, second
    mov rdx, secondLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

출력:

Hello World!

왜 하나 대신 두 개의 문자열을 출력하나요?

이유예시
재사용성다른 이름으로 동일한 인사말 출력
유연성조건에 따라 다른 메시지 출력
구조화메모리에서 서로 다른 메시지를 분리하여 유지

원하는 만큼 많은 문자열을 출력할 수 있습니다:

각 문자열에 대해 write 시스템 호출(syscall)을 반복하기만 하면 됩니다.

challenge icon

챌린지

두 개의 문자열이 주어집니다: 값이 'Good'partOne과 값이 'bye'partTwo입니다. 두 문자열 모두 끝에 개행 문자가 이미 포함되어 있습니다.

출력이 다음과 같이 나타나도록 partOne을 출력한 다음 partTwo를 출력하는 코드를 작성하세요:

Good

bye

data 섹션과 exit syscall은 이미 제공되었습니다. 두 개의 write syscall만 작성하면 됩니다.

직접 해보기

section .data
    partOne db 'Good', 0x0a
    partOneLen equ $-partOne
    partTwo db 'bye', 0x0a
    partTwoLen equ $-partTwo

section .text
    global _start

_start:
    ; TODO: write 시스템 호출을 사용하여 partOne 출력
    ; TODO: write 시스템 호출을 사용하여 partTwo 출력

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

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

기초의 모든 레슨