Menu
Coddy logo textTech

Hepsini Bir Araya Getirme

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

write sistem çağrısının (syscall) dört parçasının tamamını öğrendiniz:

Yazmaç (Register)Ne tuttuğuEkran çıktısı için değer
raxSistem çağrısı numarası1 (write)
rdiDosya tanımlayıcı (File descriptor)1 (stdout)
rsiTampon (Buffer) adresiDizginizin (string) adresi
rdxBayt sayısıDizginizin (string) uzunluğu

Şimdi hepsini bir araya getirme zamanı.

Tam write syscall deseni:

mov rax, 1          ; write için syscall numarası
mov rdi, 1          ; dosya tanımlayıcı (stdout)
mov rsi, msg        ; dizenin adresi
mov rdx, msgLen     ; yazdırılacak bayt sayısı
syscall             ; işletim sisteminden yazdırmasını iste

Tamamlanmış, çalışan bir program:

section .data
    msg db 'Hello, World!', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

Bu programın yaptığı:

AdımNe olur
1Ekrana "Hello, World!" yazdırır
2Yeni bir satıra geçer
30 koduyla temiz bir şekilde çıkar

Sıralama önemlidir:

syscall komutunu çalıştırmadan önce yazmaçları (registers) ayarlamalısınız. Dördü de syscall komutundan önce ayarlandığı sürece mov komutlarının sırası önemli değildir.

challenge icon

Görev

"Assembly is fun" mesajını ve ardından bir yeni satır yazdıran, ardından temiz bir şekilde çıkan tam bir program yazın.

Dize ve uzunluğu zaten tanımlanmıştır. Sadece _start: içindeki kodu yazmanız gerekiyor.

Kendin dene

section .data
    msg db 'Assembly is fun', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    ; YAPILACAK: write sistem çağrısını ayarla ve çağır
    ; rax=1, rdi=1, rsi=msg, rdx=msgLen kullanın

    ; YAPILACAK: 0 koduyla temiz bir şekilde çıkış yap
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