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

طباعة سلسلتين نصيتين

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

أنت تعرف بالفعل كيفية طباعة سلسلة نصية واحدة. لكن ماذا لو أردت طباعة سلسلتين نصيتين منفصلتين؟ على سبيل المثال، "Hello " ثم "World!"؟

ما عليك سوى استدعاء نداء النظام write مرتين، مرة لكل سلسلة.

آلية عمله:

; الطباعة الأولى
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall

; الطباعة الثانية
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscall

مثال:

section .data
    first db 'Hello ', 0x0a
    firstLen equ $-first

    second db 'World!', 0x0a
    secondLen equ $-second

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, first
    mov rdx, firstLen
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, second
    mov rdx, secondLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

الناتج:

Hello

World!

تنتهي كل سلسلة بـ 0x0a (سطر جديد)، لذا تُطبع السلسلتان في سطرين منفصلين.

لماذا نطبع سلسلتين نصيتين بدلًا من واحدة؟

السببمثال
إمكانية إعادة الاستخداماطبع التحية نفسها بأسماء مختلفة
المرونةاطبع رسائل مختلفة بناءً على الشروط
التنظيماحتفظ بالرسائل المختلفة منفصلة في الذاكرة

يمكنك طباعة أي عدد تريده من السلاسل النصية:

ما عليك سوى تكرار استدعاء النظام write لكل سلسلة نصية.

challenge icon

التحدي

لديك سلسلتان: partOne وقيمتها 'Good'، وpartTwo وقيمتها 'bye'. تنتهي كلتاهما بالفعل بسطر جديد.

اكتب الشيفرة لطباعة partOne ثم partTwo بحيث يُظهر الناتج:

Good

bye

قسم البيانات واستدعاء النظام للخروج متوفران بالفعل. ما عليك سوى كتابة استدعائي النظام للكتابة.

جرّب بنفسك

section .data
    partOne db 'Good', 0x0a
    partOneLen equ $-partOne
    partTwo db 'bye', 0x0a
    partTwoLen equ $-partTwo

section .text
    global _start

_start:
    ; TODO: اطبع partOne باستخدام استدعاء النظام write
    ; TODO: اطبع partTwo باستخدام استدعاء النظام write

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

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

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

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