Menu
CoddyTech

אוגרים לעומת זיכרון

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

למדת עכשיו על שני מקומות שבהם נתונים יכולים להימצא בתוך מחשב:

  • רגיסטרים: תיבות אחסון זעירות בתוך המעבד
  • זיכרון (RAM): רשת ענקית של תאים ממוספרים מחוץ למעבד

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

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

השוואה זו לצד זו:

מאפייןאוגריםזיכרון (RAM)
מיקוםבתוך ה-CPUמחוץ ל-CPU
מהירותמהירה במיוחד (מחזור אחד)איטית יותר (מחזורים רבים)
מספר חריצי האחסוןמעטים מאוד (16-32 ב-x86-64)מיליונים או מיליארדים
גודל כל חריץ8 בתים (64 סיביות)בית אחד
איך ניגשים אליהםלפי שם (rax, rbx, rcx...)לפי כתובת (1000, msg, buffer)
נדיף?כן (נעלם כשהחשמל כבוי)כן (נעלם כשהחשמל כבוי)

הכלל החשוב ביותר ב־assembly:

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

אוגרים הם גם המקום שבו שומרים את הערכים שעובדים איתם, כי כל גישה לזיכרון איטית.

התבנית בת שלושת השלבים שתשתמש בה כל הזמן:

שלבמה קורהדוגמה
1. LOADהעתקת נתונים מהזיכרון לאוגרmov rax, [count]
2. WORKביצוע פעולה עם האוגרadd rax, 5
3. STOREהעתקת התוצאה בחזרה לזיכרון (אם צריך)mov [result], rax

מה קורה אם שוכחים את הכלל הזה?

אם תנסה לחבר שני מספרים שנמצאים שניהם בזיכרון, האסמבלר יציג שגיאה. ה-CPU לא יכול לעשות זאת. תחילה עליך לטעון אחד מהם לאוגר.

נסו בעצמכם

השיעור הזה לא כולל אתגר קוד.

quiz iconבחנו את עצמכם

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

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

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