Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

عدد البايتات (rdx)

جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 38 من 45.

لقد أخبرت نظام التشغيل بمكان الطباعة (rdi) وماذا يطبع (rsi). الآن عليك إخباره بعدد البايتات التي سيطبعها.

المسجل الخاص بعدد البايتات هو rdx.

لماذا يحتاج نظام التشغيل إلى الطول؟

لا يعرف نظام التشغيل أين تنتهي السلسلة النصية الخاصة بك. بدون تحديد الطول، سيستمر في قراءة الذاكرة إلى الأبد. يخبر الطول نظام التشغيل متى يتوقف بالضبط.

مثال:

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

section .text
    mov rdx, msgLen      ; rdx = عدد البايتات المطلوب طباعتها

ماذا يحدث إذا كان الطول خاطئاً؟

إذا قمت بتعيينالنتيجة
قصير جداًتتم طباعة جزء فقط من السلسلة النصية
طويل جداًيستمر نظام التشغيل في القراءة بعد السلسلة النصية الخاصة بك إلى ذاكرة عشوائية (garbage memory) — قد يطبع أحرفاً عشوائية أو يتسبب في تعطل البرنامج
صفرلا يتم طباعة شيء

حساب الطول تلقائياً:

لقد تعلمت بالفعل نمط $ - label في الفصل الثالث:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + سطر جديد)

يضمن ذلك أن يكون الطول صحيحًا دائمًا، حتى لو قمت بتغيير السلسلة النصية.

مثال كامل:

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

section .text
    mov rax, 1           ; استدعاء النظام للكتابة (write syscall)
    mov rdi, 1           ; المخرج القياسي (stdout)
    mov rsi, msg         ; عنوان السلسلة النصية
    mov rdx, msgLen      ; عدد البايتات
    syscall
challenge icon

التحدي

لقد تم إعطاؤك سلسلة نصية تسمى color بالقيمة 'Red' متبوعة بسطر جديد. تم تعريف ثابت يسمى colorLen بالفعل باستخدام $ - color.

اكتب سطر الكود الذي يضبط rdx على طول السلسلة النصية باستخدام الثابت colorLen.

اكتب فقط تعليمة mov لـ rdx.

جرّب بنفسك

section .text
    global _start

_start:
    ; كود الطالب يعمل أولاً (يضبط rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx يحتوي بالفعل على الطول (من كود الطالب)
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات