Menu
Coddy logo textTech

מתאר קובץ (rdi)

חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 36 מתוך 45.

בשיעור הקודם השתמשת ב-mov rdi, 1 כחלק מקריאת המערכת write. המספר 1 הזה נקרא מתאר קובץ.

מתאר קובץ הוא מספר שמורה למערכת ההפעלה לאן לשלוח את הנתונים.

מתארי הקבצים הסטנדרטיים ב-Linux:

מתאר קובץשםלאן הנתונים נשלחים
0stdinקלט מהמקלדת (קריאת נתונים מהמשתמש)
1stdoutפלט למסך (פלט רגיל של התוכנית)
2stderrפלט למסך (הודעות שגיאה)

למה יש שני פלטים למסך?

הפלט הרגיל (stdout) ופלט השגיאות (stderr) מגיעים לאותו מסך, אך הם מטופלים בנפרד. כך אפשר:

  • להפנות את הפלט הרגיל לקובץ ובו בזמן להמשיך לראות שגיאות על המסך
  • להציג שגיאות גם כשהפלט הרגיל מוסתר

להדפסה בקורס הזה:

תמיד תשתמש במתאר הקובץ 1 (stdout) כדי להדפיס הודעות. עדיין אין לך צורך ב-stderr.

דוגמה:

mov rdi, 1      ; שלח פלט אל stdout (המסך)

מה קורה אם משתמשים במתאר קובץ שגוי?

אם משתמשים ב־תוצאה
0 (stdin)קריאת המערכת לכתיבה מצפה לקלט, לא לפלט: היא תיכשל או לא תעשה דבר
2 (stderr)פועל כמו stdout (מדפיס למסך), אך מיועד לשגיאות
כל מספר אחרהקרנל אינו מזהה אותו: קריאת המערכת נכשלת
challenge icon

אתגר

ניתנת לך מחרוזת בשם message עם הערך 'OK' ואחריה תו של שורה חדשה. כתוב את שורת הקוד שמגדירה את מתאר הקובץ להדפסה על המסך (stdout). כתוב רק את הוראת mov עבור rdi.

נסו בעצמכם

section .data
    message db 'OK', 0x0a
    msgLen equ $ - message

section .text
    global _start

_start:
    ; התלמיד מגדיר כאן את מתאר הקובץ
    %include "solution.asm"
    
    mov rax, 1
    ; התלמיד כבר אמור להגדיר את rdi
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconבחנו את עצמכם

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

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

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