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 = عدد البايتات المراد طباعتها

ماذا يحدث إذا كان length غير صحيح؟

إذا ضبطتالنتيجة
قصير جدًاتتم طباعة جزء فقط من string
طويل جدًايواصل نظام التشغيل القراءة بعد string إلى ذاكرة غير صالحة: قد يطبع أحرفًا عشوائية أو يتعطل
Zeroلا تتم طباعة أي شيء

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

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

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           ; استدعاء نظام الكتابة
    mov rdi, 1           ; الخرج القياسي
    mov rsi, msg         ; عنوان السلسلة
    mov rdx, msgLen      ; عدد البايتات
    syscall
challenge icon

التحدي

لديك string تُسمى color وتحتوي على القيمة 'Red' متبوعة بـ newline. تم تعريف ثابت يُسمى colorLen باستخدام $ - color بالفعل.

اكتب سطر التعليمات البرمجية الذي يضبط rdx على طول string باستخدام الثابت 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اختبر نفسك

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

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

تدرّب بنفسك: Playground لـ Assembly