אסמבלי x86/האוגרים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
אסמבלי x86











רוב התכנות של שפת אסמבלר מסתמך על האוגרים (Register).

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

במעבד 8086 ישנם 14 אוגרים המתחלקים ל-4 סוגים:

אוגרים כלליים[עריכה]

אוגרים אלו משמשים לרוב פעולות החישוב וההעברה לזכרון וממנו.

  • AX - נקרא גם צובר (Accumulator register) - משמש בעיקר לפעולות חישוב,קלט פלט ופסיקות.
  • BX - נקרא גם אוגר הבסיס (Base register) - משמש בעיקר כמצביע לכתובות זכרון.
  • CX - נקרא גם מונה (Counter register) - משמש בעיקר כמונה לולאות.
  • DX - נקרא גם אוגר הנתונים (Data register) - מתפקד כעוזר ל AX ולפעולות כפל וחילוק.

כל אחד מהאוגרים לעיל ניתן לחלק לשני אוגרים בני 8 ביט. AX למשל, יתחלק ל AH (הביטים השמאליים) ו - AL (הביטים הימניים). לדוגמא, אם המספר 1234H שנמצא באוגר AX, יחולק לשניים, לאוגר AL וAH. אוגר AH יכיל את הספרות הראשונות (12H) לעומת AL שיכיל את הספרות האחרונות (34H).

אוגרי המקטע (Segment)[עריכה]

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

  • CS - אוגר מקטע הקוד (Code Segment)- מכיל את הכתובת בזכרון המחשב לתחילת המקטע בו יושב קוד שפת המכונה - אינו ניתן לשינוי.
  • DS - אוגר מקטע הנתונים (Data Segment) - מכיל את הכתובת לתחילת המקטע בו יושבים המשתנים שמשתמשים בהם בתכנית.
  • ES - אוגר מקטע הנתונים הנוספים (Extra Segment) - מכיל את הכתובת לתחילת המקטע בו יושבים משתנים נוספים שמשתמשים בהם בתכנית (בעיקר משתני יעד לביצוע העברה או העתקה).
  • SS - אוגר מקטע המחסנית (Stack Segment) - מכיל את הכתובת לתחילת המחסנית (ראה להלן).

הערה: את האוגרים הללו לא ניתן לחלק לשני חלקים של 8 ביט.

אוגרי המצביעים[עריכה]

אוגרים אלו מכילים כתובות יחסיות עבור אוגרי המקטע.

  • SI - אוגר מצביע מקור (Source register) - עבור שימוש בקטע זכרון כמקור (יחסית ל DS).
  • BX - אוגר מצביע מקור (Source register) - עבור שימוש בקטע זכרון כמקור (יחסית ל DS).
  • DI - אוגר מצביע יעד (Destination register) - עבור שימוש בקטע זכרון כיעד להעתקה או העברה (יחסית ל ES).
  • SP - מצביע המחסנית (Stack Pointer register) - מצביע על המיקום האחרון במחסנית אליה הוזנו נתונים (יחסית ל SS). לא נועד לשינוי ידני.
  • BP - מצביע הבסיס (Stack Base Pointer register) - מצביע על מקום כלשהו במחסנית (יחסית ל SS).
  • IP - מצביע הפקודה (Instruction Pointer) - מצביע על הפקודה הבאה לביצוע (יחסית ל CS). לא נועד לשינוי ידני.

הערה: את האוגרים הללו לא ניתן לחלק לשני חלקים של 8 ביט.

הערה: האוגר BX אכן משמש ל2 תפקידים ואותו ניתן לחלק לשני חלקים של 8 ביט.

אוגר הדגלים[עריכה]

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

הדגל נחשב דלוק כשערך הביט - 1. וכבוי כשערכו - 0.

  • Carry - CF - דגל הנשא - משמעותי בפעולות במספרים בלתי מכוונים בלבד (unsigned). במספרים כאלה, בביצוע פעולת חיבור שתוצאתה גדולה מטיפוס היעד, או בביצוע פעולת חיסור של ערך גדול מערך קטן ממנו, ידלק דגל זה.
  • Zero - ZF - דגל האפס - יידלק כשתוצאת הפעולה האריתמטית האחרונה תהיה שווה לאפס. נועד בעיקר לביצוע קפיצות מותנות.
  • Sign - SF - דגל הסימן - יידלק כשהביט המשמעותי (השמאלי ביותר) באופרנד היעד בפעולה האחרונה יהיה 1, מה שמציין מספר שלילי.
  • Overflow - OF - דגל הגלישה - יידלק לאחר ביצוע פעולה אריתמטית שבה סימן התוצאה (+/-) שגוי.
  • Parity - PF - דגל הזוגי - יידלק כאשר מספר הביטים הדולקים בתוצאת הפעולה האריתמטית האחרונה הוא זוגי. ייכבה כאשר הוא אי-זוגי.
  • Auxiliary Carry - AF - דגל נשא נוסף, בודק האם היה נשא מ-4 סיביות ה-LSB ל-4 סיביות ה-MSB.
  • Interrupt - IF - דגל אפשור פסיקות חומרה. 1=אפשור, 0=מניעה.
  • Direction - DF - דגל הכיוון - מורה למעבד בפקודות מחרוזת לקדם מצביעים כלפי מעלה (0) או מטה (1).
  • Trace - דגל הרשם.