אסמבלי x86: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
ינון א (שיחה | תרומות)
אין תקציר עריכה
ינון א (שיחה | תרומות)
אין תקציר עריכה
שורה 18:
כמו כן, ניתן לבצע Debug מלא על תוכנית הרצה (EXE) ע"י הקלדת ''Debug'' ושם הקובץ בשורת הפקודה. להציג את רשימת הפקודות בתוכנה זו יש להקליד ''?''.
 
==האוגרים==
 
רוב התכנות של בשפת אסמבלר מסתמך על האוגרים.<br />
האוגרים הם יחידות זכרון בני 16 ביט כל אחת היושבות במעבד ומבצעות את כל עבודות החישוב.<br />
במעבד 8086 ישנם 14 אוגרים המתחלקים ל 4 סוגים:
 
===אוגרים כלליים===
אוגרים אלו משמשים לרוב פעולות החישוב וההעברה לזכרון וממנו.
*AX - נקרא גם צובר - משמש בעיקר לפעולות חישוב ופסיקות.
*BX - נקרא גם אוגר הבסיס - משמש בעיקר לכתובות זכרון.
*CX - נקרא גם מונה - משמש בעיקר כמונה לולאות.
*DX - נקרא גם אוגר הנתונים - מתפקד כעוזר ל AX ולפעולות כפל וחילוק.
<br /> את כל לעיל ניתן לחלק לשני אוגרים בני 8 ביט. AX למשל, יתחלק ל AH (הביטים השמאליים) ו - AL (הביטים הימניים).
 
===אוגרי המקטע===
אוגרים אלו מכילים כתובת של מקטעי התכנית בלבד, והם נקבעים ע"י מערכת ההפעלה.
*CS - אוגר מקטע הקוד - מכיל את הכתובת לתחילת המקטע בו יושב קוד השפת מכונה בזכרון - אינו ניתן לישנוי.
*DS - אוגר מקטע הנתונים - מכיל את הכתובת לתחילת המקטע בו יושבים המשתנים שמשתמשים בהם בתכנית.
*ES - אוגר מקטע הנתונים הנוספים - מכיל את הכתובת לתחילת המקטע בו יושבים משתנים נוספים שמשתמשים בהם בתכנית (בעיקר משתני יעד לביצוע העברה או העתקה).
*SS - אוגר מקטע המחסנית - מכיל את הכתובת לתחילת המחסנית (ראה להלן).
 
===אוגרי המצביעים===
אוגרים אלו מכילים כתובות יחסיות עבור אוגרי המקטע.
*SI - אוגר מצביע מקור - עבור שימוש בקטע זכרון כמקור (יחסית ל DS).
*DI - אוגר מצביע יעד - עבור שימוש בקטע זכרון כיעד להעתקה או העברה (יחסית ל ES).
*SP - מצביע המחסנית - מצביע על המיקום האחרון במחסנית אליה הוזן נתונים (יחסית ל SS). לא נועד לשינוי ידני.
*BP - מצביע הבסיס - מצביע על מקום כלשהו במחסנית (יחסית ל SS).
*IP - מצביע הפקודה - מצביע על הפקודה הבאה לביצוע (יחסית ל CS). לא נועד לשינוי ידני.
 
===אוגר הדגלים===
זהו בעצם אוגר אחד המכיל 9 דגלים הנותנים גישה לביצוע תקין של התכנית ולקביעת תצורתה.
<br />הדגל נחשב דלוק כשערך הביט - 1. וכבוי כשערכו - 0.
*Overflow - דגל הגלישה - יידלק לאחר ביצוע פעולה לתוך אופרנד שאינו יכול להכיל את תוצאת הפעולה.
*Direction - דגל הכיוון - יש להדליקו כשרוצים לבצע פעולות על קטעי זכרון בסדר יורד (ולא עולה כרגיל).
*Interut -
*Trace -
*Sign - דגל הסימן - יידלק כשהביט השמאלי ביותר באופרנד היעד בפעולה האחרונה יהיה 1, מה שמציין מספר שלילי.
*Zero - דגל האפס - יידלק כשאופרנד היעד בפעולה האחרונה יהיה שווה לאפס. נועד בעיקר לביצוע קפיצות מותנות.
*Auxiliary Carry - דגל נשא נוסף.
*Parity -
*Carry - דגל הנשא - במידה ובוצע פעולה ונוצר ביט אחד שאין אפשרות לאופרנד להכילו, דגל הנשא יכיל ביט זה.
 
==מידע נוסף שחשוב לדעת לפני שניגשים לפקודות==
===גישה לזכרון===
ע"מ לגשת לתא מסויים בזכרון יש לכתוב את המספר או האוגר בסוגריים מרובעות, לדוג': [BX], DS:[1234]. כפי שאפשר לראות בדוגמה אם מתמשים באוגר, התכנית תחפש את הכתובת במקטע ברירת המחדל של המשתנה (במקרה שלנו DS) ואם כותבים מספר, יש לרשום בדיוק לאיזה מקטע התכוונו. אפשר גם לאלץ גישה למקטע שלא מהווה ברירת מחדל. לדוג': ES:[SI].
 
===הצגת מספרים===
כברירת מחדל, שפת אסמבלר מתייחס למספרים כייצוג דצימלי (בסיס 10). ע"מ להתייחס אל מספר כייצוג אחר יש להוסיף: B אחרי מספר בינארי (בסיס 2), O אחרי מספר אוקטלי (בסיס 8) ו - H אחרי מספר הקסה-דצימלי (בסיס 16), בייצוג זה יש להוסיף את הספרה 0 לפני המספר אם הוא מתחיל באות.
 
==פקודות בסיסיות==
{{פקודה|MOV|פעולה=מבצע העתקה של ערך אופרנד מקור לאופרנד יעד.|פרמטרים=אוגר, זכרון; זכרון, אוגר; רגיסטר, אוגר; זכרון, ערך מיידי; אוגר, ערך מיידי; אוגר מקטע, זכרון; זכרון, אוגר מקטע;
אוגר, אוגר מקטע; אוגר מקטע, אוגר|תחביר=MOV OpDestination, OpSource|דוגמה=MOV AX, BX|אלגוריתם=OpDestination = OpSource|הערות=בפקודה זו וכן בכל שאר הפקודות המבצעות פעולה בין שני אופרנדים, גודל אופרנד המקור חייב להיות שווה לגודל אופרנד היעד}}
 
{{פקודה|ADD|פעולה=מבצע הוספה של ערך אופרנד המקור לערך אופרנד היעד.|פרמטרים=אוגר, זכרון
זכרון, אוגר; אוגר, אוגר; זכרון, ערך מיידי; אוגר, ערך מיידי|תחביר=ADD OpDestination, OpSource|דוגמה=ADD AX, 3|אלגוריתם=OpDestination = OpDestination + OpSource|הערות='''הדגלים המשתנים:''' Overflow ,Sign, Zero, Auxiliary Carry, Parity, Carry.}}
 
{{פקודה|SUB|פעולה=מבצע חיסור של אופרנד היעד מאופרנד המקור.|פרמטרים=אוגר, זכרון
זכרון, אוגר; אוגר, אוגר; זכרון, ערך מיידי; אוגר, ערך מיידי|תחביר=SUB OpDestination, OpSource|דוגמה=SUB [BX], 0A2H|אלגוריתם=OpDestination = OpDestination - OpSource|הערות='''הדגלים המשתנים:''' Overflow ,Sign, Zero, Auxiliary Carry, Parity, Carry.}}
 
{{פקודה|INC|פעולה=הוספת 1 לערך היעד.|פרמטרים=אוגר; זכרון|תחביר=INC OpDestination|דוגמה=INC DS:[0FFFFH]|אלגוריתם=OpDestination = OpDestination + 1|הערות='''הדגלים המשתנים:''' Overflow ,Sign, Zero, Auxiliary Carry, Parity.}}
 
{{פקודה|DEC|פעולה=הפחתת 1 מערך היעד.|פרמטרים=אוגר; זכרון|תחביר=DEC OpDestination|דוגמה=DEC CL|אלגוריתם=OpDestination = OpDestination - 1|הערות='''הדגלים המשתנים:''' Overflow ,Sign, Zero, Auxiliary Carry, Parity.}}
 
 
<!-- {{פקודה||פעולה=.|פרמטרים=|תחביר=|דוגמה=|אלגוריתם=|הערות=}} -->