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

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

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

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

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

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

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

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

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

مثال:

section .data
    msg db 'Hello', 0x0a

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

ما هو <strong>msg</strong> حقًا:

msg هو تسمية. يستبدلها المُجمِّع بـ number: عنوان الذاكرة address حيث يتم تخزين السلسلة 'Hello'. عند كتابة mov rsi, msg، فإنك تضع number عنوان address هذا في rsi.

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

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

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

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

section .text
    mov rax, 1          ; استدعاء النظام write
    mov rdi, 1          ; الخرج القياسي
    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