1 / 20

Assembly For X86

Assembly For X86. ייצוג מספרים ממשיים. ייצוג מספרים ממשיים. יצוג למספר אפס: כל הסיביות '0' כל מספר שונה מאפס: sign – סיבית סימן (0 – חיובי, 1 – שלילי) exponent – מספר שלם שהוא חזקה של 2 Significant – סדרה של ספרות בינאריות המיצגת מספר ממשי בין 1 ל- 1.99999..99. ייצוג בפועל.

hamlin
Download Presentation

Assembly For X86

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Assembly For X86 ייצוג מספרים ממשיים

  2. ייצוג מספרים ממשיים • יצוג למספר אפס: כל הסיביות '0' • כל מספר שונה מאפס: • sign – סיבית סימן (0 – חיובי, 1 – שלילי) • exponent – מספר שלם שהוא חזקה של 2 • Significant – סדרה של ספרות בינאריות המיצגת מספר ממשי בין 1 ל- 1.99999..99

  3. ייצוג בפועל • לפי תקן IEEE • שלושה גדלים שונים: • 32 סיביות – single • 64 סיביות – double • 80 סיביות – long double

  4. 32 bit • Sign – 1 bit • Exponent – 8 bit • Signific – 23 bit • דיוק של 6-7 ספרות עשרוניות • ערך EXP הוא בתחום 126 – עד 127- • אין שימוש בערכים הקיצוניים כדי לאפשר ייצוג של NaN , INF

  5. 64 Bit • Sign – 1 bit • Exponent – 11 bit • Signific – 52 bit • דיוק של 61-15 ספרות עשרוניות • ערך EXP הוא בתחום 1022 – עד 1023-

  6. 80 Bit • Sign – 1 bit • Exponent – 15 bit • Signific – 52 bit • דיוק של 19-18 ספרות עשרוניות • ערך EXP הוא בתחום 16382 – עד 16383-

  7. תחומים • עבור 32 סיביות: החזקות של 2 הם בתחום 127- עד 126 כלומר: • 1 * 2-127 = 1.175 * 10-38 • 1.99999.. * 2126 = 3.438 • עבור 64 סיביות: • 2.225 * 10-308  1.798 *10308 • עבור 80 סיביות: • 3.362 * 10-4932 1.189*104932

  8. דוגמא • ייצוג המספר 1.625: • 1 * 20 + 1 * 2-1 + 0 * 2-2 + 1 * 2-3 • 1 + 0.5 + 0.125 • ערך ה – Significant יהיה 1101

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

  10. בעיות דיוק • כל מספר חייב להיות מיוצג ע"י חזקות של 2: • 0.5 0.25 0.125 • 0.0625 0.03125 • 0.015625 0.0078125 • וכך ניתן להמשיך לנצח כאשר הדיוק גדל אבל לא מסתיים

  11. המעבד המתמטי • פקודות המכונה הרגילות תומכות בפעולות על מספרים שלמים בלבד • במחשבי PC הראשונים פעולות במספרים ממשיים מומשו בתוכנה • המעבד המתימטי תומך בפעולות במספרים ממשיים ברמת המכונה. • שם אחר - FPU

  12. סוגי מעבדים • לכל אחד מסוגי המעבדים היה מעבד מתמטי מתאים: • 8088 – 8087 • 80286 – 80287 • 80386 – 80387 • החל מ- 80486DX המעבד המתימטי כלול ב- CPU • אין הרבה הבדלים בין המעבדים המתמטים השונים.

  13. ארכיטקטורה • 8 אוגרי מספרים – stack registers • Status Word Register • Control Word Register • Tag Word Register

  14. Stack Registers • 80 סיביות – למספרים ממשיים • st(0) – st(7) • st(0) נקרא גם st • לכל אחד מהאוגרים הנ"ל יש 2 סיביות באוגר מיוחד שנקרא tag register • הסיביות מציינות את המצב של האוגר (מתוך 4 מצבים – ערך תקין, אפס, מיוחד, ריק)

  15. Status Word Register – דומה לאוגר הדגלים של המעבד הראשי • Control Word Register – מכיל דגלים המשפיעים על תפקוד המעבד לדוגמא ניתן להוריד את מידת הדיוק מ – 80 סיביות ל- 32/64 • למרות שאוגרי הנתונים מכילים מספרים בייצוג 80 סיביות ניתן לבצע המרה ע"י פקודות. • לדוגמא הפקודה FILD מאפשרת לקרוא מהזיכרון מספר ממשי 32 סיביות לתוך st(i) • הפקודה FIST מבצעת את הפעולה ההפוכה

  16. Tag Word 15 14 13 12 3 2 1 0 Tag(7) Tag(6) Tag(5) Tag(4) Tag(3) Tag(2) Tag(1) Tag(0) 00 – ערך תקין 01 – ערך אפס 10 – ערך מיוחד או בלתי חוקי (אינסוף, NAN) 11 - ריק

  17. דוגמא .386 .387 _math_sub PROC NEAR push bp mov bp,sp fld dword ptr [bp+4] ; read into st fsub dword ptr[bp+8] ; st=st- b pop bp ret

  18. Double push bp mov bp,sp fld qword ptr [bp+4] fsub qword ptr[bp+12]

  19. Long Double push bp mov bp,sp fld tbyte ptr [bp+4] ; st <-- u fld tbyte ptr [bp+14] ; st <-- v ; st(1) <-- u fsubp st(1),st pop bp ret

  20. פקודות • FLD - טעינת נתון • FADD - חיבור • FST - שליפת נתון • FILD - טעינת מספר שלם לאוגר ממשי • FIST - שליפת מספר שלם • FCOM - השוואה בין שני אופרנדים

More Related