ABA


"צריך עזרה והסברים על תוכנית באסמבלר"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11325 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11325
DeViL_MaStEr

   16:17   07.11.04   
אל הפורום  
  צריך עזרה והסברים על תוכנית באסמבלר  
 
   ערכתי לאחרונה בתאריך 07.11.04 בשעה 16:18 בברכה, DeViL_MaStEr
 
היי אנשים אני חדש בפורום תכנות כי רק השנה התחלתי ללמוד תכנות וזה התחיל להיות לי קשה..
התחלנו ללמוד עכשיו אסמבלר ואני לא ממש מבין..
אני רוצה להביא פה תרגיל ואת התוכנית ושתסבירו לי כל שלב בתוכנית:
*תרגיל : רשום תוכנית הקוראת נתונים החל מכתובת 1000h בודקת 100 מספרים וסופרת את המספרים השליליים.
*משתנים : 1)מונה מספרים שליליים - CH
2)מונה ל 100 - CL
3)משתנה לקליטת המספר - AL
4)מונה להצבעה על הכתובת - BX
*תוכנית

mov CL,100h;
xor CH,CH;
mov BX,1000h;
loop: mov AL,BX;
JNS next;

inc CH;
next: inc BX;
dec CL;
JNZ loop

עכשיו אנשים אני מאוד רוצה להבין את זה יש לי יום שלישי בחינה
אני רוצה שמישהו יסביר לי בבקשה כל שלב .
תודה ענקית לעוזרים


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  בבקשה אנשים אני ממש צריך את זה בשביל מבחן DeViL_MaStEr 07.11.04 23:10 1
  יש לי מחר מבחן בבקשה אני מתחנן תעזרו לי! DeViL_MaStEr 08.11.04 15:44 2
  לא כל כך הבנתי מה אתה צריך .. דני15  08.11.04 19:49 3
     אני צריך כל שלב בתוכנית הזאת מה הוא עושה DeViL_MaStEr 08.11.04 23:18 4
  הנה אחי קבל הסבר faruz_avi  17.11.04 21:40 5
  אם כבר, אז כבר... Dudenland 17.11.04 23:17 6
     אחי אני רואה שהתשמשת בדגל SF Tamirrr 19.11.04 13:32 7
  משו אחד שלא הבנתי כאן Tamirrr 19.11.04 13:42 8
     לא, אתה לא צודק! Dudenland 22.11.04 18:55 10
         הבנתי אותך בערך Tamirrr 22.11.04 22:19 11
  UP אני צודק או לא? אני רוצה לדעת את זה Tamirrr 20.11.04 09:25 9

       
DeViL_MaStEr

   23:10   07.11.04   
אל הפורום  
  1. בבקשה אנשים אני ממש צריך את זה בשביל מבחן  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DeViL_MaStEr

   15:44   08.11.04   
אל הפורום  
  2. יש לי מחר מבחן בבקשה אני מתחנן תעזרו לי!  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
דני15 
חבר מתאריך 3.8.02
47437 הודעות, 8 פידבק
   19:49   08.11.04   
אל הפורום  
  3. לא כל כך הבנתי מה אתה צריך ..  
בתגובה להודעה מספר 0
 
   אתה צריך הסבר איך לכתוב תוכנית כזו, או שזו תוכנית מוכנה ואתה רוצה הסבר עליה?
לא כל כך הבנתי את הרעיון של התוכנית אבל העתקה של BX ל-AL זו טעות חמורה כיוון שזו העתקת אוגר בגודל מילה(16 סיביות) לחצי אוגר בגודל בית(8 סיביות).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DeViL_MaStEr

   23:18   08.11.04   
אל הפורום  
  4. אני צריך כל שלב בתוכנית הזאת מה הוא עושה  
בתגובה להודעה מספר 3
 
   ובעעע נדפקתי עם מורה שמלמד שנה ראשונה שלו מיקרו


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
faruz_avi 
חבר מתאריך 27.10.04
11552 הודעות
   21:40   17.11.04   
אל הפורום  
  5. הנה אחי קבל הסבר  
בתגובה להודעה מספר 0
 
   בההההההההההההההההההה...
אני מקווה שאתה לא רשמת
MOV AL,BX
כי אם כן תיקח שיעורים פרטיים, לא סתם חוק מספר אחד אין להציב אוגר בגודל 16 סיביות לאוגר 8 סיביות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   23:17   17.11.04   
אל הפורום  
  6. אם כבר, אז כבר...  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 17.11.04 בשעה 23:20 בברכה, Dudenland
 
mov CL, 100h - מורה על השמת המספר ההקסדצימלי 100 (שזה יוצא 256 בשפה שלנו, ומכאן, שיש כאן טעות, כי נתבקשת לבדוק 100 מספרים, ולא 256) באוגר CL, שהוא ישמש לנו כאינדקס הלולאה (כלומר כדי לבצע את הפעולות הבאות עבור 100 תאים בזיכרון, כפי שמוגדר).

xor CH, CH - מורה על איפוס האוגר CH. לא ניכנס כאן לוויכוחים מיותרים והסברים כאלו ואחרים, אבל כאשר אתה מבצע xor בין ערך מסויים לערך זהה, אתה גורם לאיפוסו. הדבר היה זהה אילו היית רושם mov CH, 0.

mov BX, 1000h - מורה על השמת המספר ההקסדצימלי 1000. הדבר נועד (ותראה זאת בהמשך) כדי להתחיל את הפעולות מתא שכתובתו 1000h.

loop: mov AL, BX - כאן, יש לנו כביכול שתי פעולות. הראשונה - הגדרה של נקודת-ציון בתכנית שלך שנקראת loop. נקודה זו תשמש אותנו בהמשך כדי שנוכל לחזור לאותה נקודה בתכנית, וכך לבצע את הפעולות שבאות לאחר נקודה זו מספר פעמים (זהו בעצם המימוש של הלולאה). השנייה - אמורה להציב ב-AL את ערך התא שכתובתו שמורה באוגר BX (כרגע זה 1000h). למה אמורה? משום שיש לסגור את BX בסוגריים מרובעות, כך שהמחשב ידע להציב ב-AL את הערך שנמצא בכתובת ש-BX מצביע עליה, ולא את הערך שב-BX עצמו (שהוא 1000h). לכל הטוענים לטעות יסודית אשר נובעת מהפרשי גדלים בין האוגר BX ל-AL, הדבר היה נכון אילולא היינו ממשיכים כך, אבל משום שיש לסגור את BX בסוגריים מרובעות, הדבר יהיה נכון, ויורה למחשב לבדוק רק בית אחד בזיכרון.

JNS next - זוהי בעצם התנייה הקשורה לפעולה הקודמת. אם בסיום הפעולה הקודמת התוצאה הייתה אי-שלילית, קפוץ לנקודת ציון ששמה next (שכנראה נמצאת בהמשך התכנית). הפירוש ל-JNS הוא Jump Not Sign, כלומר קפוץ אם לא-שלילי. כאן אתה כבר יכול להבין את המימוש של המטרה שמאחורי התכנית.

inc CH - אם הפעולה הקודמת לפעולה הקודמת הייתה שלילית, הרי שהתנאי לא מתקיים, ולא תתבצע קפיצה לנקודת-הציון next, אלא התכנית תמשיך כרגיל, ותגדיל את ערכו של CH ב-1, שכידוע לך מורה על מספר התאים שערכם שלילי.

next: inc BX - גם כאן ישנה חלוקה לשתי-פעולות: הראשונה - כמו מקודם, יצירת נקודת-ציון ששמה next. כבר ראית מקודם שיש פעולה אשר מחפשת אחר נקודה-זו (משתמשת בה). השנייה - הגדלת ערכו של BX, אינדקס הזיכרון, ב-1. פעולה זו מתקיימת לכל אורך הלולאה, ומוודאת שתהיה התקדמות בבדיקת התאים. לאחר הביצוע הראשון של פעולה זו, התא שייבדק יהיה עתה 1001h.

dec CL - פעולה זו מקטינה את ערכו של אינדקס הלולאה ב-1, ומוודאת שהלולאה לא תימשך לנצח, בעזרת הפעולה שאחריה, JNZ loop, אשר בודקת אם התוצאה של הפעולה האחרונה הייתה שונה מאפס, ובמקרה זה, תקפוץ התכנית לנקודת הציון ששמה loop. מכיוון ש-CL התחיל כ-100, והוא קטן בכל איטרציה של הלולאה, בסיומן של 100 בדיקות, ערכו יהיה אפס, והתכנית תסתיים.

שמע, אם בכל זאת אתה לא מבין, אז כדאי שלא תיגש לבחינה, ותתחיל ללמוד ברצינות. אני ניסית ככל יכולתי.

אגב, תקנו אותי אם אני טועה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Tamirrr

   13:32   19.11.04   
אל הפורום  
  7. אחי אני רואה שהתשמשת בדגל SF  
בתגובה להודעה מספר 6
 
   ערכתי לאחרונה בתאריך 19.11.04 בשעה 13:33 בברכה, Tamirrr
 
Sign Flag דגל הסימן...ובפקודות שעובדים לפיו
אנחנו לפחות לא לומדים אותו ואני בספק אם נלמד כי כל ההתעסקות שלנו במספרים שליליים וחיוביים הייתה עם סיבית סימן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Tamirrr

   13:42   19.11.04   
אל הפורום  
  8. משו אחד שלא הבנתי כאן  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 19.11.04 בשעה 13:43 בברכה, Tamirrr
 
הדגל SF פועל בתוך המעבד ומתעדכן אחרי כל פעולה אריטמתית
ובזכרון יש רק 8 ביטים ללא כל דרך לדעת אם המספר הוא שלילי או חיובי רק לפי סיבית סימן...הדגל מתעדכן רק לפי הפעולה האחרונה והפעולות הלוגיות כאן הם INC DEL כך שהדגל לא ירד אףפעם לשלילי במהלך כל הפעולה
וכמו שאמרתי בזכרון אין אף דרך לדעת אם המספר הוא שלילי או חיובי חוץ מסיבית סימן...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   18:55   22.11.04   
אל הפורום  
  10. לא, אתה לא צודק!  
בתגובה להודעה מספר 8
 
   נניח שביצעת פעולה כלשהי על משתנה כלשהו בגודל X סיביות. לצורך העניין, X שלנו יהיה 4.
נניח, לצורך הדוגמה, שערכו (בבסיס 2) הוא 1001.
אם נבחר להתייחס אליו כאל מספר אי-שלילי (unsigned), נקבל כי מספר זה הינו 9.
לעומת זאת, אם נבחר להתייחס אליו כאל מספר signed, נקבל כי מספר זה הינו 7-, משום שיש להוסיף 111 (7 בעשרוני) כדי לאפסו.
אני מניח שאתה מכיר את השיטות לייצוג שליליים (משלים ל-2 וכו'), אשר לפיהן הסיבית האחרונה קובעת אם המספר שלילי או לא. במקרה הנ"ל, הסיבית מורה על חיסור 8 (כלומר 8-) וחיבור שאר המספר...

בסופו של יום, אתה, כותב התכנית, מחליט איך להתייחס למספר. בכל אופן, המעבד נותן לך כלים לעשות זאת, ואם בא לך להתייחס אל המספר כשלילי, אז אתה תיישם פקודות שנוגעות לדגל SF, ואם לא, אז לא.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Tamirrr

   22:19   22.11.04   
אל הפורום  
  11. הבנתי אותך בערך  
בתגובה להודעה מספר 10
 
   אבל כשאנחנו למדנו על המעבד למדנו שאחרי כל פעולה הדגלים מתעדכנים
כלומר הם מושפעים מהפעולה האחרונה....
וכשאני מעתיק מספר מהזכרון הוא בן 8 סיביות ואין לנו שום דרך לדעת אם הוא שלילי או חיובי (פעולת mov לא משפיעה על הדגלים) אז הדגל SF יתעדכן רק מהפעולות הארימטיות של הinc dec
אני לא מבין את זה כי כשכתבנו תוכניות דומות תמיד בדקנו את הסיבית סימן
הראשונה (עם XOR ואז בדקנו את דגל האפס)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Tamirrr

   09:25   20.11.04   
אל הפורום  
  9. UP אני צודק או לא? אני רוצה לדעת את זה  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net