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

תוכן שנמחק תוכן שנוסף
בונגולים (שיחה | תרומות)
מאין תקציר עריכה
ינון א (שיחה | תרומות)
אין תקציר עריכה
שורה 4:
==תחילת העבודה==
 
ע"מ לכתוב תוכנית בשפת אסבלר כל מה שאנו צריכים זה עורך טקסט פשוט (כגון Notepad או Editor של דוס), מהדר (קומפיילר) ומעבד כמובן.<br />
<br />
 
לאחר ששמרנו את הקובץ עם סיומת asm, יש להדר את הקובץ ע"י מהדר (Compiler) מתאים (ראה להלן). אם המהדר לא ייתקל בשגיאות תחביר במהלך ההידור, הוהוא יצור קובץ obj - תרגום של התכנית שכתבנו בשפת מכונה. לאחר מכן יש לשלוח קובץ זה (obj) ללינקר (Linker) וליצור קובץ בר הרצה (EXE). ניתן לשלוט בפעילות תקינה של תוכנית ההרצה ע"י תוכנת Deubg מתאימה.
 
==תוכנות נפוצות==
 
יש מספר תוכנות לעריכה, הידור, לינקור ודיבוג תוכניות אסבמלר:<br />
מהמפורסמות ביניהן היא תוכנת Turbo Debugger של חברת Borland הפועלת בסביבת DOS. תוכהה זו מאפשרת הרצה מלאה של תוכנת אסמבלר כולל הידור ולינקור ובדיקת שגיאות שורה אחרי שורה תוך הצגה של מצב האוגרים, הזכרון והמחסנית.<br />
תוכנה טובה נוספת היא Microprocessor Emulator 8086 שמבצעת את אותה העבודה רק בממשק חלונאי ועם עוד כמה כלים יעילים.<br />
כמו כן, ניתן לבצע 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 - דגל האפס - יידלק כשאופרנד היעד בפעולה האחרונה יהיה שווה לאפס. נועד בעיקר לביצוע קפיצות מותנות.
*Auziliary Carry -
*Parity -
*Carry - דגל הנשא - במידה ובוצע פעולה ונוצר ביט אחד שאין אפשרות לאופרנד להכילו, דגל הנשא יכיל ביט זה.
 
==פקודות בסיסיות==
===פקודת MOV===
מבצע העתקה של אופרנד מקור לאופרנד יעד.