אוגר (מחשבים)

[שמאל|ממוזער|250px|אוגר בגודל 8 ביט, המורכב מ-8 [דלגלגים]]
**אוֹגֵר** (באנגלית: **Register**) הוא מושג בארכיטקטורת מחשב, המתאר תא אחסון נתונים מרובה סיביות, המשמש כאופרנד ישיר לפעולות המעבד. ברוב המעבדים המודרניים האוגרים בנויים פיזית על גבי המעבד, וכך מגדילים את מהירות הגישה אליהם. בארכיטקטורת פון נוימן שעליה מבוססים רוב המעבדים המודרניים, היחידה האריתמטית-לוגית ויחידת הבקרה אינן מבצעות חישובים ישירות על זיכרון המחשב אלא טוענות ערכים ממנו **לאוגרים** ולאחר ביצוע החישוב מחזירות את התוצאה שוב מן **האוגרים** לזיכרון. האוגר בנוי מאוסף של דלגלגים המשתלבים למערך אחד, ומייצגים מידע מספרי של יותר מסיבית יחידה.

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

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

## תכונות
את גודלם של האוגרים של מעבד בדרך כלל מודדים בסיביות, ואלו משקפים את כמות המידע המקסימלי אשר המעבד יכול לחשב בפעולה יחידה. כך למשל "מעבד 32 ביט" יתייחס למעבד בעל אוגרים בגודל 32 סיביות, בעוד ש"מעבד 64 ביט" יהיה בעל אוגרים בגודל 64 סיביות. יש להדגיש כי השימוש במושגים אלה לעיתים לא עקבי, כאשר יש המשתמשים בו לתיאור רוחב אפיק הנתונים של המעבד.

## סוגי אוגרים
* **אוגר נתונים** – משמש לאחסון נתון מספרי שלם, לשם ביצוע פעולות אריתמטיות עליו.
* **אוגר כתובת** – מאחסן כתובת זיכרון במטרה לגשת לאזור בזיכרון המחשב עליו יש לפעול.
* **אוגר אינדקס** – משמש לשינוי כתובת יחידת הנתונים עליה יש לבצע פעולה.
* **אוגר רב-תכליתי** – מהווה שילוב של אוגר נתונים ואוגר כתובת.
* **אוגר נקודה צפה** – משמש לאחסון מספר בנקודה צפה, לשם ביצוע פעולות אריתמטיות עליו.
* **אוגר קבוע** – מכיל ערך לקריאה בלבד (למשל את ערכו של פאי).
* **אוגר וקטורי** – משמש לאחסון נתונים לעיבוד וקטורי, כלומר ביצוע פעולת חישוב על נתונים רבים בבת-אחת, בעזרת פקודות SIMD .
* **אוגרים מיוחדים** – כמו האוגר המצביע לכתובת בזיכרון, האוגר המתאר את מצב המערכת, המצביע לערך האחרון במחסנית הקריאות וכו'.
* **אוגר מותאם** – אלה הם אוגרים המותאמים למערכות מסוימות לשימושים ספציפיים אחרים.
* **אוגר חומרה** – אוגר היושב מחוץ למעבד המרכזי, על רכיב חומרה מסוים.
* **[[צובר (מחשבים)|צובר]] (Accumulator)** – אוגר בו מאוחסנות תוצאות ביניים של היחידה האריתמטית-לוגית.
* **[[מונה (מיתוג)|מונה]] (counter)** – אוגר הסופר את מספר האירועים מסוג מסוים שקרו. בדרך כלל מונים סופרים כלפי מעלה אם כי יש מונים הסופרים כלפי מטה.
** **מונה התוכנית (Program counter)**, **מצביע הוראה (instruction pointer)** או **אוגר כתובת הוראה (instruction address register)** – אוגר זה מכיל את כתובת הפקודה שהמעבד עתיד לבצע. כאשר המעבד מסיים לבצע פקודה, הכתובת בתוך המונה תתקדם או תשתנה לכתובת מסוימת (כמו בפקודת קפיצה).
* **מצביע מחסנית (stack pointer)** – מחסנית היא מקום מוגדר בזיכרון לאחסון זמני של נתונים. שמירת הנתונים במחסנית והוצאתם מתבצעת בשיטת "נכנס אחרון יוצא ראשון" (LIFO), שבה הנתון האחרון שנכנס למחסנית הוא גם הראשון שיוצא ממנה. לדוגמה, תוכנית כלשהי מתבצעת. כאשר המעבד מגיע לכתובת מסוימת הוא מגלה בה קריאה לפונקציה אחרת. לפני שהמעבד עובר לביצוע הפונקציה האחרת, הוא שומר במחסנית את כתובת הפקודה שבאה אחרי הקריאה לפונקציה, על-מנת שיוכל לחזור לביצוע התוכנית שקראה לפונקציה, אחרי שהפונקציה תסתיים. בגלל תכונת ה-LIFO, השימוש במחסנית לקפיצה לפונקציות וחזרה אל התוכנית הקוראת יכולה להתבצע בצורה רקורסיבית.
* **אוגר ההוראה (instruction register)** – אוגר זה מכיל את קוד הפקודה שהמעבד מבצע כעת. האותות אשר מגיעים אל המעבד יכולים להיות מספרים או הוראות כלשהן. אם הגיעה הוראה, אז היא מופנית לאוגר ההוראה. יחידת הבקרה מפענחת את ההוראה בהתאם לקוד שלה באוגר, ומבצעת אותה. יחידת הבקרה של המעבד דואגת לבצע את ההוראות על פי נתונים נוספים המתקבלים במעבד באוגרים אחרים, ופועלת על פי אות שעון שמיוצר על ידי מתנד, שגם את התדר שלו ניתן לעיתים לקבוע על ידי אוגר המיועד לכך.
* **[[אוגר זיזה]] (Shift register)** – אוגר המיושם על ידי שרשור דלגלגים, בעלי אות שעון משותף, אשר הפלט של כל אחד, חוץ מהאחרון, מחובר לקלט של הדלגלג הבא בשרשרת, ומהווים מעגל אשר מזיז במיקום אחד את מערך הסיביות החד־ממדי המאוחסן בתוכו. האוגר מזיז פנימה את הנתונים הנוכחים בקלט ומזיז החוצה את הסיבית האחרונה במערך, בעת שינוי מצב השעון.

## ראו גם
* שפת סף
* שפת מחשב
* דלגלג (פליפ פלופ)

## קישורים חיצוניים

* פירוט אודות השימוש באוגרים בשפת סף 

קטגוריה:זיכרון מחשב
קטגוריה:מעבד