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]אתגר
כתוב שורת אסמבלי אחת כדי לטעון את הערך מכתובת הזיכרון 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השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
3ההוראה הראשונה – MOV
מהו MOV?MOV מיידיMOV מאוגר לאוגרMOV מזיכרון לאוגרMOV מאוגר לזיכרוןLEA – טעינת כתובתMOV בגדלים שוניםתרגול: החלפת אוגריםסיכום: אתגר MOVתרגלו בעצמכם: Assembly אונליין