Menu
Coddy logo textTech

מספר הבתים (rdx)

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

אמרת למערכת ההפעלה היכן להדפיס (rdi) ומה להדפיס (rsi). עכשיו צריך לומר לה כמה בתים להדפיס.

האוגר של מספר הבתים הוא rdx.

למה מערכת ההפעלה צריכה את האורך?

מערכת ההפעלה לא יודעת איפה המחרוזת שלך מסתיימת. בלי אורך, היא תמשיך לקרוא מהזיכרון לנצח. האורך אומר למערכת ההפעלה בדיוק מתי לעצור.

דוגמה:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rdx, msgLen      ; rdx = מספר הבתים להדפסה

מה קורה אם האורך שגוי?

אם קובעיםתוצאה
קצר מדירק חלק מהמחרוזת מודפס
ארוך מדימערכת ההפעלה ממשיכה לקרוא מעבר למחרוזת שלך אל תוך זיכרון זבל: היא עלולה להדפיס תווים אקראיים או לקרוס
אפסלא מודפס דבר

חישוב אורך אוטומטי:

כבר למדת את התבנית $ - label בפרק 3:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + ירידת שורה)

כך מובטח שהאורך תמיד יהיה נכון, גם אם תשנה את המחרוזת.

דוגמה מלאה:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rax, 1           ; קריאת מערכת לכתיבה
    mov rdi, 1           ; stdout
    mov rsi, msg         ; כתובת המחרוזת
    mov rdx, msgLen      ; מספר הבתים
    syscall
challenge icon

אתגר

נתונה לך מחרוזת בשם color עם הערך 'Red' ואחריה תו שורה חדשה. קבוע בשם colorLen כבר הוגדר באמצעות $ - color.

כתוב את שורת הקוד שמגדירה את rdx לאורך המחרוזת באמצעות הקבוע colorLen.

כתוב רק את הוראת mov עבור rdx.

נסו בעצמכם

section .text
    global _start

_start:
    ; הקוד של התלמיד רץ ראשון (מגדיר את rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; האורך כבר נמצא ב-rdx (מהקוד של התלמיד)
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: Assembly אונליין