אסמבלי x86/פקודות/פקודות קפיצה
אסמבלי x86 |
---|
|
פקודות קפיצה משמשות אותנו כשאנחנו רוצים לקפוץ לחלק מסוים בזכרון, קוד או מה שזה לא יהיה. בדרך כלל משמשות אותנו "לקפוץ" כשקורה משהו.
פקודת JMP
קפיצה בלתי מותנית לתווית label.
פרמטרים: תוית
תחביר: JMP label
לדוגמה: JMP label1 ; קופץ לשורה המסומנת ב label1
אלגוריתם: IP=השורה אליה משוייכת התווית label1
פקודת JNC
קפיצה לתוווית label בתנאי שדגל הנשא כבוי.
פרמטרים: תוית
תחביר: JNC label
לדוגמה: JNC label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הנשא כבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם CF=0
פקודת JE/JZ
קפיצה לתוווית label בתנאי שדגל האפס דלוק (תוצאת שווה בפקודה CMP).
פרמטרים: תוית
תחביר: JE label או JZ label1
לדוגמה: JZ label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל אפס דלוק
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם ZF=1
פקודת JNE/JNZ
קפיצה לתוווית label בתנאי שדגל האפס כבוי (תוצאת לא שווה בפקודת CMP).
פרמטרים: תוית
תחביר: JNE label או JNZ label1
לדוגמה: JNZ label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל אפס כבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם ZF=0
פקודת JA/JNBE
קפיצה לתוווית label בתנאי שדגל האפס כבוי וגם דגל הנשא כבוי (תוצאת גדול מ בפקודת CMP).
פרמטרים: תוית
תחביר: JA label או JNBE label1
לדוגמה: JA label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל אפס כבוי וגם דגל הנשא גבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם ZF=0 AND CF=0
פקודת JAE/JNB
קפיצה לתוווית label בתנאי שדגל הנשא כבוי (תוצאת גדול או שווה בפקודת CMP).
פרמטרים: תוית
תחביר: JAE label או JNB label1
לדוגמה: JNB label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הנשא כבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם CF=0
פקודת JB/JNAE/JC
קפיצה לתוווית label בתנאי שדגל הנשא דלוק (תוצאת קטן מ בפקודת CMP).
פרמטרים: תוית
תחביר: JNAE label או JB label1 או JC label1
לדוגמה: JB label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הנשא דלוק
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם CF=1
פקודת JBE/JNA
קפיצה לתוווית label בתנאי שדגל האפס דלוק וגם דגל הנשא דלוק (תוצאת קטן או שווה בפקודת CMP).
פרמטרים: תוית
תחביר: JNA label או JBE label1
לדוגמה: JBE label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל האפס דלוק וגם דגל הנשא דלוק
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם ZF=1 AND CF=1
פקודת JG/JNLE
קפיצה לתוווית label בתנאי שדגל האפס כבוי וגם דגל הסימן כבוי (תוצאת גדול מ בפקודת CMP).
פרמטרים: תוית
תחביר: JNLE label או JG label1
לדוגמה: JG label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל האפס כבוי וגם דגל הסימן כבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם ZF=0 AND SF=0
פקודת 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
פקודת JO
קפיצה לתוווית label בתנאי שדגל הגלישה דלוק.
פרמטרים: תוית
תחביר: JO label
לדוגמה: JO label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הגלישה דלוק
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם OF=1
פקודת JNO
קפיצה לתוווית label בתנאי שדגל הגלישה כבוי.
פרמטרים: תוית
תחביר: JNO label
לדוגמה: JNO label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הגלישה כבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם OF=0
פקודת JS
קפיצה לתוווית label בתנאי שדגל הסימן דלוק.
פרמטרים: תוית
תחביר: JS label
לדוגמה: JS label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הסימן דלוק
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם SF=1
פקודת JNS
קפיצה לתוווית label בתנאי שדגל הסימן כבוי.
פרמטרים: תוית
תחביר: JNS label
לדוגמה: JNS label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הסימן כבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם SF=0
פקודת JP/JPE
קפיצה לתוווית label בתנאי שדגל הזוגי דלוק.
פרמטרים: תוית
תחביר: JP label או JPE label
לדוגמה: JP label1 ; קופץ לשורה המסומנת ב label1 בתנאי שדגל הזוגי כבוי
אלגוריתם: IP=השורה אליה משוייכת התווית label1 אם PF=1
פקודת JP/JPE
עריכה(קפיצה אם מס' הביטים הדלוקים זוגי)
פקודת JPO
עריכה(קפיצה אם מס' הביטים הדלוקים ב-Low זוגי)
פקודת JNP
עריכה(קפיצה אם מס' הביטים הדלוקים אי-זוגי)
פקודת JCXZ
עריכה(קפיצה אם CX שווה 0)
פקודת LOOP
עריכה(הפחתת CX וקפיצה אם CX כעת שונה מ 0) דוגמא:
- MyLabel
{...}
loop MyLabel
פקודת LOOPE/LOOPZ
עריכה(הפחתת CX וקפיצה ללולאה אם CX כעת שונה מ 0 וגם ZF=1, כמובן שמדובר על הZF לפני הפחתת הCX).
פקודת LOOPNE/LOOPNZ
עריכה(הפחתת CX וקפיצה ללולאה אם CX כעת שונה מ 0 וגם ZF=0, כמובן שמדובר על הZF לפני הפחתת הCX).