JMP Jcc ;Jump ; conditional jump JA/JNBE CF ZF=0, above/ not below or equal JAE/JNB CF=0, above or equal/ not below JB/JNAE CF=1, below/ not above or equal JBE/JNA CF ZF=1, below or equal/ not above JC CF=1 carry JNC CF=0, not carry JE/JZ ZF=1, equal/zero JNE/JNZ ZF=0, not equal/not zero JPO/JNP PF=0, parity odd/ not parity JPE/JP PF=1, parity even/ parity JCXZ/JECXZ EC/ECX=0, for loops Signed: JG/JNLE greater/ not less or equal JGE/JNL greater or equal/ not less JL/JNGE less/ not greater or equal JLE/JNG less or equal/ not greater JO /JNO overflow/ not overflow JS/JNS sign (negative)/ not sign (non-negative) LOOP LOOP with ECX counter LOOPZ/LOOPE with ECX & 0 / with ECX & = LOOPNZ/LOOPNE with ECX & not 0 / with ECX & not = CALL RET ENTER LEAVE IRET INT INTO BOUND Call procedure Return High-level procedure entry High-level procedure exit Return from interrupt Software interrupt Interrupt on overflow Detect value out of range קפיצות, קפיצות מותנות, לולאות, קריאה לפונקציות, פסיקות התפצלות קפיצה מותנית קפיצה/התפצלות מותנות מאפשרות קבלת החלטות וביצוע לולאות ואלגוריתמים מורכבים קפיצה לכיוון אחד בלבד מגבלה על גודל הקפיצה במקרים במקרםמסומם מסוימים יש Jcc Jump Conditionally פקודות המשנות את מהלך התכנית קפיצות (jump) והתפצלויות,(branch) לא מותנות ומותנות התפצלות בד"כ שינוי יחסית לערך הנכחי של מונה התכנית BEQ -- Branch on equal MIPs BGEZ -- Branch on greater than or equal to zero BGTZ -- Branch on greater than zero BLEZ -- Branch on less than or equal to zero BLTZ -- Branch on less than zero BNE -- Branch on not equal Motorola 680x0 BRA ; 16 bit (short) unconditional branch relative to current PC, 1
לולאות LOOPs מונה את מספר הפעמים שהלולאה תרוץ. ECX :LOOP.1.2 :ZF לולאה מותנית בוחנים גם את -Loope/loopz 1=ZF,0=~ ECX עוברים לאופרנד היעד סיום הלולאה מעבר לכתובת מיד לאחר פקודת ה- loop 0=ZF 0=ECX Jcc - conditional jumps JA/JNBE CF ZF=0, above/ not below or equal opcode:77h JAE/JNB CF=0, above or equal/ not below JB/JNAE CF=1, below/ not above or equal JBE/JNA CF ZF=1, below or equal/ not above JC CF=1 carry JNC CF=0, not carry JE/JZ ZF=1, equal/zero JNE/JNZ ZF=0, not equal/not zero JPO/JNP PF=0, parity odd/ not parity JPE/JP PF=1, parity even/ parity Signed: JG/JNLE greater/ not less or equal JGE/JNL greater or equal/ not less JL/JNGE less/ not greater or equal JLE/JNG less or equal/ not greater JO overflow / JNO not overflow JS sign (negative) /JNS not sign (non-negative) Enter & Leave Call & Ret CALL - קריאה לפונקציה ושמירת כתובת החזרה במחסנית. כתובת הפונקציה כמו בקפיצה (יחסית ל- EIP או בשיטת מיעון אחרת) הוצאת כתובת החזרה מהמחסנית ומעבר - RET אליה היתרון? ניתן לקרוא ממקומות שונים בתכנית, כולל ריקורסיה, כי כתובת החזרה גמישה יצירת ושחרור מסגרת-מחסנית לפונקציה בשפה עילית Pascal),C). מפשט הגישה לפרוצדורות. במסגרת יש מקום מוגדר למשתנים מקומיים ולמצביעים (pointers) הדרושים לחזרה מסודרת. : ENTER מחסנית EBP.1 EBP ESP.2 החסרת הערך של האופרנד הראשון מ- ESP (לשמירה דינאמית 3. של מקום במחסנית) :LEAVE (שחרור כל המקום שהוקצה לפרוצדורה) ESP EBP 1. ESP ;EBP חוזר לערכו המקורי מחסנית 2. כתובת חזרה פקודת :RET הסרת כל הארגומנטים; מחסנית 3. לתכנית 2
מערכות הפעלה Linux and Windows: supervisor & user-mode לביצוע פונקציות מיוחדות: קוד ברמת המשתמש (user-mode) חייב לבצע לעבור ל-.supervisor-mode /kernel space system call כדי Privilege modes,kernel mode -Ring 0 מודים קריטיים למערכת, לב מערכת ההפעלה (קשר עם החמרה, זיכרון פיזי,..) device drivers אם בשימוש - קשר עם -Ring 1 -Ring 3 רמת האפליקציה, משתמש רגיל לעתים קרובות - call system מבוצעת ע"י פסיקה (interrupt) ב- :Linux int 80xh DOS : run in supervisor-mode permanently (old versions) System calls 1. פסיקה מעבירה את המעבד לרמת הרשאה גבוהה יותר, ומעבירה השליטה ל- kernel 2. ה- kernel מחליט אם לאשר לתכנית הקוראת את השרות שבקשה :kernel השרות מאושר, הה- 3. אם 1. מבצע את סט הפקודות אליהן אין לתכנית הקוראת גישה ישירה 2. מחזיר רמת הרשאה לזו של התכנית הקוראת 3. מחזיר שליטה לתכנית הקוראת פסיקות פסיקה אות האומר למערכת ההפעלה ולמעבד שמשהו/ארוע (event) התרחש. התוצאה שינוי בסדר ביצוע הפקודות ע"י המעבד. מקורה לרוב ברכיב I/O א-סינכרונית, פסיקה בחמרה פסיקה בתכנה מקורה בתכנית, לרב ב- user mode I/O אירוע א-סינכרוני, שמקורו לרוב ברכיב - Interrupt Exception אירוע סינכרוני, כשהמעבד מזהה קיום תנאי המוגדר מראש בעת ביצוע פקודה. faults, traps, aborts - 3
ה- מספר פסיקה תאור הפסיקה מקור הפסיקה 0 שגיאת חילוק DIV, IDIV פסיקות debug 1 פסיקה חיצונית 2 INT 3 breakpoint 3 overflow 4 BOUND מחוץ לתחום 5 UD2 OPCODE שגוי 6 (מעבד מתמטי ( Device 7 לא זמין Double fault 8 -- 9 task segment שגוי, סגמנט 10 11 סגמנט לא קיים 12 בעיה במחסנית - General protection 13 פניה ללא הרשאה ולא לפי ההליך הנכון Page fault 14 -- 15 פסיקות בעת פסיקה: 1. המעבד מפסיק ביצוע התכנית הנוכחית או ה- task 2. עובר לפרוצדורה שנכתבה במיוחד כדי לטפל בפסיקה הספציפית procedure),(handler לאחר בדיקת הרשאה. הדגלים נשמרים במחסנית. המעבר מתבצע באמצעות טבלת פסיקות table),(handler descriptor (וקטור). ק פסיקה בטבלה יש מספר לכל 3. כשמסתיים הטיפול בפסיקה, השליטה חוזרת לתכנית שהופסקה. כמו חזרה מפונקציה רגילה (עם/בלי שינוי המוד הרשאה) + שחזור רגיסטר הדגלים.EFLAG - IF שומר על ערכו, interrupt gate ה- - IF מנוקה, למניעת פסיקות חוזרות. trap gate Floating point error 16 Alignment check 17 Machine check 18 SIMD error 19 -- 20-31 32-255 פסיקות משתמש - interrupts maskable INT IRET n INT 3 BOUND INT 5 INTO או INT 4 INT פסיקות באסמבלי X86 80xh הפעלה מכוונת וחוקית: הזזת מבנים גדולים של מידע לזיכרון ומהזיכרון ובחינתם בזיכרון למשל, שרשראות תווים אלפא-נומריים הפקודות פועלות על אלמנטים בודדים מהשרשרת (byte, word, double word) המיקום מוגדר ע"י הרגיסטרים ESI (מקור) ו- EDI (יעד), המכילים כתובות אבסולוטיות 4
פעולות על STRINGs פעולות על STRINGs CMS כמעט ללא הגבלה על גודל המידע. רגיסטרים EDI, ESI מצביעים על כתובות מקור ויעד (בהתאמה) SCAS רק [EAX]-[EDI] -> EFLAGS ; גודל האופרנד בשם הפקודה LODS STOS ; [EAX] -> EDI חלק מפעולות ה- I/O גם מתבצעות על שרשראות פעולות חוזרות על STRINGs IN INS OUT OUTS רגיסטרים EDI, ESI מצביעים על כתובות מקור ויעד (בהתאמה) REPE/REPZ ; REPNE/REPNZ ; REP הוספת :prefix כיוון ההתקדמות: מונה חזרות: בהתאם לדגל הכיוון DF (0 לערך רגיסטר ) ECX (עד הזזת מידע בין port לזיכרון/רגיסטר ; input port-> register ; input port-> string ; output register -> port ; output string -> port 5
Input & output Direct I/O mapping מנגנון בחמרה, מיוחד ל- X86, המאפשר פניה ישירה לרכיבי I/O מרחב כתובות של 16 ביט, הפונה ל- ports מוגדר ע"י רגל I/O של המעבד, או ע"י bus מיוחד הרכיבים מוגדרים וממופים מראש קוראים וקוראים מידע מרגיסטרים ל/מ :I/O OUT port-number, EAX/AX/AL IN EAX/AX/AL, port-number מספר (immediate) או ב- DX *** מספר ה- PORT OUTS INS Block Input & output קוראים וקוראים שרשראות מהזיכרון ל/מ :I/O מספר ה- PORT ב- DX ניתן להשתמש ב- REP גודל יחידת המידע בשם הפקודה: OUTSW,INSB וכיוב' פקודות התומכות במערכת ההפעלה ובפתוח מערכות הפעלה ניהול הזיכרון טיפול בפסיקות Task management בקרה על מספר מעבדים ניהול ההספק ומשאבי החמרה,debugging ובקרה על הביצועים ארכיטקטורה ייעודית עם פקודות ייעודיות 6
"פקודות שלא ניתן לפרקן" בסביבה רבת מעבדים העלאת האות #LOCK באמצעות ה prefix LOCK : לפקודות הבאות כאשר אופרנד היעד בזיכרון: ADD,ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, CMPXCHG16B, DEC, INC, NEG,NOT, OR, SBB, SUB, XOR, XADD, and XCHG חלק מהפקודות הנוספות NOP LEA - load effective address CPUID identify processor and its capabilities RDRAND get a random number generated by HW 7
פעולות MOV מיוחדות Floating point לגרפיקה לחישובים מדעיים, הנדסיים ועסקיים Floating point Integers BCD XLAT תרגום תוך כדי העברה ; [ebx + AL] AL,AL ע"י המקום בטבלה,ebx ועל ע"י על טבלה הצבעה סטים נוספים של פקודות: Flag Packed data SIMD single instruction multiple data לגרפיקה בשניים ושלושה מימדים ווידיאו עיבוד תמונה עיבוד וסינתזה של דיבור טלפוניה וועידות וידאו conferencing) (video העברת הערך ל- AL העברה ל/מ רגיסטרי בקרה floating point in NASM dd 1.2 dd 1.222_222_222 ; underscores are permitted dd 0x1p+2 ; 1.0x2^2 = 4.0 dq 0x1p+32 ; 1.0x2^32 = 4,294,967,296.0 dq 1.e10 ; 10,000,000,000.0 dq 1.e+10 ; synonymous with 1.e1010 dq 1.e-10 ; 0.000 000 000 1 dt 3.141592653589793238462 ; pi Special operators: _float32_, _float8_, רגיסטרים ייעודים ל- Floating point רגיסטרים ייעודיים לפעולות SIMD 8
Floating point ייצוג ע"י מספר שלם, שבר ואקספוננט מעל בסיס כלשהו (כולל,Nan אינסוף, ועוד) Significant digits base exponent Floating point instructions ייצוג מספרים ממשיים בתחום רחב של ערכים: ספרות משמעותיות (מנטיסה) X אקספוננט, הבסיס הוא 2 Type Sign Exponent Significand Total bits Single 1 8 23 32 Double 1 11 52 64 לפי תקן IEEE 754 מבוצע ע"י יחידת חישוב נפרדת x87, FPU המכילה גם פקודות BCD פקודות העברת מידע, המרת מידע, עיגול מספרים, העברה בין בסיסים, חיבור, חיסור, כפל, חילוק, קבועים ידועים, פקודות לוגריתמיות וטריגונומטריות, בדיקות מיוחדות פקודות SIMD single-instruction multiple-data (SIMD) נועדו להאיץ פעולות מולטימדיה ותקשורת : data transfer, conversion, packed arithmetic, comparison, logical, shift and rotate & state management רק במעבדים התומכים בטכנולוגיה, בתוספת רגיסטרים מיוחדים ) MMX ועוד) פועלות על :Packed data הסוגים הרגילים באריזות של 128 64, ו- 256 ביטים 9