Menu
Coddy logo textTech

Bayt Sayısı (rdx)

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

İşletim sistemine nereye yazdırılacağını (rdi) ve ne yazdırılacağını (rsi) söylediniz. Şimdi ona kaç bayt yazdırılacağını söylemeniz gerekiyor.

Bayt sayısı için kullanılan yazmaç rdx'tir.

OS neden uzunluğa ihtiyaç duyar?

OS, dizginizin nerede bittiğini bilmez. Bir uzunluk olmadan, belleği sonsuza kadar okumaya devam eder. Uzunluk, OS'ye tam olarak ne zaman duracağını söyler.

Örnek:

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

section .text
    mov rdx, msgLen      ; rdx = yazdırılacak bayt sayısı

Uzunluk yanlış olursa ne olur?

Eğer şunu ayarlarsanızSonuç
Çok kısaDizenin yalnızca bir kısmı yazdırılır
Çok uzunİşletim sistemi dizenizi geçip çöp belleğe (garbage memory) okumaya devam eder — rastgele karakterler yazdırabilir veya çökebilir
SıfırHiçbir şey yazdırılmaz

Uzunluğu otomatik olarak hesaplama:

Bölüm 3'te $ - label kalıbını zaten öğrenmiştiniz:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + yeni satır)

Bu, dizeyi değiştirseniz bile uzunluğun her zaman doğru olmasını sağlar.

Tam örnek:

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

section .text
    mov rax, 1           ; write sistem çağrısı
    mov rdi, 1           ; stdout
    mov rsi, msg         ; dizginin adresi
    mov rdx, msgLen      ; bayt sayısı
    syscall
challenge icon

Görev

Size, değeri 'Red' olan ve ardından bir yeni satır karakteri gelen color adında bir dize verilmiştir. $ - color kullanılarak colorLen adında bir sabit zaten tanımlanmıştır.

colorLen sabitini kullanarak rdx kaydını dizenin uzunluğuna ayarlayan kod satırını yazın.

Sadece rdx için mov talimatını yazın.

Kendin dene

section .text
    global _start

_start:
    ; Öğrencinin kodu önce çalışır (rdx'i ayarlar)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx zaten uzunluğa sahip (öğrencinin kodundan gelen)
    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