İ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 ya iki ayrı dizgeyi yazdırmak istersen? Örneğin, "Hello " ve ardından "World!"?
write sistem çağrısını her 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!
Neden tek bir dize yerine iki dize yazdırılır?
| Neden | Örnek |
|---|---|
| Yeniden kullanılabilirlik | Aynı selamlamayı farklı adlarla yazdırma |
| Esneklik | Koşullara göre farklı iletiler yazdırma |
| Düzen | Farklı iletileri bellekte ayrı tutma |
İstediğiniz kadar dize yazdırabilirsiniz:
Her dize için write sistem çağrısını tekrarlamanız yeterlidir.
Görev
Size iki dize verilmiştir: değeri 'Good' olan partOne ve değeri 'bye' olan partTwo. Her ikisinin sonunda zaten bir yeni satır vardır.
Çıktının şunu göstermesi için partOne ve ardından partTwo değerlerini yazdıracak kodu yazın:
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ız gerekir.
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 syscall kullanarak yazdır
; TODO: partTwo'yu write syscall kullanarak 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.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground