מחברים הכול יחד
חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 39 מתוך 45.
למדת את כל ארבעת החלקים של קריאת המערכת write:
| אוגר | מה הוא מכיל | ערך לפלט למסך |
|---|---|---|
rax | מספר קריאת המערכת | 1 (write) |
rdi | מתאר קובץ | 1 (stdout) |
rsi | כתובת המאגר | כתובת המחרוזת שלך |
rdx | מספר הבתים | אורך המחרוזת שלך |
עכשיו הגיע הזמן לשלב את כולם יחד.
תבנית קריאת המערכת write המלאה:
mov rax, 1 ; מספר קריאת המערכת עבור write
mov rdi, 1 ; מתאר קובץ (stdout)
mov rsi, msg ; כתובת המחרוזת
mov rdx, msgLen ; מספר הבתים להדפסה
syscall ; בקש ממערכת ההפעלה להדפיסתוכנית עובדת מלאה:
section .data
msg db 'Hello, World!', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallמה התוכנית הזאת עושה:
| שלב | מה קורה |
|---|---|
| 1 | מדפיסה "Hello, World!" למסך |
| 2 | עוברת לשורה חדשה |
| 3 | יוצאת בצורה תקינה עם קוד 0 |
הסדר חשוב:
עליך להגדיר את האוגרים לפני ביצוע syscall. הסדר של הוראות mov אינו חשוב, כל עוד כל ארבעת האוגרים מוגדרים לפני syscall.
אתגר
כתבו תוכנית מלאה שמדפיסה את ההודעה "Assembly is fun" ואחריה שורה חדשה, ואז מסתיימת בצורה תקינה.
המחרוזת והאורך שלה כבר מוגדרים. עליכם לכתוב רק את הקוד בתוך _start:.
נסו בעצמכם
section .data
msg db 'Assembly is fun', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; TODO: להכין ולקרוא לקריאת המערכת write
; השתמשו ב־rax=1, rdi=1, rsi=msg, rdx=msgLen
; TODO: לסיים באופן תקין עם קוד 0
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
3ההוראה הראשונה – MOV
מהו MOV?MOV מיידיMOV מאוגר לאוגרMOV מזיכרון לאוגרMOV מאוגר לזיכרוןLEA – טעינת כתובתMOV בגדלים שוניםתרגול: החלפת אוגריםסיכום: אתגר MOV6קריאת מערכת לכתיבה
קריאת מערכת לכתיבה (1)מתאר קובץ (rdi)כתובת המאגר (rsi)מספר הבתים (rdx)מחברים הכול יחדהדפסת שתי מחרוזותלשורה חדשה יש חשיבותסיכום: הגדרת writeתרגלו בעצמכם: Assembly אונליין