עבור לתוכן

JNZ באסמבלי

Featured Replies

פורסם

ברצוני לדעת האם פקודת JNZ לאיזשהו מקום (לא עניין רלוונטי), שבאה לאחר הפקודה: DEC CX אומר שרק כאשר

ערך CX יהא 0 הקפיצה לא תבוצע או שהיא תופסת לגבי אוגר אחר או מס' אוגרים ?

תודה !

פורסם

אם לאחר פעולה כלשהי דגל הZERO כבוי, אז הJNZ יקפוץ.

פורסם

הפקודה JNZ בודקת את מצב אוגר הדגלים ולכן לא קשורה לאוגר CX או לכל אוגר אחר.

כיוון ש-DEC מעדכנת את דגל Z, הרי שאם תכתוב DEC CX ומיד אחריו JNZ XXXX אז הפקודה תקפוץ אם CX לא התאפס לאחר ההפחתה.

(אני מניח שאתה רוצה לממש לולאה)

פורסם

יש את פקודת הLOOP שמאפשרת לך ליצור לולאה ע"י השימוש באוגר CX(במקום לרשום 2 פקודות, אתה צריך לרשום רק פקודה אחת).

פורסם

זה בכלל לא אמור לעניין אותך בשלב זה, אבל למיטב זכרוני החל מ-386 והלאה LOOP הוא איטי יותר משילוב של DEC + JNZ. אני מניח שהיום הם כבר אותו הדבר.

עוד הבדל (ששוב צריך לבדוק אותו כי הזכרון שלי לא משהו) הוא ש-LOOP קודם בודקת אם CX הוא 0לא ורק אח"כ מפחיתה וקופצת לכתובת המבוקשת, בניגוד לשילוב הפקודות שקודם מפחית את CX ורק אז בודק אם הוא הפך לאפס.

פורסם

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

רציתי לדעת למה LOOP יהייה(או היה) איטי יותר משילוב הפקודות?

פורסם

טוב, אני דולה את זה מזכרון ישן מאוד, נא להטיל ספק בכל מה שכתוב כאן:

באיזשהו שלב אינטל עברו למימוש פנימי RISC-י של סט פקודות ה-X86 שלהם. הם ביצאו אופטימזציות לסט הפקודות השימושי הרגיל, וזה בא קצת על חשבון פקודות אזוטריות יותר כגון LOOP.

נו טוב, אמרתי שזה מזכרון ישן. ההסבר הזה נשמע לי קצת מפוקפק, אבל זה מה שאני זוכר.

אולי לאינטרנט פתרונים?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים