נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: [אסמ 8086] חישוב איברי מערך

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
DidiNino
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 18 February 2007
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 18 February 2007 בשעה 19:02 | IP רשוּם
ציטוט DidiNino

התכנית מחשבת סכום איברים במערך, אבל לא ברורות לי כמה פקודות:
קוד:

;--------------------------------------------------------------
   Data   Segment
        Ar     Dw   30000,30002,30007,9,5,3,1
             N = ($  - Ar) / Type  Ar   ;  7
       Sum   Dd  0     
   Data  Ends     
   CSeg  Segment
     Assume   Cs:CSeg, Ds:Data
         Start:
              Mov   Ax,  Data
              Mov   Ds,  Ax

                 Mov  Cx, N
                 Lea   Bx, Ar
            L_For:
                    Mov  Ax, [Bx]
                    Add  Word Ptr Sum, Ax
                    Adc  Word Ptr Sum+2, 0
                    Add  Bx, Type  Ar
                    Loop  L_For   

              Mov   Ax,  4c00H
              Int   21h           
             
    CSeg  Ends
    End   Start

ה ADD הראשון ברור, הוא לוקח את האיבר ומחבר אותו
ה"בעיה" כביכול היא מתי שאנו גולשים מהערך הכי גדול שיכול להכנס ל DW
ואז באה הפקודה ADC שלא ברור לי מה היא עושה טכנית, אז הרצתי DEBUG ולוגית הוא מסדר את ה"בעיה", אבל אני לא מבין איך ומדוע.. (?)
אשמח לקבל תגובה בנושא
ותודה מראש

חזרה לתחילת העמוד הצג את כרטיס החבר של DidiNino חפש הודעות אחרות של DidiNino
 
Fate
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת
הודעות: 571
נשלח בתאריך: 18 February 2007 בשעה 21:35 | IP רשוּם
ציטוט Fate

כשאתה גולש החוצה מהWORD או בפעולת חשבון כלשהיא, יש לך ביט שנלק ושמו הוא
Carry Flag..
ואז פעול חיבור נוספת שנעשית עם ADC תחבר את המספר שנתנו (במקרה הזה 0)..
וגם את הCARRY...
מה שאומר שברגע שגולש ביט, הוא מוסיף אותו לWORD אחד מעל לSUM.
חזרה לתחילת העמוד הצג את כרטיס החבר של Fate חפש הודעות אחרות של Fate
 
ofir3dvb
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 05 February 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 17
נשלח בתאריך: 18 February 2007 בשעה 21:56 | IP רשוּם
ציטוט ofir3dvb

fate ענה לך על זה כמו שצריך אבל רק לחדד דבר קטן dd שהוא double word ומכאן הוא מורכב למעשה משני מילים, כאשר אתה מחבר בין שני מילים והתוצאה גדולה מידי כדי להיות מאוכסנת במילה קופץ דגל הנשא (אותו אחד שfate הזכיר) שערכו למעשה צריך להיות חלק ממילה גבוה יותר שכן משקלו גבוה יותר ביחס לשאר הסכום שהתקבל בעודו חלק ממנו ולכן כל פעם כשהדגל הנ"ל קופץ, כלומר ערכו אחד יש לחבר אותו לתוצאה ובעצם להרחיב את התוצאה ל"שני מילים" double word.

חזרה לתחילת העמוד הצג את כרטיס החבר של ofir3dvb חפש הודעות אחרות של ofir3dvb
 
DidiNino
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 18 February 2007
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 20 February 2007 בשעה 03:30 | IP רשוּם
ציטוט DidiNino

תודה רבה לעונים
פעם ראשונה שבאמת הבנתי הסבר על קוד בצורה רצינית!
חזרה לתחילת העמוד הצג את כרטיס החבר של DidiNino חפש הודעות אחרות של DidiNino
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה