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!

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

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

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

ما عليك سوى تكرار استدعاء النظام 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 syscall
    ; TODO: اطبع partTwo باستخدام write syscall

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

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

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

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