overflow באוגרים

inkydinky

New member
overflow באוגרים

שלום, אם באוגר AL יש לדוגמה את הערך 91h ואני מבצע את: add AL, 7Bh מה שאמור לקרות זה שיהיה carry אחרי הפעולה הזו ושב-AL לא יהיה את הערך האמיתי שאמור להיות אחרי פעולה כזו (כי יש overflow, לא?). איך דבר כזה אמור להשפיע על EAX (אפילו על AX בלבד, לצורך העניין)? לפי מה שאני יודע ה-carry לא עובר הלאה אל אוגר AH... אז מה כן קורה? תודה, IDD
 

angel20

New member
דבר ראשון

הCARRY הוא דגל בלבד הוא מסמן 1 כאשר היה מעבר מבית למילה הEAX לא צריך להיות מושפע מביצוע הפעולה שהזכרתה. הEAX עובד רק עם שרשור של שתי אוגרים למשל AX וDX כאשר תוצאת החיבור או כל דבר אחר שתבצע עם שתי האוגרים עובר את גודל המילה אז התוצאה משתרשרת על שתי אוגרים. לגבי החיבור שהזכרתה מי שאמר לך ש AH לא יקבל את הערך של המשך התוצאה תעה לAH כן תיכנס תוצאת החיבור שלא יכולה להשתרע על בית אחד ולכן תשתרע על מילה.
 

אלדד26

New member
מה פתאום?!

1. AH לא מושפע מפעולות שמבוצעות ישירות על AL! לא משנה אם היה OVERFLOW. 2. EAX הוא הרחבה של AX ל - 32 ביט. אם משנים את AX, גם EAX משתנה. אם משנים את AL, גם AX וגם EAX משתנים. בקיצור, פעולת ADD על AL ודאי שתשפיע על AX ועל EAX. היא *לא* תשפיע על AH. AL, AX ו - EAX יושבים באותו מיקום פיזי במעבד, ולכן פעולה על AL תשפיע על AX ועל EAX. גם פעולה על AH תעשה את אותו הדבר. *אבל* פעולה על AL לא יכולה להשפיע על AH.
 

inkydinky

New member
תודה רבה.

אין לי מושג למה בכלל היה לי ספק שזה ככה... זה ממש פשוט. שוב תודה.
 

voguemaster

New member
לא בכל פקודה באסמבלי זה כך

ישנן פקודות שממש לא מטפלות יפה ב-CARRY. יש פקודות שכן פורסות על פני כמה אוגרים (DX:AX) ויש כאלו שממש לא. בכל מקרה התוצאה היא תמיד התוצאה הנכונה פחות גודל של אוגר מלא (כלומר עבור AX, צריך להוסיף FFFFh כדי לקבל את תוצאת החיבור, במידה ואין יותר מ-OVERFLOW אחד..) אלי
 

saga

New member
ה carry מתעדכן ב אוגר הדגלים

יש רגיסטר שקרוי אוגר הדגלים יש בו דגלים כדון cf zf of וכוו כל הדגלים שם מתעדכנים כתוצאה מפעולות מסוימות שנעשות ואז ניתן להשתמש בפקודות כגון jc jump if carry במקרה שלך קפוץ אם התוצאה מעל ff
 
למעלה