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

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

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

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

ما عليك سوى استدعاء syscall ‏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!

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

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

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

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

challenge icon

التحدي

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

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

Good

bye

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

جرّب بنفسك

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

section .text
    global _start

_start:
    ; TODO: اطبع partOne باستخدام write syscall
    ; TODO: اطبع partTwo باستخدام write syscall

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

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

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

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