הדפסת שתי מחרוזות
חלק מהיחידה יסודות במסלול ה-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 עבור כל מחרוזת.
אתגר
נתונות לך שתי מחרוזות: partOne עם הערך 'Good' ו-partTwo עם הערך 'bye'. לשתיהן כבר יש תו newline בסוף.
כתוב את הקוד כדי להדפיס את 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
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
3ההוראה הראשונה – MOV
מהו MOV?MOV מיידיMOV מאוגר לאוגרMOV מזיכרון לאוגרMOV מאוגר לזיכרוןLEA – טעינת כתובתMOV בגדלים שוניםתרגול: החלפת אוגריםסיכום: אתגר MOV6קריאת מערכת לכתיבה
קריאת מערכת לכתיבה (1)מתאר קובץ (rdi)כתובת המאגר (rsi)מספר הבתים (rdx)מחברים הכול יחדהדפסת שתי מחרוזותלשורה חדשה יש חשיבותסיכום: הגדרת writeתרגלו בעצמכם: Assembly אונליין