Menu
CoddyTech

מתאר קובץ (rdi)

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

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

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

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

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

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

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

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

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

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

דוגמה:

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

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

אם משתמשים ב־התוצאה
0 (stdin)קריאת המערכת נכשלת אם הקלט מגיע מצינור או מקובץ. במסוף הטקסט בדרך כלל עדיין מודפס, אבל 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 אונליין