אסמבלי x86/פקודות/פקודות קפיצה: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
ינון א (שיחה | תרומות)
אין תקציר עריכה
ינון א (שיחה | תרומות)
אין תקציר עריכה
שורה 1:
{{אסמבלי}}
פקודות קפיצה משמשות אותנו כשאנחנו רוצים לקפוץ לחלק מסוים בזכרון, קוד או מה שזה לא יהיה.
בדרך כלל משמשות אותנו "לקפוץ" כשקורה משהו.
 
{{פקודה|JMP|פעולה=קפיצה בלתי מותנית לתוווית label.|פרמטרים=תוית
|תחביר=JMP label|דוגמה=JMP label1 ; קופץ לשורה המסומנת ב label1|אלגוריתם=IP=השורה אליה משוייכת התווית label1|הערות=}}
שורה 24 ⟵ 27:
|תחביר=JNA label או JBE label1|דוגמה=JBE label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל האפס דלוק וגם דגל הנשא דלוק|אלגוריתם=IP=השורה אליה משוייכת התווית label1 אם ZF=1 AND CF=1|הערות=}}
 
{{פקודה|JG/JNLE|פעולה=קפיצה לתוווית label בתנאי שדגל הנשאהאפס דלוקכבוי וגם דגל הסימן כבוי (תוצאת גדול מ בפקודת CMP).|פרמטרים=תוית
|תחביר=JNAEJNLE label או JB label1 או JCJG label1|דוגמה=JBJG label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הנשאהאפס כבוי וגם דגל הסימן דלוקכבוי|אלגוריתם=IP=השורה אליה משוייכת התווית label1 אם ZF=10 AND SF=10|הערות=}}
 
פקודה|JGE/JNL|פעולה=קפיצה לתוווית label בתנאי שדגל הסימן כבוי (תוצאת גדול או שווה בפקודת CMP).|פרמטרים=תוית
|תחביר=JNL label או JGE label1|דוגמה=JGE label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הסימן כבוי|אלגוריתם=IP=השורה אליה משוייכת התווית label1 אם SF=0|הערות=}}
 
פקודה|JL/JNGE|פעולה=קפיצה לתוווית label בתנאי שדגל הסימן שונה מדגל הגלישה (תוצאת קטן מ בפקודת CMP).|פרמטרים=תוית
|תחביר=JL label או JNGE label1|דוגמה=JNGE label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הסימן שונה מדגל הגלישה|אלגוריתם=IP=השורה אליה משוייכת התווית label1 אם SF<>OF|הערות=}}
 
פקודה|LE/JNG|פעולה=קפיצה לתוווית label בתנאי שדגל האפס דלוק (תוצאת קטן או שווה בפקודת CMP).|פרמטרים=תוית
|תחביר=JE label או JNG label1|דוגמה=JNG label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל האפס דלוק|אלגוריתם=IP=השורה אליה משוייכת התווית label1 אם ZF=1|הערות=}}
 
JG/JNLE (קפיצה אם גדול)
JGE/JNL (קפיצה אם גדול או שווה)
JL/JNGE (קפיצה אם קטן)
JLE/JNG (קפיצה אם קטן או שווה)
JO (קפיצה אם יש גלישה)
JNO (קפיצה אם אין גלישה)
שורה 41 ⟵ 49:
LOOP (הפחתת CX וקפיצה אם שונה מ 0)
LOOPE/LOOPZ (הפחתת CX וקפיצה אם שונה מ 0 וגם ZF=1)
LOOPNE/LOOPNZ (הפחתת CX וקפיצה אם שונה מ 0 וגם ZF=0)
 
פקודות קפיצה משמשות אותנו כשאנחנו רוצים לקפוץ לחלק מסוים בזכרון, קוד או מה שזה לא יהיה.
בדרך כלל משמשות אותנו "לקפוץ" כשקורה משהו.
 
פקודות הקפיצה הן:<br>
jmp - לא חייב לקרות כלום כדי "לקפוץ", פשוט קופץ.<br>
je - Jump if Equal - קופץ אם ערך מסוים שווה ל...<br>
jne - Jump if Not Equal - קופץ אם ערך מסוים '''לא''' שווה ל...<br>
jg - Jump if Greater than - קפוץ אם גדול מ...<br>
jng - Jump if Not Greater than - קפוץ אם '''לא''' גדול מ...<br>
jl - Jump if Less than - קפוץ אם קטן מ...<br>
jnl - Jump if Not Less than - קפוץ אם לא קטן מ...<br>
אלא הפקודות שיקפצו אם ערך מסוים שווה, גדול מ, או קטן מערך אחר, דוגמה:
 
<div style="direction: ltr;">
cmp ax, bx<br>
je '1'<br>
jg '2'<br>
jl ' 3'
</div>
 
הפקודה 'cmp' משווה בין ax ל-bx.<br>
אם הערכים שווים, נקפוץ ל-'1'.<br>
אם bx גדול מ-ax נקפוץ ל'2'.<br>
אם bx קטן מ-ax נקפוץ ל'3'.<br>
כמובן שיכלנו להשתמש ב-'jng' במקום 'jl' או להשתמש ב-'jnl' במקום 'jg' אך זה אומר אותו דבר ואף בתוכנות מסוימות אשר משתמשים בשפת האסמבלי זה ישנה את jnl ל-jg ואת jng ל-jl.