08/09/2004 00:19:26
11010010110
מתחילים ללמד אותנו אסמבלר בבצפר (מגמת אלקטרוניקה)
אני ישים לפה תחומר (גראס חחח) הנלמד בכיתה
אם תתנהגו יפה בסמסטר הבא נלמד סי
אסמבלר האסמבלר הזה זה של 8086/8088 (XT)
- - - - שיעור 1 - - - - מבנה המחשב
במחשב יש מעבד, זיכרון ועוד כ מיני שטויות מסביב (כרטיסים עכברים דיסקים וכו) כל אלה מקושרים ביניהם ע"י 3 פסים של מידע בינארי
פס נתונים Data Bus - מעביר נתונים בין חלקים במחשב פס כתובות Address Bus - מעביר את הכתובות (של זיכרון וכו’) בין חלקים במחשב פס בקרה - Control Bus - מבקר על פעולת החלקים של המחשב
מבנה המעבד
במעבד הזה (שהשתמשו איתו לפני +- 20 שנה) יש את החלקים:
IP - Interaction pointer - זה לא "168.192.45.2" אלא מצביע שמבקר על מקום העברת הנתונים במעבד אוגרים (לא העכברים האלה) - 4 "לוקרים" שבהם אפשר לאחסן מידע בתוך המעבד - בהם נמצאים כל נהתונים שהמעבד עובד איתם אחשו האוגרים נקראים A, B, C, D. כל אוגר מכיל 16 ביטים ואפשר לחלק כל אחד ל2 חלקים זהים של 8 ביטים (כמו המדף שיש בלוקר) - ואז הם נקראים Ah, Al, Bh, Bl וכו’ - H זה HIGH כלומר הביטים שיהיו ה"גדולים" אם א מחלקים תאוגר וLOW - הנמוכים כימט לכל אוגר יש תפקיד מסויים למשל B יכול גם להצביע על כתבות בזיכרון וכו’ ALU - יחידה מתמטית לוגית - זה ה"מחשבון" שעושה פעולות על תוכן האוגרים Flags - דגלים (נתייחס אליהם בעתיד הרחוק) יחידת בקרה - השוטר של המערכת
שיעורי בית - למי שיש מחשב פתוח יכול להסתכל על הלוח אם (בדרך כלל רואים טוב מאחורה) - יש אזור שלם של חוטים מקבילים ש"יורדים" דרך כל החיבורים של הכרטיסים - זה חלק מהקווים של ה Data Bus & Address Bus & Control Bus .
למנהל - לא לנעול את הנושא כי אנלא הולך להחזיק פה נושא אחד ענק שתוקע תמחשב כשמנסים לגלול אותו (במידת האפשר גם לא למחוק)
08/09/2004 22:42:46
11010010110
- - - - שיעור 2 - - - - פקודות העברה Mov
פקודת Mov מעבירה מידע בין אוגרים במעבד או בין אוגר וכתובת זיכרון (מה שנמצא במקום שאליו מעתיקים נמחק והמידע החדש נכתב במקום, המידע במקור שממנו מעתיקים נשאר).
דוגמה: Mov al, ah מעתיקה את המידע של ah ל- al Mov al, 5 עושה שהמידע בal ייה 5 (בבינארי 00000101) Mov al, ch עושה שהמידע בal ייה c (בhex) כלומר 12 בעשרוני (או 00001100 בינארי) Mov [bl], al מעתיקה את המידע שיש בal לכתובת בזיכרון שעליה מצביע bl - סתכלו פה למטה ב"Bx"
סימון הפקודות בתרשימים mov al, bl bl -> al
וכו’
שימוש ב- Bx בתור מצביע לכתובת בזיכרון Bx (האוגר B כשהוא לא מחולק ל- bh/bl) יכול לשמש כמו מצביע לכתובת זיכרון בשביל זה קודם נכתוב את הכתובת לתוך Bx בבסיס 16 (hex) Mov bx, 000h ואז נשתמש איתו בתור מצביע Mov [bx], al ואז מה שהי בAl מועתק לזיכרון בכתובת שהמספר שלה רשום בBx
- - אבל - - Mov bx, al זה לא אותו דבר (בגלל ה- []) ומה שיצא זה העתקה של האוגר al לאוגר bx.
- - - - שיעור 3 - - - - פעולות חשבון : חיבור וחיסור
הגדלת המספר באוגר ב- 1 Inc al
הקטנת המספר באוגר ב- 1 Dec al
חיבור מספרים Add ah, al מחשב כמה זה ah+al וכותב תתוצאה בah
חיסור מספרים Sub ah, al מחשב כמה זה ah-al וכותב תתוצאה בah
אפשר גם לכתוב דברים כמו
Sub ah, 2 (זה עושה ah-2) וכו’
-> נראה לי ש Sub 2,ah לא יעבוד, שיעורי בית : תחשבו למה
08/09/2004 23:15:11
11010010110
- - - - שיעור 4 - - - - התוכנה הראשונה שלי!!!
לפעמים המחשב עלול להיתקע כשאתם מריצים תתוכניות שלכם זה קורה אם אתם מכניסים מידע משלכםלכתובת זיכרון שנמצאת בשימוש עם תוכנה אחרת. זה לא הורס תמחשב
תיכנסו לדוס start - run - command בשביל שהדוס ייה על כל המסך תעשו Alt+Enter
תכתבו Debug MyApp.com אל תיתנו לתוכנית שלכם שם של יותר מ- 8 אותיות באורך או עם רווחים וכו’
ייה הודעת שגיאה File Not Found זה הברכה של הDebug אל תיקחו את זה ללב
אחשו במקום ה<\:C יש לכם _- המינוס זה השורת פקודה של הDEBUG
תכתבו a 100 ותעשו Enter זה נותן לכם לכתוב תוכנית באורך של עד 100 פקודות (אל תתקמצנו, תשאירו את זה 100) - מפנה לה מקום וכו’
אחשו ייה לכם במקום המינוס 2 מספרים בhex עם : ביניהם. זה השורת פקודה החדשה שבה "מקליטים" את התוכנית.
תכתבו שמה תתוכנית (שורה לכל פקודה, לא ללחוץ 2 פעמים אחד אחרי השני על enter ואם יש טעויות למחוק אותם עם Backspace ולא עם טיפקס.
mov al, 6 mov ah, 8 add ah, al mov bx, 2000 mov [bx], ah mov ah, 4c int 21h
אחרי השורה של ה- int תלחצו 2 פעמים enter ואז שוב ייה לכם שורת פקודה של -
תכתבו rcx (אין לי מוסג מה זה עושה אבל צריך את זה (; אני יבדוק אחרכך) בנקודתיים תכתבו את המספר שהיה לכם בשורה הריקה (שעשיתם פעמים Enter) פחות המספר שכתבתם בa (במקרה שלנו 100) נגיד אם זה היה 011C ובהתחלה כתבתם a 100 אז תכתבו בנקודתיים 1C (11C-100=1C) במינוס הבא תכתבו w זה כותב תקובץ של התוכנית בקובץ com תכתבו u 100 - זה בשביל לעלות תתוכנית שלכם למקום המתאים בדיבאג אחשו תעשו t ENTER הרבה פעמים לפי מספר השורות של התוכנית- הרצת התוכנית שלב שלב תכתבו: d 2000
במקום הראשון בשורה הראשונה של ה"מטריצה" השמאלית אתם תראו תמספר 0E. זה התוצאה בhex של החישוב שעשיתם (8+6=14=Eh) זהו . .. תצאו עם q
הפקודות האחרונות בתוכנית שהן mov ah, 4c int 21h
תפקידן להפסיק את פעולת התוכנית ולפנות את המעבד לשטויות אחרות. אם לא תעשו ככה המחשב עלול להיתקע כי התוכנית נגמרה אבל היא לא מאפשרת למעבד להתעסק אם תוכנות אחרות.
היה פה כמה טעויות וזה לא עבד . אחשו זה בסדר [ההודעה נערכה על-ידי 11010010110 ב-15/09/2004 23:45:46]
10/09/2004 21:26:35
Collateral Damag
מתכנת שלא יודע אסמבלר זה פשוט פשע לא נורמלי.
מלמדים אותכם שם win16 או win32?
10/09/2004 21:40:22
Alpha1
שמרקה יא פושע אני חייב כזאות תוכנה!! אבל אני לא מבין את המדריך שלך ~~ ככה שאני לא יכול לעשות כ-ל-ו-ם. חוץ מזה אין לי כמעט ידע בתכנות חוץ מאיזה פה ושם רופף כזה ב VB6
10/09/2004 22:31:50
Collateral Damag
עוד דבר, אני לא מבין למה אתם משתמשים בדוס???? יש הרבה קומפיילרים חינמיים מעולים באינטרנט. אני אישית מעדיף את MASM. הנה דף הבית, אם אתה מתעניין. www.masm32.com
MASM תוכנן במקור בשביל HLA - High Level Assembly אבל אל דאגה אפשר לכתוב בו באסמבלר רגיל בלי בעיות. הוא מכיל עורך קוד, דיבאגר, אסמבלר, ולינקר הכל בחבילה אחת בלי סיבוכים.
כמו שאני וכולנו מכירים מורים, כנראה לא יתנו לך להשתמש בזה בשיעור. אבל זה יעזור לך להכין שיעורים.
זה הכל עיניין של העדפה, לדעתי הרבה יותר פשוט לעבוד עם MASM (או לחלופין NASM, TASM, HLA, FASM, GAS, GoAsm, WASM, NBASM וכו’...). רק רציתי להציג לך את האפשרות, ובהצלחה בלימודים.
לכל אלו מכם שלא יודעים אסמבלי, ומפחדים ללמוד. אל תפחדו, זה פשוט מאד!! וזה מאד יעזור לכם להבין את מה שהולך בשפות הגבוהות יותר.
11/09/2004 00:18:21
11010010110
מלמדים אותנו על מחשבי פנטיום 3/4 עם וינדוס 98 את האסמבלר של 8086 (המחשב שהיה לפני 286) של דוס בגירסה מוקדמת במיוחד שלו.
ה"תוכנה" שאנחנו עובדים איתה היא חלק שיש בכל דוס/וינדוס (אולי חוץ מאקס-פי) וקוראים לה Debug.
אקספי הוא מערכת הפעלה מנייקית במיוחד כלפי כל מה ששייך לדוס אז אם זה יעשה בעיות תעלו תמחשב מדיסקט של דוס או וינדוס 95/98 ולעתיק עליו תDEBUG ואולי עוד כמה קבצים
למי שרוצה את MASM או Turbo Asembler נראה לי שיש לנו את זה בבצפר ואני יעתיק למי שצריך בנתיים אנחנו עוד לא התעסקנו עם זה.
Alpha - תעשה לפי המדריך שלב-שלב את תסתדר עם זה
16/09/2004 00:02:39
11010010110
- - - - שיעור 5 - - - - הפקודה JNZ ותפקיד האוגר CX כמו מונה לולאה דוגמה של מצב דומה ל - overflow
התוכנית מחברת את כל מה שיש בכתובות זיכרון 0000 - 0019 ושומרת תתוצאה בזיכרון ב6000
JNZ 0109 - הוא עשה GOTO לפקודה שנמצאת בשורה 109 אם הערך של CX הוא לא 0 JNZ - Jump Not Zero
ב- t t t t t אני הרצתי את התוכנית עד שראיתי שהוא עשה תפקודה האחרונה (int 21) ואז עם d 6000 הסתכלתי בכתובת 6000 בזיכרון.
הגודל של AX הוא 16 ביט - 2 בתים לכן התוצאה תופםת 2 כתובות בזיכרון - 6000 ו- 6001.
קצת אחר אבל גם דומה מה שקורה ב - buffer / stack overflow שעליו יש די הרבה פיטפוט ב"אבטחת מידע" כי אפשר לשנות ("למחוץ") איתו מידע שאין לנו גישה אליו, ע"י הכנסת יותר מדי מידע למקום שיש לנו גישה אליו. כאן הכנסנו מידע של 2 בתים לכתובת אחת בזיכרון והוא גלש גם לכתובת הבאה.[ההודעה נערכה על-ידי 11010010110 ב-17/09/2004 17:52:57]
17/09/2004 03:33:15
CoDeR
שם האוגר הוא cx ולא rcx...
17/09/2004 17:50:09
11010010110
ואללה. .[ההודעה נערכה על-ידי 11010010110 ב-17/09/2004 17:52:06]
17/09/2004 19:44:03
silicon_wolf
איזה שמנים אתם...ואף אחד לא העיר שאומרים אסמבלי ולא אסמבלר כי האסמבלר הוא בעצם המתרגם של אסמבלי לשפת המכונה... סיפי-בושה פשוט בושה.
22/09/2004 01:18:18
cp77fk4r
רק עכשיו באתי..
אגב, קראתי בריפרוף, ואמרת שאתה לא יודע מה זה "rcx", אז הפקודה קודם כל, היא "r cx" ולא "rcx", והפקודה הזאת קוראת לאוגר בכדי שנכתוב בו את גודל התוכנית שלנו, לפני שהתוכנית נכתבת ע"ג הדיסק אנחנו צריכים לדעת מה גודלה.
יש מבין?[ההודעה נערכה על-ידי cp77fk4r ב-22/09/2004 01:18:32]
עמודים:
1