줄바꿈의 중요성
Coddy Assembly 여정의 기초 섹션에 포함된 레슨 — 45개 중 41번째.
지금까지 문자열 끝에 0x0a (newline)를 추가해 왔습니다. 하지만 이것을 잊어버리면 어떻게 될까요?
newline 없음:
텍스트가 출력되지만 커서는 같은 줄에 머뭅니다. 이후의 모든 출력은 그 바로 옆에 나타나게 됩니다.
줄바꿈이 없는 예시:
section .data
first db 'Hello'
firstLen equ $ - first
second db 'World'
secondLen equ $ - second
section .text
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출력:
HelloWorld
공백 없음. 줄바꿈 없음. 모든 것이 이어져서 출력됩니다.
newline 포함:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - second출력:
Hello
World
각 문자열은 별도의 줄에 출력됩니다.
`newline`이 하는 일:
| 문자 | ASCII | 효과 |
|---|---|---|
0x0a | 10 | 커서를 다음 줄의 시작 위치로 이동합니다 |
자주 하는 줄바꿈 실수:
| 실수 | 결과 |
|---|---|
| 줄바꿈이 전혀 없음 | 텍스트가 한 줄로 이어짐 |
| 마지막 문자열 끝에만 줄바꿈 사용 | 이전 문자열들이 함께 이어지고, 마지막 문자열만 다음 줄로 이동함 |
| 문자열 중간에 줄바꿈 사용 | 예상치 못한 위치에서 줄이 바뀜 |
안전한 규칙:
단독 줄에 출력하고 싶은 모든 string 끝에는 항상 0x0a를 추가하세요.
챌린지
줄바꿈이 없는 세 개의 문자열이 제공됩니다. 당신이 할 일은 이 문자열들을 세 개의 별도 줄에 출력되도록 하는 것입니다.
문자열은 다음과 같습니다:
| String | Value |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
요구사항:
- 끝에 줄바꿈(
0x0a)을 포함하여each문자열을Define하세요 each문자열의 길이를 자동으로Calculate하세요- write
syscall을 사용하여 세 문자열을 모두Print하세요 - 코드 0으로 정상적으로
Exit하세요
직접 해보기
section .data
; TODO: 지침에 나열된 첫 번째 텍스트와 줄바꿈으로 word1 정의
; TODO: 지침에 나열된 두 번째 텍스트와 줄바꿈으로 word2 정의
; TODO: 지침에 나열된 세 번째 텍스트와 줄바꿈으로 word3 정의
; TODO: 각 문자열의 길이 계산
section .text
global _start
_start:
; TODO: word1 출력
; TODO: word2 출력
; TODO: word3 출력
; TODO: 깔끔하게 종료section .data
word1 db 'Apple', 0x0a
word1Len equ $ - word1
word2 db 'Banana', 0x0a
word2Len equ $ - word2
word3 db 'Cherry', 0x0a
word3Len equ $ - word3
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, word1
mov rdx, word1Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word2
mov rdx, word2Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word3
mov rdx, word3Len
syscall
mov rax, 60
mov rdi, 0
syscall이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.