Menu
Coddy logo textTech

Yeni Satırın Önemi

Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası. Ders 41 / 45.

Dizilerinizin sonuna 0x0a (newline) ekliyordunuz. Peki ya bunu eklemeyi unutursanız ne olur?

Yeni satır olmadan (Without newline):

Metin yazdırılır, ancak imleç aynı satırda kalır. Gelecekteki herhangi bir çıktı hemen yanında görünecektir.

Yeni satır olmadan örnek:

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

Çıktı:

HelloWorld

Boşluk yok. Yeni satır (newline) yok. Her şey birbirine yapışık.

Yeni satır ile:

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

Çıktı:

Hello World

Her string kendi satırında yazdırılır.

Satır sonu (newline) karakterinin yaptığı iş:

KarakterASCIIEtki
0x0a10Imleci bir sonraki satırın başına taşır

Sık yapılan yeni satır (newline) hataları:

HataSonuç
Hiç yeni satır yokMetinler tek bir satırda birbirine yapışır
Yalnızca son dizenin (string) sonunda yeni satır varÖnceki dizeler birbirine yapışır, sonuncusu alt satıra geçer
Bir dizenin ortasında yeni satır varSatır beklenmedik yerlerde bölünür

Güvenli kural:

Kendi satırında olmasını istediğiniz her dizenin sonuna her zaman 0x0a ekleyin.

challenge icon

Görev

Size yeni satır karakteri içermeyen üç dize verilmiştir. Göreviniz, bunları üç ayrı satırda görünecek şekilde yazdırmaktır.

Dizeler şunlardır:

DizeDeğer
word1'Apple'
word2'Banana'
word3'Cherry'

Gereksinimler:

  • Her dizeyi sonunda bir yeni satır (0x0a) olacak şekilde tanımlayın
  • Her dizenin uzunluğunu otomatik olarak hesaplayın
  • write syscall kullanarak üç dizeyi de yazdırın
  • 0 koduyla sorunsuz bir şekilde çıkış yapın

Kendin dene

section .data
    ; TODO: word1'i talimatlarda listelenen 1. metin ve yeni satır ile tanımla
    ; TODO: word2'yi talimatlarda listelenen 2. metin ve yeni satır ile tanımla
    ; TODO: word3'ü talimatlarda listelenen 3. metin ve yeni satır ile tanımla
    ; TODO: Her string için uzunlukları hesapla

section .text
    global _start

_start:
    ; TODO: word1'i yazdır
    ; TODO: word2'yi yazdır
    ; TODO: word3'ü yazdır

    ; TODO: Temiz bir şekilde çıksection .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
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground