Menu
CoddyTech

İki String Yazdırma

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

Bir dizgeyi yazdırmayı zaten biliyorsun. Peki iki ayrı dizgeyi yazdırmak istersen ne olacak? Örneğin, önce "Hello ", sonra da "World!"?

write sistem çağrısını, her bir dize için bir kez olmak üzere, iki kez çağırmanız yeterlidir.

Nasıl çalışır:

; İlk yazdırma
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall

; İkinci yazdırma
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscall

Örnek:

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

Çıktı:

Hello

World!

Her dizge 0x0a (yeni satır) ile biter, bu yüzden iki dizge ayrı satırlara yazdırılır.

Neden tek bir dize yerine iki dize yazdırılır?

GerekçeÖrnek
Yeniden kullanılabilirlikAynı selamlamayı farklı adlarla yazdırma
EsneklikKoşullara göre farklı mesajlar yazdırma
DüzenFarklı mesajları bellekte ayrı tutma

İstediğin kadar dize yazdırabilirsin:

Her dize için write sistem çağrısını tekrarlaman yeterli.

challenge icon

Görev

Sana iki dize verilmiştir: değeri 'Good' olan partOne ve değeri 'bye' olan partTwo. Her ikisinin de sonunda zaten bir yeni satır vardır.

Çıktı şu şekilde görünecek biçimde önce partOne'ı, ardından partTwo'yu yazdıracak kodu yaz:

Good

bye

Veri bölümü ve çıkış sistem çağrısı zaten sağlanmıştır. Yalnızca iki yazma sistem çağrısını yazman gerekiyor.

Kendin dene

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

section .text
    global _start

_start:
    ; TODO: partOne'ı write sistem çağrısını kullanarak yazdır
    ; TODO: partTwo'yu write sistem çağrısını kullanarak yazdır

    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.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground