LOOPE/Z באסמבלר

  • פותח הנושא EETB
  • פורסם בתאריך

EETB

New member
LOOPE/Z באסמבלר

מה ההבדל בין הפקודות בתכלס? הרי אני מסרב להאמין שהם עושות את הפעולה בדיוק באותו אופן? ועוד שאלה: בLOOP[N]E/Z , איך הולך סדר הפעולה? הוא בודק קודם ZF ואז מחסר CX ואז בודק CX או מה? כי אני רוצה לדעת לדגומא, אם לולאה הסתיימה וCX=0 אז אין מצב שהיא הסתימה בגלל ZF?
 

voguemaster

New member
לנו הפתרונים! ../images/Emo13.gif

הפקודות LOOPE ו-LOOPZ הן היינו הך. בנוגע ל-LOOPNZ: הפקודה בודקת אך ורק את ערכו של ה-ZF! העניין הוא כזה. בכל פעם שהפקודה מבוצעת, יורד אחד מ-CX ואז נבדק ה-ZF. אם תשים לב, הורדה של אחד מאוגר כלשהו (ע"י DEC לדוגמא) משפיעה על הדגלים. לכן, אם הפקודה מבוצעת כאשר CX=1 הוא מתאפס, ואיתו נדלק דגל ה-ZF. במקרה כזה, אין קפיצה חזרה אלא המשך ביצוע של התוכנית מאחרי ה-LOOPNZ.. אלי
 

twiti

New member
הפקודות LOOPE ו-LOOPZ הן בדיוק

אותה פקודה ! האחת שואלת במפורש לגבי דגל ה-Zero והשניה שואלת שאלה לכאורה לוגית - האם שווים (Equal)? כאשר לולאה מראה ש-CX הוא 0, אין זה אומר שה- ZF לא השתנה בפעולה האחרונה מכיוון שסדר הבדיקה הוא כזה (ל-LOOPE/LOOPZ): CX=CX-1 if CX<>0 and ZF=1 JMP Short-Label כלומר זה ש-CX התאפס זה חלק מהתנאי שיגרום לעצירת ההסתעפות, אך ייתכן שגם ZF השתנה בפעולה האחרונה ולכן יש לבדוק אותו. מקווה שעזרתי
 

EETB

New member
כן תודה..

אבל לפי מה שהבנתי גם לפי אינסטרקן-סט LOOPE/Z לא משפיעה על דגלים.. בכלל
 

twiti

New member
הפקודה אכן לא משפיעה על הדגלים

ההשפעה על הדגלים מגיעה מן הפקודה שקדמה ל-loop שהן בדר"כ cmp או sub שהן דומות אחת לשניה (אך לא זהות - השפעה על היעד).
 
למעלה