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

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