המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

מבוסס על שקפים מאת יאן ציטרין

מצגות קשורות


מצגת בנושא: "מבוסס על שקפים מאת יאן ציטרין"— תמליל מצגת:

1 מבוסס על שקפים מאת יאן ציטרין
תרגול 6 הסתעפויות מבוסס על שקפים מאת יאן ציטרין

2 קפיצות לא מותנות Unconditional Branch
br label PC לאחר ה- fetch של פקודת ה- branch br label pc הקפיצה מתבצעת תמיד, בלי שום תנאי (מכאן השם) PC לאחר הביצוע של פקודת ה-branch label © את"ם - תרגול מס' 6

3 Branch לא מותנה - קידוד 000400 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x 1 opcode offset  offset  ניתן לקפוץ קדימה או אחורה ל – offset מילים כיצד נקפוץ מעבר למרחק הזה? תשובה: אפשר להציג את jmp, או פשוט להציע להם להשתמש ב-mov #label, pc octal base code of br: 000400 © את"ם - תרגול מס' 6

4 + Base Code base code בבית הנמוך תמיד מכיל אפסים 1
1 + Offset - בבית הגבוה תמיד מכיל אפסים x coding : base code + offset x 1 © את"ם - תרגול מס' 6

5 קשר בין offset לכתובת היעד
target address = PC after br fetching 2 * offset + PC after br fetching - target address offset = 2 © את"ם - תרגול מס' 6

6 Branch לא מותנה (דוגמה)
begin: … 10148 ... br begin 10528 pc 10548 1 ה-basecode וה-offset מתערבבים ביצוג אוקטאלי 7 6 ובאוקטלי © את"ם - תרגול מס' 6

7 קפיצות מותנות Conditional Branch
בתוכנות אמיתיות נרצה לבצע קטעי קוד ספציפיים רק כאשר תנאים מסוימים מתקיימים לשם כך ניתן להשתמש בקפיצות מותנות הקפיצות הללו תלויות בערכים של הדגלים ב-PSW 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 N Z V C הדגלים האלה מקבלים ערכים "0" או "1" כתוצאה מביצוע פקודות של PDP-11 (תזכרו asl, asr ) Negative Carry out Zero oVerflow © את"ם - תרגול מס' 6

8 Branch -ים מותנים (המשך)
קפיצות מותנות מתבצעות בד"כ מייד אחרי פקודה cmp op1 , op2 מבצעים op1 _- op2 ( בניגוד לפקודה sub) התוצאה של החיסור לא נשמרת בשום מקום, אלא לפי ערכה נקבעים הערכים של הדגלים ה- branch שמופיע מייד אחרי ה- cmp הזה "מסתכל" על הדגל Z וכתוצאה מכך מתבצעת קפיצה cmp #5, #5 Z = 1 beq A Branch if EQual © את"ם - תרגול מס' 6

9 Branch -ים מותנים - קידוד
לכל פקודות branch מותנות אותו אופן קידוד כמו ל- br בלתי מותנה ההבדל היחיד הוא ב-base code לכן חישוב כתובת היעד מתבצע לפי אותה נוסחה שראינו בתחילת השיעור. © את"ם - תרגול מס' 6

10 1101 ? 0011 איזה מהמספרים הבאים גדול יותר? תשובה: תלוי.
© את"ם - תרגול מס' 6

11 משפחות שונות שלBranch -ים מותנים
כבר ראינו שיטות שונות לייצג מספרים: Unsigned(רק עבור מספרים חיוביים) 2’s Complement ראינו שחשוב מאוד לדעת באיזו שיטה אנחנו עובדים. הבחירה בסוג הייצוג תלויה בנתונים והיא באחריות המתכנת (כלומר, באחריותכם!) © את"ם - תרגול מס' 6

12 Signed Conditional Branches
Base Code פקודה תנאי לקפיצה תנאי לקפיצה אחרי פקודה cmp op1, op2 דגלים 002000 bge Greater than or equal to (zero) op1  op2 N xor V = 0 002400 blt Less than (zero) op1  op2 N xor V = 1 003000 bgt Greater than (zero) op1 > op2 Z  (N xor V) = 0 003400 ble Less than or equal to (zero) op1  op2 Z  (N xor V) = 1 לדגלים N ו-V יש משמעות רק כשעובדים עם מספרים בעלי סימן. לכן הפקודות הללו בודקות אותם. © את"ם - תרגול מס' 6

13 Unsigned Conditional Branches
Base Code פקודה תנאי לקפיצה תנאי לקפיצה אחרי פקודה cmp op1, op2 דגלים 101000 bhi Higher op1 > op2 C  Z = 0 101400 blos Lower or same op1  op2 C  Z = 1 103000 bhis Higher or same op1  op2 C = 0 103400 blo Lower op1  op2 C = 1 שימו לב: הפקודות הללו בודקות רק את הדגלים C ו- Z. © את"ם - תרגול מס' 6

14 Branch -ים מותנים המתייחסים לדגל בודד
Base Code פקודה תנאי לקפיצה תנאי לקפיצה אחרי פקודה cmp op1, op2 דגלים 001000 bne Not equal to 0 op1  op2 Z = 0 001400 beq Equal to 0 op1 = op2 Z = 1 100000 bpl Plus N = 0 100400 bmi Minus N = 1 © את"ם - תרגול מס' 6

15 Branch -ים מותנים המתייחסים לדגל בודד (המשך)
Base Code פקודה תנאי לקפיצה דגלים 102000 bvc Overflow is clear V = 0 102400 bvs Overflow is set V = 1 103000 bcc Carry clear C = 0 103400 bcs Carry set C = 1 © את"ם - תרגול מס' 6

16 השפעת הדגלים לביצוע קפיצות – דוגמה עבור bge
תאור המצב V N האם קופצים op1  op2 V = 0  התוצאה נכונה N = 0  התוצאה חיובית Yes op1 < op2 N = 1  התוצאה שלילת 1 No V = 1  התוצאה שגויה N = 0  התוצאה חיובית op1 > op2 Not”” because N=1 © את"ם - תרגול מס' 6

17 C & V under Subtraction כבר ראינו את משמעות של הדגלים C ו-V עבור פעולת החיבור. כעת נלמד מה משמעותם כשמבצעים פעולת החיסור. V = 1, אם האופרנדים הם בעלי סימן הפוך וסימן התוצאה הוא כמו של האופרנד השני 0, אחרת C = 1, אם כדי לבצע פעולה חייבים לבצע השאלה (borrow) ל-MSB 0, אחרת © את"ם - תרגול מס' 6

18 C & V under Subtraction דוגמה 1
“borrow” C = 1 C cmp #7, #-7 1 - N Z V C 1 1 1 1 1 1 סימן התוצאה הוא כמו סימן האופרנד השני V = 1 התוצאה שלילית N = 1 התוצאה אינה 0 Z = 0 פקודה bhis bpl bge תנאי לבדיקה C= 0 N = 0 N = V האם מתבצעת קפיצה No No Yes © את"ם - תרגול מס' 6

19 C & V under Subtraction דוגמה 2
“borrow” C = 1 cmp #3, #-3 C 1 - N Z V C 1 1 1 סימן התוצאה אינו כמו סימן האופרנד השני V = 0 התוצאה חיובית N = 0 התוצאה אינה 0 Z = 0 פקודה bhis bpl bge תנאי לבדיקה C = 0 N = 0 N = V האם מתבצעת קפיצה No Yes Yes © את"ם - תרגול מס' 6

20 C & V under Subtraction דוגמה 3
אין “borrow” C = 0 cmp #5, #3 1 - N Z V C 1 סימני האופרנדים זהים V = 0 התוצאה חיובית N = 0 התוצאה אינה 0 Z = 0 פקודה bhis bpl bge תנאי לבדיקה C = 0 N = 0 N = V האם מתבצעת קפיצה Yes Yes Yes © את"ם - תרגול מס' 6

21 SOB (Subtract One and Branch)
משתמשים בלולאות לא קיים בכל הדגמים של PDP-11 sob rn, A dec rn bne A דוגמא: mov #3, r2 loop: ; the value of r2 ; should not be ; changed in ; the loop body sob r2, loop loop body הלולאה הזאת תתבצע 3 פעמים © את"ם - תרגול מס' 6

22 SOB - קידוד (PC)(PC) – 2*X הערות חשובות (מאד): שיטת המעון של R תמיד 0
בינארי 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 r x 1 7 X R אוקטלי opcode register positive unsigned offset הערות חשובות (מאד): שיטת המעון של R תמיד 0 הקפיצה תמיד אחורנית (PC)(PC) – 2*X © את"ם - תרגול מס' 6

23 קפיצות לא מותנות ע"י פקודת jmp
jmp op מאפשרת קפיצות למרחק גדול הפקודה קופצת לכתובת האפקטיבית של האופרנד jmp label pc לכתובת הרשומה בR0 לאן נקפוץ בפקודות הבאות? label jmp (r0) jmp r0 jmp 3000 jmp #3000 פקודה לא חוקית. אין לאופרנד כתובת אפקטיבית לכתובת 3000 למילה הבאה אחרי פקודת jmp. ערכה – בדרך כלל זו טעות. © את"ם - תרגול מס' 6

24 חידות – דוגמאות ממבחן נתונה התוכנית הבאה:
CLR R0 LOOP: DEC R0 BNE LOOP HALT כמה פעמים מתבצעת הפקודה DEC ? 215 פעמים 216 פעמים פעמים פעמים אינסוף פעמים פעם אחת בלבד – = – = …… – = 216 פעמים © את"ם - תרגול מס' 6

25 שימו לב לשאלה – לא שואלים כמה פעמים BHIS תגרום לקפיצה
חידות – דוגמאות ממבחן נתונה התוכנית הבאה: MOV #3, R0 LOOP: ADD #2, R0 BHIS LOOP HALT שימו לב לשאלה – לא שואלים כמה פעמים BHIS תגרום לקפיצה כמה פעמים מתבצעת הפקודה BHIS ? פעמים 15 פעמים פעמים 14 פעמים פעמים אף אחת מהנ"ל 3, 5, 7, 11, 13, … , רק בהוספה הבאה C=1 BHIS קופצת כאשר C=0. הפקודה ADD תתבצע 215 – 2 פעמים ועוד פעם אחת כאשר BHIS לא גורמת לקפיצה. © את"ם - תרגול מס' 6

26 אופן פעולה של ROR ROR dst : dst C פעולה ROR (Rotate Right) מבצעת הזזה מעגלית של האופרנד ביט אחד ימינה כאשר דגל Carry הינו חלק מהמעגל LSB של האופרנד מועבר לדגל C של ה-PSW הערך הקודם של ה-Carry מועבר ל-MSB של האופרנד תוצאת פעולת ROR תלויה בדגל Carry, כלומר תלויה בפקודה שהתבצעה לפניה. הערה: באופן דומה עובדת הפקודה ROL (Rotate Left) © את"ם - תרגול מס' 6

27 R0 גדל ב-1 בזכות פעולה על בית Branch Lower קופצת אם C = 1
חידות – דוגמאות ממבחן נתונה התוכנית הבאה: MOV #177777, R0 TSTB (R0)+ LOOP: DEC R0 ROR R0 BLO LOOP HALT R0 גדל ב-1 בזכות פעולה על בית DEC אינה משנה דגל C Branch Lower קופצת אם C = 1 כמה פעמים מתבצעת הפקודה ROR ? פעם אחת 15 פעמים פעמים אינסוף פעמים פעמיים אף אחת מהנ"ל אחרי TSTB בתוך R0: (C=0) אחרי DEC ראשון בתוך R0: (C אינו מושפע) אחרי ROR ראשון בתוך R0: (C=1) אחרי DEC שני בתוך R0: (C אינו מושפע) אחרי ROR שני בתוך R0: (C=0) © את"ם - תרגול מס' 6


הורד את "ppt "מבוסס על שקפים מאת יאן ציטרין

מצגות קשורות


מודעות Google