קודי יציאה
חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 33 מתוך 45.
כשהתוכנית שלך מסתיימת, היא שולחת מספר קטן בחזרה למערכת ההפעלה. המספר הזה נקרא קוד יציאה או מצב יציאה.
למה קודי יציאה חשובים:
סקריפטים משתמשים בקודי יציאה כדי לבדוק אם תוכנית הצליחה. לדוגמה, סקריפט גיבוי עשוי להמשיך רק אם הפקודה הקודמת הצליחה.
קודי יציאה עוזרים גם באיתור באגים. אפשר להשתמש בקודי שגיאה שונים עבור בעיות שונות.
אפשר גם לשרשר תוכניות כך שתוכנית אחת תפעל רק אם התוכנית הקודמת הצליחה. המעטפת בודקת את קוד היציאה לפני שהיא מפעילה את הפקודה הבאה.
כללי קודי היציאה:
| קוד יציאה | משמעות |
|---|---|
| 0 | הצלחה: הכול פעל כשורה |
| 1-255 | משהו השתבש |
בחירת קודי שגיאה:
אפשר להשתמש בכל מספר בין 1 ל־255. המשמעות של כל מספר נתונה לבחירתך כמתכנת.
| קוד יציאה | מה ייתכן שהתכוונת |
|---|---|
| 1 | שגיאה כללית |
| 2 | קובץ קלט חסר |
| 3 | ההרשאה נדחתה |
| 4 | שגיאת רשת |
מה קורה אם לא מגדירים קוד יציאה?
חובה להגדיר את rdi תמיד לפני קריאת המערכת ליציאה. אם תשכח, rdi יכיל את הזבל שנשאר באוגר, והתוכנית שלך תסתיים עם קוד אקראי.
אתגר
כתבו תוכנית אסמבלי מלאה שיוצאת עם קוד יציאה 2 (כדי לאותת על "file not found").
קוד ההדפסה מסופק לכם. צריך רק להוסיף את קריאת המערכת ליציאה.
נסו בעצמכם
section .data
msg db 'Backup complete', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; הדפס את ההודעה (שסופקה על ידי סביבת הבדיקה)
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
; הקוד של התלמיד נכתב כאן
%include "solution.asm"השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
תרגלו בעצמכם: Assembly אונליין