ערכתי לאחרונה בתאריך 05.10.03 בשעה 10:20 בברכה, BoMBoM
מה זה אסמבלר בכלל ? בטוח שמעתם את השם הזה פעם או פעמיים בחיים אז אני יסביר מה זה ולמה זה.
מה בכתבה ?
• הסבר קצר על אסמבלר
• בסיסי ספירה
• המרה מבינארי לדצימלי
• אוגרים
• פקודות
הסבר.
אסמבלר היא שפת תכנות אשר לוקחת פקודות מחשב פשוטות והופכת אותם לחבילות של ביטים אשר עובדים תחת אוגרים ומריצים את הפקודות שכתבתם בה בתור תוכנית.
אסמבלר היא שפת סף, היא לא שפה עלית כמו סי או ויז'ואל בייסיק./* הכוונה היא: C לדוגמה היא שפת תכנות הגיונית. אתם אומרים לה
printf
והיא מדפיסה משהו על המסך. לעומתה אסמבלר זה הדבר הכי קרוב לשפת מכונה (אחרי שפה בינארית כמובן) שאפשר לתכנת בו. אם תסתכלו על קוד של אסמבלי לא תבינו מיד מה הוא עושה, אלא תצטרכו לעקוב, לחשוב, להסתכל ולנסות להבין מה בדיוק דוחפים למחסנית ולמה כשעושים
push %eax
לדוגמה. בלאדי. */
נתחיל את כל הלמידה שלנו ממשהו פשוט:
בסיסי ספירה.
בינארי (בסיס 2) אוקטאלי (בסיס 8) דצימלי (בסיס 10) הקסדצימלי (בסיס 16)
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 --- 8 8
1001 --- 9 9
1010 --- 10 A
1011 --- 11 B
1100 --- 12 C
1101 --- 13 D
1110 --- 14 E
1111 --- 15 F
כמה דברים שכדאי לזכור !!!
1. בסיס בינארי מתאפיין רק בשני מספרים, 0 ואחד.
2. במספרים בינארי יש דבר שנקרא אפס מוביל, למשל אתה צריכים מילה בינארית למילת מחשב בת 7 אותיות אבל מספר הבינארי שלכם הוא 6 אותיות אז אתם יכולים להוסיף אפס משמאל והמחשב מתייחס אליו כמו ל 0 ואילו אם תוסיפו מצד שני, זה יהיה מספר אחר והמחשב לא יריץ את התוכנית הנכונה. דוגמא:
6 אותיות – 1101010 , 7 אותיות – 01101010, שימו לב לאפס האדום שהוספתי.
3. כל בסיס פרט לבינארי ימשיך את סדרת המספרים העולה עד למספר של הבסיס פחות אחד, דוגמא, בסיס 15 יהיה מספר 0-14. בסיס 99 יהיה מספרים 0-98.
4. הטבלה שלמעלה תעזור לכם להמיר מספר, אם אתם צריכים להמיר מספר 15 באוקטלי למספר בדצימלי אז מה עושים ?
לוקחים את 1 שזה 0001 ולוקחים את 5 שזה 0101 ומחברים, קיבלתם 000101010 ועכשיו עושים המרה למספר רגיל (דצימלי). והנה ההסבר איך להפוך מבינארי לעשרוני (דצימלי).
המרה מבינארי לדצימלי:
איך אני הופך מבינארי לעשרוני.
הסבר ודוגמא:
ניקח את המספר 00110011, בחישוב מהיר הוא מסמל את המספר 51.
אוקי איך עשיתי את זה.
הנה היא הטבלה של הבינארי – במחשבים.
1 2 4 8 16 32 64 128
נכניס את הבינארי מתחת.
1 1 0 0 1 1 0 0
עכשיו אם יש מתחת לספרה האמיתית 0 אז המספר שווה אפס אבל אם יש אחד אז הוא שווה כמה שכתוב מעל ה1.
למשל:
יש אחד מעל האחד אז זוכרים 1, יש אחד מעל ה 2, זוכרים עוד 2,
וכו' עד שמגיעים ל: 1+2+16+32 = 51.
ברור ? אני אתן לכם פה תרגילים או שתיים:
11001100 = ?
00000010 = ?
בראשון אמור לצאת 204.
בשני אמור לצאת 2.
אני מקווה שהבנתם אם לא תקראו שוב כי זה לא ממש קשה.
עכשיו איך הופכים מעשרוני לבינארי? זה קצת יותר מסובך אבל עדיין נכנס להגדרה של קל.
ניקל את המספר 143 ואז מה עושים ?
1 2 4 8 16 32 64 128
יאללה בוא נתחיל, משמאל לימין,
האם 143 נכנס בתיבה של 128, אם הוא גדול מ 128 זה אומר שכן, אז נרשום שם אחד.
עכשיו נשאר לנו 15 (143-128).
נמשיך, 15 נכנס ב 64, לא. נכתוב שם אפס, האם 15 נכנס ב 32, גם לא, נשאיר שם אפס.
15 לא נכנס ב – 16, אז נכתוב גם שם 0.
15 נכנס ב 8, כן אז נכתוב שם אחד ונשאר לנו 7 (15-8) .
7 נכנס ב 4, כן נכתוב אחד ונשאר לנו 3 (7-4)
3 נכנס ב שתיים, כן נכתוב שם אחד ונשאר לנו אחד (3-2).
ועכשיו נשאר אחד והוא מתאים בול לאחד בסוף אז גם שם נכתוב 1.
איזה בינארי יצא לנו ?
10001111
מקווה שהבנתם, אם לא, אז תחזרו על זה…
1 2 4 8 16 32 64 128
1 1 1 1 0 0 0 1
אוקי אז עכשיו תתרגלו את זה עד שתעשו את זה בלי דף נייר ובלי מחשבון (שזה הדרך הקלה).
** הנה שיטה שתעשה לכם חיים קלים, אם צריכים להפוך מספר מבסיס X (כל בסיס חוץ מבינארי) לבסיס דצימלי (עשרוני) אז קודם עושים המרה לבינארי לפי הטבלה שלמעלה ואז מבינארי לעשרוני, תאמינו לי הכי קל.
עכשיו… הייתי מעוניין להתחיל לדבר קצת על אוגרים.
אוגרים:
אוגרים הם בעצם תאי זיכרון בתוך המעבד, ישנם 4 אוגרים כלליים שבד"כ מתכנתים באסמבלר משתמשים בהם והם, Ax, Bx, Cx, Dx וישנו עוד אוגר IP אבל לא צריך אותו כרגע, נחזור אליו בעתיד.
כל אוגר הוא אוגר של 16 סיביות, שניתן לחלקו לשני חלקים, כל חלק 8 סיביות.
עכשיו מה הפרוש הפרקטי של כל אוגר :
Ax – accumulator
Bx – base
Cx – count
Dx – data
IP – instruction pointer
/* פירסינג יקירי, שכחת לציין מה תפקידו של כל אוגר…
ככה: AX משמש בד"כ לזכור ערכים. ביצעתם פעולה חשבונית? אחסנתם מספר? זה בד"כ יהיה מאוחסן באוגר הזה.
BX אומר לפי איזה בסיס לבצע חישובים. לא מעניין כרגע.
CX הוא מונה. אם יש לכם לופ ואתם צריכים מונה, תשתמשו באוגר הזה.
DX גם לאחסון ערכים.
IP זה אוגר מאוד מאוד חשוב. לא מכניסים בו ערכים. הוא משמש לציין איפה ההתחלה של התוכנית שלכם, ז"א מאיפה להתחיל לבצע את ההוראות.
את כל האוגרים האלה ועוד הרבה הרבה אחרים תראו בעזרת תוכנת
debug שבאה עם דוס. כדי ללמוד איך להשתמש בתוכנה, פנו ל reference בסוף הטקסט הזה. בלאדי. */
בואו נגיד שזהו אוגר ה Ax שלנו, אני יסביר איך הוא בנוי.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
האוגר שיותר למעלה, מראה לכם את AX במצב טבעי, כולל את כל 16 הביטים שלו ואילו האוגר שיותר למטה מחולק לשתיים, כל חלק 8 ביט כמו שכתבתי למעלה.
ניתן לך תרשים של כל האוגרים שנשתמש בהם:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Ax
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Bx
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Cx
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Dx
אני בטוח ששמתם לב שאמרתי שיש 16 ביטים בכל אוגר וכתוב רק 15, לאלה שלא הבינו למה, כמו שאמרתי למעלה, באסמבלר עושים את כל הסדרה פחות 1 (0 משומש כמו-כן).
אוקי, אני מקווה שעד לפה אתם עוקבים ועכשיו הייתי רוצה לעבור לפקודות.
אוקי עכשיו עוד משהו, כל אוגר שמחולק לשתיים יקרא כך
Ax - | AL | AH
AH מסמל אוגר A–high ואילו AL מסמל אוגר A–low.
ככה כל אחד ואחד מהם, מ AX עד ל DX.
AX שווה 16 סיביות, ואילו AL שווה 8 סיביות, חשוב מאוד לזכור את זה, קצת תרגול:
אני רושם אוגר או חלק מאוגר ואתם רושמים כמה סיביות יש בתוכו.
AX = ?
BL = ?
AL = ?
CH = ?
DL = ?
(תשובות בסדר יורד, 16,8,8,8,8,)
(* רמז, הראשון זה 16.)
פקודות.
אני אתן פקודה, איך כותבים אותה ומה פירוש הפקודה.
לא לשכוח, יש פסיק אחרי כל שם של אוגר ולא לשכוח נקודה פסיק בסוף הפקודה (;).
ברירת המחדל של הקומפלייר היא שונה בכל תוכנה ותוכנה יש כאלה שאצלם ברירת המחדל היא 16, אז כל מספר שתכניס היא תחשיב אותו בבסיס 16 וכדומה, אז בואו נגיד שכרגע ברירת המחדל שלנו היא 10, בסיס דצימלי, עשרוני.
הדוגמא תהיה מסומנת באדום.
Mov – העתקה של ערך
Mov Op1, Op2; - צורה
Mov Ax, 123; (Ax123)
Add – פעולת חיבור בין שני ערכים
Add Op1, Op2; - צורה
Mov Ax, 12;
Mov Bx, 12;
Add Ax, Bx; (Ax 24)
Sub – פעולת חיסור בין שני ערכים
Sub Op1, Op2; - צורה
Mov Ax, 12;
Mov Bx, 12;
Sub Ax, Bx; (Ax 0)
אני חושב שזה מספיק בינתיים, עכשיו אני אתן לכם כמה תרגילים , תעבדו עליהם, תיישמו את מה שלמדתם וניפגש בכתבה הבאה שלי, עד אז, יבוא שלום על ישראל.
האוגר AX קולט ערך 12, האוגר BX קולט ערך 15, האוגר CX קולט ערך 18 ואז עושים חשבון בין כולם, אוגר AX יהיה שווה 45.
אם לא תצליחו אז אני מוסיף בסוף העמוד את התשובה הנכונה:
להתראות ועד לפעם הבאה, שמרו על עצמכם, Pirsing
///////////////////
Mov ax, 12;
Mov bx, 15;
Mov cx, 18;
Add Ax, Bx;
Add Ax, Cx;
///////////////////
מי שרוצה יכול להוריד שתי תוכנות לאסמבלר
FSD
Turboassembly
