Menu
Coddy logo textTech

MOV מזיכרון לאוגר

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

עד כה, העברת מספרים ישירות לאוגרים (ערכים מיידיים) והעתקת ערכים בין אוגרים. עכשיו תלמד איך לטעון נתונים מזיכרון לאוגר.

למה זה חשוב:

זכרו מפרק 0: המעבד לא יכול לעבוד ישירות עם הזיכרון. תחילה יש לטעון את הנתונים לאוגרים. כך עושים זאת.

תחביר:

mov register, [address]

הסוגריים [ ] פירושם: "עבור לכתובת הזיכרון הזו וקבל את הערך שמאוחסן בה."

חשבו על זה כך:

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

mov al, [number]    ; Load the value from memory address "number" into al

אתה אומר למעבד: "לך אל התיבה שנקראת number, קח את הערך שנמצא בתוכה (במקרה הזה 5), והעתק אותו אל האוגר al."

לאחר ביצוע ההוראה הזאת, הערך 5 מאוחסן כעת ב־al. הערך המקורי שבתיבה בכתובת number נשאר שם. הוא לא מוסר.

כללים חשובים:

כללהסבר
המקור חייב להיות כתובת בזיכרון[label] או [address]
הסוגריים המרובעים הכרחייםmov al, myNumber טוען את הכתובת, לא את הערך
הגודל חייב להתאיםאם הזיכרון מאחסן בית, השתמשו ב-al (לא ב-rax)

טעות נפוצה:

; שגוי: טוען את הכתובת של myNumber, ולא את הערך
mov al, myNumber

; נכון: טוען את הערך המאוחסן ב-myNumber
mov al, [myNumber]
challenge icon

אתגר

כתוב שורת אסמבלי אחת כדי לטעון את הערך מכתובת הזיכרון value לאוגר al.

נסו בעצמכם

section .data
    msg db 'al = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; הקוד של התלמיד רץ ראשון (טוען ערך ל-al)
    
    %include "solution.asm"
    
    ; שמור את הערך מ-al
    mov r12, rax
    
    ; הדפס "al = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; הדפס את הערך ב-al
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; צא
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconבחנו את עצמכם

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

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

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