הזזות בינאריות ועיבוד ביטים
הוצג| English | משמעות |
|---|---|
| bit/bɪt/ | ביט |
| mask/mæsk/ | מסקר |
| logical shift/ˈlɒdʒɪkl ʃɪft/ | הזזה לוגית |
| sign bit/saɪn bɪt/ | סימן ביט |
| arithmetic right shift/ˌærɪθˈmetɪk raɪt ʃɪft/ | הזזה ימינה אריתמטית |
| cyclic shift/ˈsaɪklɪk ʃɪft/ | הזזה מחזורית |
כפל במכשיר שאינו יכול לבצע כפל
- המעבד ב-Game Boy 1989 לא כלל הוראת כפל כלל. כל תוצאה, כל קואורדינציה שדרשה הכפלה, הוכפלה על ידי הזזת הביטים שלה מקום אחד שמאלה.
- הזזה לוקחת מחזור שעון אחד. כפל הבנוי מהזזות וחיסורים הוא איך המשחקים הללו רצו על כמה קילובייטים וכמה עשרות של מיליווט.
- אותם טריקים שולטים בחוטים יחידים במכשיר מובנה: ביט אחד של רשומה לכל חיישן או למפעיל, שנבדק ומוגדר באמצעות מסכה.
- שיעור זה עוסק בשלושת סוגי ההזזה וארבע פעולות המסכה, בהוראות הבחינה עצמן.
הזזות לוגיות
- הזזה לוגית מזיזה כל ביט שמאלה או ימינה בכמה מקומות וממלאה את המיקומים הנפטרים ב-0.
LSL #1מזיז את הביטים שמאלה ו-0 נכנס מימין: עבור מספר ללא סימן זה × 2.LSR #1מזיז אותם ימינה ו-0 נכנס משמאל: מספר שלם ÷ 2.- הזזה ב-$n$ מקומות כופלת או מחלקת ב-$2^{n}$.
00001011(11) לאחרLSL #1הוא00010110(22); לאחרLSR #1הוא00000101(5, השארית אבדה).

הזזה לוגית שמאלה (× 2), לוגית ימינה (÷ 2) ואריתמטית ימינה (שומרת על סימן המספר)
הזזה ומסיכת ביטים של ביט
בחר אופרטור וצפה בכל ביט תוצאה. הזזה שמאלית (<<) moves every bit up one place (×2); a right shift (>>) מזיזה אותם כלפי מטה (÷2); AND עם מסכה מבטל את הביטים שאינם רצויים.
הערך 8-ביט 00001011 (11) מוזז שמאלה ב-1 (LSL #1). מהו הערך העשרוני החדש?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
הזזה שמאלה ב-1 כופלת ב-2: $11 \times 2 = 22$ (00010110).
הזזה שמאלה של מספר ללא סימן ב-3 מקומות כופלת אותו במספר מה?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
הזזה ב-$n$ מקומות כופלת ב-$2^n$, ולכן ב-3 מקומות זהו $2^3 = 8$.
דוגמה פתורה: מתי × 4 מפסיק להיות נכון
- ביטים שנזזו החוצה מהסוף אובדנים, ולכן הכפל נכון רק כל עוד הם היו אפסים.
LSL #2על בייט בשלבים של שניים ⟨11001010⟩ נותן00101000. שני ה-1ים שהתעלמו משמאל אבדו, סימן המסור התחלף, והתוצאה אינה ארבע פעמים המקורי.LSL #2על00001011(11) נותן00101100(44), שזה נכון, כי אבדו רק אפסים.- המבחן מבקש את שניהם: הדפוס הנזוז, ותגובה אם הערך עדיין נכון.
הזזה אריתמטית ימינה
- הזזה לוגית ימינה רגילה מציבה 0 בביט העליון, מה שיפוך מספר שלבים של שניים שלילי לחיובי.
- הזזה אריתמטית ימינה מעתיקה את סימן המספר לכל מקום שנוצר, כך שמספר שלילי נשאר שלילי וההזזה עדיין מחלקת ב-2.
10011110מוזז אריתמטית ימינה ב-3 מקומות הוא11110011;01011100נותן00001011.

הזזה לוגית ואריתמטית ימינה באותו בייט: הבדל רק בביט הנכנס
הזזה ימינית אריתמטית שונה מהזזה ימינית לוגית כי היא:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הוא שומר על ביט הסימן, ולכן חלוקה של מספר חתום שלילי בחזקה של 2 משאירה אותו שלילי.
הזזה ימינית לוגית תמיד מניחה 0 בביט העליון, ולכן היא יכולה להפוך מספר חתום שלילי למספר חיובי.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
זו בדיוק הסיבה שחלוקה חתומה זקוקה להזזה ימינית אריתמטית, שמעתיקה את ביט הסימן במקום זאת.
הזזה ימינית אריתמטית של 10011110 ב-3 מקומות נותנת את הדפוס ה-8-ביטי ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
שלושת המקומות הפנויים בצד שמאל ממולאים בעות של ביט הסימן, 1, ושלושת הביטים הימניים ביותר 110 נופלים.
הזזות מחזוריות
- הזזה מחזורית, או סיבוב, מחזירה את הביט שנופל מהקצה האחד חזרה לתוך הקצה השני, כך שאף ביט לא אבוד.
- הזזה שמאלה מחזורית ב-1 של
10000110נותנת00001101: ה-1 המוביל מופיע שוב מימין. - הזזות לוגיות ממולאות באפסים, אריתמטיות ממולאות בסימן המספר, ומחזוריות ממולאות בביט שהתעלם. זוהי ההבדל המלא בין השלושה.
ביצוע סזירה שמאלית מחזורית של 1 מקומות על 10000110. מה התוצאה?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ה-1 המוביל עוזב בצד שמאל ונכנס מחדש בצד ימין, כך שאף ביט לא אבוד. 00001100 היה ההזזה הלוגית.
דוגמה פתורה: 240 או מינוס 16?
- קח
11110000. אם נקרא כמספר ללא סימן הוא 240; אם נקרא בשלימה לשניים הוא −16. LSR #1מכניס 0 ומניב01111000= 120, החצי הנכון של 240.ASR #1משחזר את סימן המספר ומספק11111000= −8, החצי הנכון של −16.- אף אחד מהם אינו שגוי. כל אחד מחלק לערך תחת קריאה מסוימת, ולכן למעבד יש צורך בשתי הפקודות הללו.
אילו טענות לגבי הבייט 11110000 הן נכונות? סמן את כולם החלופות הרלוונטיות.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
שתי התוצאות נבדלות רק בביט שנכנס מצד שמאל: 0 עבור ההזזה הלוגית, ביט הסימן עבור ההזזה האריתמטית.
מסכת ביטים
- התקנים מובנים משתמשים לעיתים קרובות בביט אחד של רשמה לכל אות. מסקה היא דפוס המשולב עם הרשמה כך שרק הביט הנבחר ישתנה.
- הפעל את ביט $n$:
ORעם מסכה שיש בה 1 במיקום $n$. נטו את ביט $n$:ANDעם מסכה שיש בה 0 במקום זה ו-1 בכל מקום אחר. - החלף את ביט $n$:
XORעם מסכה שיש בה 1 במקום זה. בדוק את ביט $n$:ANDעם המסקה הזו, ואזCMP #0: אי-שוויון פירושו שהביט הופעל.

הפעלה עם OR, ניקוי עם AND, החלפה עם XOR, כל אחד באמצעות מסכה
התאם כל פעולת ביט לפועל ביט (ומסכת) מבצע אותה.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
OR קובע, AND מבטל, XOR מחליף, ו-AND + בדיקה של ערך לא-אפסי קוראים ביט — ארבע פעולות המסכה.
כדי לקבוע ביט ספציפי ל-1, משלבים את הרגיסטר עם מסכה באמצעות:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
OR עם מסכה שבה הביט = 1 מחייב את הביט להיות 1 ומשאיר שאר הביטים ללא שינוי.
דוגמה פתורה: הפקודות על באייט אחד
- האצבעון (ACC) מכיל
10101100. המסקה יכולה להיות כתובה כ#nעשרוני,Bnבינארי או&nהדקסטרואלי. AND B00001111נותן00001100: רק ארבעת הביטים הנמוכים נשארים.OR #1נותן10101101: הביט הפחות משמעותי מופעל ואין שינוי אחר.XOR &FFנותן01010011: כל ביט הפוך. לאחר מכןAND B00001000ובדיקתCMP #0את ביט 3; התוצאה00001000אינה אפס, ולכן ביט 3 היה מופעל.LSL #2נותן10110000, מאבד את שני הביטים העליונים;LSR #3נותן00010101.
ההוראה שקובעת את הביט הפחות משמעותיות של ה-ACC ל-1 ומשאירה שאר הביטים ללא שינוי היא OR ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
OR עם מסכה שיש בה 1 רק במקום האחרון. העשרוני #1, הבין-ראשי B00000001 וההקסידאמי &1 הם אותה מסכה.
סדרו את השלבים לבדיקה האם ביט 3 ב-ACC קבוע.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
מסכה, השוואה, קפיצה. ה-AND משאיר או 00001000 או 00000000, וההשוואה לאפס מבדילה ביניהן.
ניטור ושליטה, ביט אחד אחר ביט
- במכשיר ניטור, ביט אחד ברשמה לכל חיישן אומר שפקודה אחת
ANDלבדוק האם חיישן ספציפי מופעל. - במכשיר שליטה, פקודה אחת
ORמפעילה את ביט השליטה של מערך מבצע ללא הפרעה לאחרים, ופקודה אחתANDמכבה אותו. - זה מהיר, משתמש בכמעט אין זיכרון, ובאייט אחד מחזיק שמונה מצבי on/off עצמאיים. זהו ה"למה" שמבחן שואל.
סימונים נופלים מהיד
- הזזה שמאלית היא × 2 לכל מקום רק כשהביטים שנופלים הם אפסים. ציין זאת כאשר 1 מאבד.
- הזזה לוגית ימינה מביאה 0; הזזה אריתמטית ימינה מעתיקה את סימן המספר. יש לבחור בהתאם לכך האם המספר מסומן (signed).
- כדי לנקות ביט, המסכה צריכה 0 בביט זה ו-1s בכל מקום אחר. מסכה של כולו אפסים נקאת את כל הרגיסטר.
XORמשנה מצב; הוא אינו קובע. כדי לקבוע השתמש בOR, כדי לבדוק השתמש בANDוהשווה לאפס.
הבנתך מושלמת
- הזזה לוגית ממלאת ב-0: שמאלה × 2 לכל מקום, ימינה 2, ו-1 שהאבדו מבטלים את האריתמטיקה.
- הזזת ימנית אריתמטית מעתיקה את סימן המספר; הזזה מחזורית עוטפת את הביט סביב
- מסכות: OR קובעת · AND מנקה · XOR משנה מצב · AND ולאחר כך CMP #0 בודק
- ביט אחד לכל חיישן או מערך הפעלה הופכים ניטור ושליטה מהירים ומינימליים; מסכות נכתבות ב
#n,Bnאו&n