הורד מצגת
המצגת נטענת. אנא המתן
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
מצגות קשורות
© 2024 SlidePlayer.co.il Inc.
All rights reserved.