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