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

عنوان الـ Buffer (rsi)

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

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

السجل الخاص بعنوان المخزن المؤقت هو rsi.

ما هو المخزن المؤقت (buffer)؟

المخزن المؤقت (buffer) هو ببساطة كتلة من الذاكرة التي تحتفظ بالبيانات. في حالتنا، المخزن المؤقت هو السلسلة النصية التي نريد طباعتها.

لماذا العنوان، وليس القيمة نفسها؟

يحتاج استدعاء النظام write إلى معرفة مكان بدء السلسلة النصية في الذاكرة. سيقوم بقراءة البايتات من ذلك العنوان حتى يصل إلى الطول الذي حددته في rdx. أنت لا ترسل الأحرف الفعلية إلى استدعاء النظام — بل ترسل موقعها.

مثال:

section .data
    msg db 'Hello', 0x0a

section .text
    mov rsi, msg        ; rsi يحمل عنوان msg

ما هو <strong>msg</strong> في الحقيقة:

msg هو عبارة عن تسمية (label). يقوم المجمّع (assembler) باستبداله برقم — وهو عنوان الذاكرة حيث يتم تخزين السلسلة النصية 'Hello'. عندما تكتب mov rsi, msg، فإنك تضع رقم العنوان هذا في rsi.

ماذا يحدث إذا نسيت العنوان؟

إذا لم تقم بتعيين rsi، فسيحتوي السجل (register) على أي بيانات عشوائية كانت موجودة مسبقاً. سيحاول نظام التشغيل القراءة من عنوان ذاكرة عشوائي، مما سيؤدي على الأرجح إلى حدوث خطأ في التجزئة (segmentation fault) (انهيار).

مثال كامل مع استدعاء النظام write:

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

section .text
    mov rax, 1          ; استدعاء النظام write
    mov rdi, 1          ; stdout
    mov rsi, msg        ; عنوان السلسلة النصية
    mov rdx, len        ; عدد البايتات
    syscall
challenge icon

التحدي

لقد تم إعطاؤك سلسلة نصية تسمى greeting بقيمة 'Hi' متبوعة بسطر جديد. اكتب سطر الكود الذي يقوم بتحميل عنوان greeting في rsi.

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

جرّب بنفسك

section .text
    global _start

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

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

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

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