Menu
CoddyTech
flag Ar iconالعربيةdown icon

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

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

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

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

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

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

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

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

مثال:

section .data
    msg db 'Hello', 0x0a

section .text
    mov rsi, msg        ; يحتفظ rsi بعنوان msg

ما هو msg في الحقيقة:

msg تسمية. يستبدلها المُجمِّع برقم: عنوان الذاكرة الذي تُخزَّن فيه السلسلة 'Hello'. عندما تكتب mov rsi, msg، فأنت تضع رقم ذلك العنوان في rsi.

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

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

مثال كامل باستخدام استدعاء النظام 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اختبر نفسك

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

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

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