מדריך | אסמבלי- קצת על בינארי וHex (שאני לא חובב בלשון המעטה.)
-
# קצת על בינארי והקס.
לפני שנמשיך קצת על : בינארי והקסדצימלי.
למה בינארי?
לבני אדם יש עשר אצבעות, אז איכשהו יצא שאנחנו סופרים בבסיס 10.
למחשב, לעומת זאת, אין אצבעות. יש לו מיליארדי טרנזיסטורים, שאפשר לחשוב עליהם בצורה מאוד מפושטת כמו מפסקים זעירים שיכולים להיות במצב כזה או במצב אחר.דלוק או כבוי.
1או0.וזהו.
לכן המידע הדיגיטלי במחשב מיוצג בבסיס 2, שנקרא בינארי (Binary).
אנחנו רגילים לכתוב:
0 1 2 3 4 5 6 7 8 9כי אנחנו עובדים בבסיס 10.
בבינארי יש רק:
0 1לכן המספר:
10בבסיס 2 הוא בעצם 2 בבסיס 10.
וזה מזכיר את המשפט (@בנימין-מחשבים )
"יש 10 סוגי אנשים: אלה שמבינים בינארית ואלה שלא."
אלה שמבינים בינארית יודעים ש־
10זה 2.ואלה שלא... מחכים ל־9 הבאים. שלא יבואו.

Bit
חשוב לזכור!
Bit הוא יחידת המידע הקטנה ביותר שיש במחשב
ביט אחד יכול להיות:
0או:
1כלומר יש לו שתי אפשרויות בלבד.
אם יש ארבעה ביטים:
1010יש לנו ארבעה ביטים נפרדים:
1 0 1 0כל אחד מהם יכול להיות
0או1.ואם יש שמונה ביטים:
10101100יש לנו Byte אחד, כלומר 8 ביטים.
1 0 1 0 1 1 0 0 <------ 8 ------->זה חשוב כי בהמשך באסמבלי תפגשו כל הזמן במונחים כמו:
Bit Byte = 8 bits Word = 16 bits DWORD = 32 bits QWORD = 64 bits
אז למה לא בינארי?
כי זה סיוט לבני אנוש...
נניח השורה הבאה.
1101111010101101זה בינארי אבל לא שקריא לבני אדם.
בקוד מכונה ובזיכרון אנחנו יכולים להיתקל ברצפים הרבה יותר ארוכים.פה נכנס Hexadecimal, או בקיצור Hex.
הקס - בסיסי 16 בספירה
הקסדצימלי הוא פשוט בסיס 16.
במקום עשר ספרות כמו בבסיס 10:
0 1 2 3 4 5 6 7 8 9יש לנו 16 אפשרויות:
0 1 2 3 4 5 6 7 8 9 A B C D E Fהאותיות מייצגות את המספרים:
A = 10 B = 11 C = 12 D = 13 E = 14 F = 15למה בסיס 16?
עיקרון פשוט ומאוד שימושי:
16 = 2⁴
כל ספרה אחת בהקס מייצגת 4 ביטים.
לדוגמה:
0000 = 0 0001 = 1 0010 = 2 0011 = 3 0100 = 4 0101 = 5 0110 = 6 0111 = 7 1000 = 8 1001 = 9 1010 = A 1011 = B 1100 = C 1101 = D 1110 = E 1111 = Fבמקום לכתוב:
1101111010101101אפשר לחלק לארבע.
1101 1110 1010 1101ולהמיר כל קבוצה לספרת Hex:
D E A Dולכן:
1101111010101101₂ = DEAD₁₆אותו מידע בדיוק.
צורה יותר קריאה (אני ממש לא מסכים
)
איך זה נראה באסמבלי?
באסמבלי, כשתראו מספר Hex, בדרך כלל תראו לפניו
0x.לדוגמה:
mov rax, 0xDEADה־
0xאומר:"המספר כתוב בהקסדצימלי."
כלומר:
0xDEADדרך אחרת לכתוב אותו ערך בבינארי:
1101 1110 1010 1101או בעשרוני:
57005שלושת הייצוגים מתארים את אותו ערך:
57005₁₀ = DEAD₁₆ = 1101111010101101₂לדוגמה:
mov rax, 0xFFאו:
mov rax, 255
מה שונה בהקס?
אבל:
בבסיס 16 אנחנו צריכים 16 ספרות, אבל יש לנו רק:
0-9פשוט ממשיכים באותיות:
A = 10 B = 11 C = 12 D = 13 E = 14 F = 15ולכן אפשר לראות דברים כמו:
0xDEAD 0xBEEF 0xCAFEאחד המפורסמים הוא:
0xDEADBEEFלסיכום:
בזיכרון של המחשב אין באמת "Hex".
Hex הוא דרך שבה אנחנו כותבים ומציגים מידע.
גם "בינארי" הוא דרך הייצוג שלנו למידע הדיגיטלי.
בפועל, בזיכרון יש מצבים פיזיקליים שאנחנו מייצגים כ־0ו־1.
לכן אם בזיכרון יש למשל:10101100אפשר להציג את אותם 8 ביטים כ:
10101100 ← בינארי AC ← Hex 172 ← עשרוניזה לא אומר שיש בזיכרון שלושה דברים שונים.
יש אותו מידע, ואנחנו מסתכלים עליו בשלוש דרכים
זה מתחבר למה שאמרתי קודם.
הביטים עצמם לא אומרים לנו מה הם "אמורים להיות".
אותו רצף ביטים יכול להיות מספר, חלק מטקסט, נתונים, או הוראות מכונה הכול באופן שבו מפרשים אותו. (וזה עוד עניין וצ"ע)
אז למה Hex?
כי כשעובדים בלואו לבל נתעסק המון בבינארי
אבל לכתוב בינארי זה סיוט:
11111111100000001111010110101010ב־Hex זה הופך ל:
0xFFF0F5AAהרבה יותר קצר, הרבה יותר קל לראות ולזהות מבנים. (עובדים עם זה המון..)
בגלל שכל ספרת Hex מייצגת בדיוק 4 ביטים, אפשר לעבור מבינארי לHex בצורה מאוד קלה.
לדוגמה:
1011 0010 1111 0100הופך ל:
B 2 F 4כלומר:
0xB2F4בעז"ה זה היה קצת חשבון @אלישי אשמח להצטרף לקבוצת תכנות זה יהיה יותר מסודר..
בעז"ה המשך יבוא (גילוי נאות: AI ערך פה ושם קצת אך לא כתב בעיקר פיסק)
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות