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