אוגרים לעומת זיכרון
חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 3 מתוך 45.
למדת עכשיו על שני מקומות שבהם נתונים יכולים להימצא בתוך מחשב:
- אוגרים: תיבות אחסון זעירות בתוך ה-CPU
- זיכרון (RAM): רשת ענקית של משבצות ממוספרות מחוץ ל-CPU
אבל למה יש שני מקומות? למה המעבד לא שומר הכול בזיכרון?
התשובה היא מהירות. האוגרים מהירים במיוחד כי הם נמצאים בתוך ה־CPU. הזיכרון איטי יותר כי הוא נמצא מחוץ לו. ה־CPU יכול לגשת לאוגר במחזור יחיד, אבל הגישה לזיכרון נמשכת הרבה יותר זמן.
השוואה זו לצד זו:
| מאפיין | אוגרים | זיכרון (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 |
מה קורה אם שוכחים את הכלל הזה?
אם תנסו לחבר שני מספרים ששניהם נמצאים בזיכרון, האסמבלר יציג שגיאה. המעבד לא יכול לעשות זאת. תחילה עליכם לטעון אחד מהם לאוגר.
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
תרגלו בעצמכם: Assembly אונליין