מתאר קובץ (rdi)
חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 36 מתוך 45.
בשיעור הקודם השתמשת ב־mov rdi, 1 כחלק מקריאת המערכת write. המספר 1 נקרא מתאר קובץ.
מתאר קובץ הוא מספר שאומר למערכת ההפעלה לאן לשלוח את הנתונים.
שלושת מתארי הקבצים הסטנדרטיים ב-Linux:
| מתאר קובץ | שם | לאן הנתונים נשלחים |
|---|---|---|
| 0 | stdin | קלט מהמקלדת (קריאת נתונים מהמשתמש) |
| 1 | stdout | פלט למסך (פלט רגיל של התוכנית) |
| 2 | stderr | פלט למסך (הודעות שגיאה) |
למה יש שני פלטים למסך?
הפלט הרגיל (stdout) ופלט השגיאות (stderr) מגיעים לאותו מסך, אבל מטופלים בנפרד. כך אפשר:
- להפנות את הפלט הרגיל לקובץ ועדיין לראות את השגיאות על המסך
- להציג שגיאות גם כשהפלט הרגיל מוסתר
להדפסה בקורס הזה:
תשתמשו תמיד במתאר הקובץ 1 (פלט סטנדרטי) כדי להדפיס הודעות. עדיין אין צורך בפלט שגיאות סטנדרטי.
דוגמה:
mov rdi, 1 ; שלח את הפלט ל־stdout (המסך)מה קורה אם משתמשים במתאר קובץ שגוי?
| אם משתמשים ב־ | התוצאה |
|---|---|
| 0 (stdin) | קריאת המערכת נכשלת אם הקלט מגיע מצינור או מקובץ. במסוף הטקסט בדרך כלל עדיין מודפס, אבל stdin מיועד לקלט, לא לפלט |
| 2 (stderr) | פועל כמו stdout (מדפיס למסך), אבל מיועד לשגיאות |
| כל מספר אחר | הקרנל לא מזהה אותו: קריאת המערכת נכשלת |
אתגר
נתונה לך מחרוזת בשם 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השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
3ההוראה הראשונה – MOV
מהו MOV?MOV מיידיMOV מאוגר לאוגרMOV מזיכרון לאוגרMOV מאוגר לזיכרוןLEA – טעינת כתובתMOV בגדלים שוניםתרגול: החלפת אוגריםסיכום: אתגר MOV6קריאת מערכת לכתיבה
קריאת מערכת לכתיבה (1)מתאר קובץ (rdi)כתובת המאגר (rsi)מספר הבתים (rdx)מחברים הכול יחדהדפסת שתי מחרוזותלשורה חדשה יש חשיבותסיכום: הגדרת writeתרגלו בעצמכם: Assembly אונליין