İki String Yazdırma
Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 40 / 45.
Bir dizeyi (string) nasıl yazdıracağınızı zaten biliyorsunuz. Peki ya iki ayrı dizeyi yazdırmak isterseniz? Örneğin, "Hello " ve ardından "World!"?
Sadece write sistem çağrısını iki kez çağırırsınız — her bir dize için bir kez.
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!
Neden bir yerine iki string yazdırılmalı?
| Neden | Örnek |
|---|---|
| Tekrar Kullanılabilirlik | Aynı selamlamayı farklı isimlerle yazdırın |
| Esneklik | Koşullara bağlı olarak farklı mesajlar yazdırın |
| Düzen | Farklı mesajları bellekte ayrı tutun |
İstediğiniz kadar string yazdırabilirsiniz:
Her string için write syscall'u tekrarlamanız yeterlidir.
Görev
Size iki dize verilmiştir: 'Good' değerine sahip partOne ve 'bye' değerine sahip partTwo. Her ikisinin de sonunda zaten bir yeni satır karakteri bulunmaktadır.
Çıktının şu şekilde görünmesi için önce partOne ve ardından partTwo yazdıran kodu yazın:
Good
bye
Veri bölümü (data section) ve çıkış sistem çağrısı (exit syscall) zaten sağlanmıştır. Sadece iki write sistem çağrısını yazmanız yeterlidir.
Kendin dene
section .data
partOne db 'Good', 0x0a
partOneLen equ $-partOne
partTwo db 'bye', 0x0a
partTwoLen equ $-partTwo
section .text
global _start
_start:
; YAPILACAK: write sistem çağrısını kullanarak partOne'ı yazdır
; YAPILACAK: write sistem çağrısını kullanarak partTwo'yu yazdır
mov rax, 60
mov rdi, 0
syscall
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.