אוגרים לעומת זיכרון
חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 3 מתוך 45.
כעת למדת על שני מקומות שבהם נתונים יכולים להימצא בתוך מחשב:
- אוגרים: תיבות אחסון זעירות בתוך המעבד
- זיכרון (RAM): רשת ענקית של תאים ממוספרים מחוץ למעבד
אבל למה יש שני מקומות? למה המעבד לא יכול פשוט לעבוד ישירות עם הזיכרון?
התשובה היא מהירות. האוגרים מהירים במיוחד כי הם נמצאים בתוך המעבד. הזיכרון איטי יותר כי הוא נמצא מחוץ למעבד. המעבד יכול לגשת לאוגר במחזור שעון יחיד, אבל הגישה לזיכרון אורכת הרבה יותר זמן.
השוואה זו לצד זו:
| מאפיין | אוגרים | זיכרון (RAM) |
|---|---|---|
| מיקום | בתוך ה-CPU | מחוץ ל-CPU |
| מהירות | מהיר במיוחד (מחזור אחד) | איטי יותר (מחזורים רבים) |
| מספר חריצי האחסון | מעטים מאוד (16-32 ב-x86-64) | מיליונים או מיליארדים |
| גודל כל חריץ | 8 בתים (64 ביטים) | בית אחד |
| איך ניגשים אליהם | לפי שם (rax, rbx, rcx...) | לפי כתובת (1000, msg, buffer) |
| נדיפים? | כן (נמחקים כשהחשמל כבוי) | כן (נמחקים כשהחשמל כבוי) |
הכלל החשוב ביותר באסמבלי:
המעבד אינו יכול לעבוד ישירות עם נתונים בזיכרון. תחילה יש לטעון את הנתונים לאוגרים.
זה לא נתון לבחירה. כך המעבד מתוכנן. כל פעולת חיבור, כל השוואה וכל העברת נתונים חייבות לעבור דרך אוגר.
התבנית בת שלושת השלבים שתשתמש בה ללא הרף:
| שלב | מה קורה | דוגמה |
|---|---|---|
| 1. LOAD | העתקת נתונים מהזיכרון לאוגר | mov rax, [count] |
| 2. WORK | ביצוע פעולה עם האוגר | add rax, 5 |
| 3. STORE | העתקת התוצאה בחזרה לזיכרון (אם יש צורך) | mov [result], rax |
מה קורה אם שוכחים את הכלל הזה?
אם תנסו לחבר שני מספרים שנמצאים שניהם בזיכרון, האסמבלר יציג שגיאה. ה-CPU פשוט לא יכול לעשות זאת. קודם צריך לטעון אותם לאוגרים.
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
תרגלו בעצמכם: Assembly אונליין