두 문자열 출력하기
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
데이터 섹션과 종료 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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: Assembly 플레이그라운드