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

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

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

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

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

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

ראו גם
 שפת סף
 שפת מחשב
 פליפ פלופ

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

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

זיכרון מחשב
מעבד