Menu
CoddyTech

הדפסת שתי מחרוזות

חלק מהיחידה יסודות במסלול ה-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!

כל מחרוזת מסתיימת ב־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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: Assembly אונליין