두 문자열 출력하기
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)을 반복하기만 하면 됩니다.
챌린지
두 개의 문자열이 주어집니다: 값이 '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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.