Pengertian Operasi Jump
Instruksi lompatan pada suatu program akan menyebabkan program melompati bagian tertentu dan mengeksekusi instruksi yang dikehendaki. Ada 2 jenis instruksi dalam operasi jump yaitu: lompat tak bersyarat dan lompat bersyarat.
Lompatan tak bersyarat
Instruksi lompatan ini langsung menuju ke alamat memori yang dituju tanpa syarat apapun, sehingga program langsung dapat kita arahkan menuju lokasi memori atau label dengan perintah atau instruksi JMP
Aturan penulisannya : JMP lokasi memori/label
Contoh :
.model small
.code
org 100h
MULAI: MOV AX, 1234H
MOV BX, 4321H
JMP TERUS
TERUS:
ADD AX, BX
SUB AX,3
JMP TERUS2
TERUS2:
INT 20H
END MULAI
Ada 3 jenis instruksi lompatan tak bersyarat yaitu:
q Lompatan pendek (short jump) -> JMP SHORT disp yaitu melakukan lompatan maksimal sejauh 127 byte.
Contoh:
JMP SHORT 04h ;melakukan lompatan sejauh 4 byte
q Lompatan dekat (near jump) -> JMP disp_low disp_high yaitu melakukan lompatan lebih panjang maksimal 32 Kb.
Contoh:
JMP 0200h ;melakukan lompatan ke lokasi memori 200h
q Lompatan jauh (far jump) -> JMP FAR iplow Cslow Cshigh yaitu melakukan lompatan ke seluruh daerah memori.
Contoh:
JMP FAR nH ;melakukan lompatan jauh ke lokasi tertentu
Lompatan bersyarat
Yaitu lompatan pendek yang dilakukan ke seluruh daerah memori dalam segmen memori yang sama dan terjangkau oleh operasi ini. Instruksi ini menggunakan CMP untuk membandingkan kondisi yang dicek, sehingga akan melompat ke alamat yang dituju sesuai instruksi lompatan bersyarat, dimana instruksi lompatan bersyarat antara lain :
Ø JA (Jump if Above) ; lompat bila operand 1 > operand2 (bilangan tak bertanda)
Ø JAE (Jump if Above or Equal); lompat bila operand 1 >= operand2 (bilangan tak bertanda)
Ø JB (Jump if Below) ; lompat bila operand 1 < operand2 (bilangan tak bertanda)
Ø JBE (Jump if Below or Equal); lompat bila operand 1 <= operand2 (bilangan tak bertanda)
Ø JG (Jump if Greater); lompat bila operand 1 > operand2 (bilangan bertanda)
Ø JGE (Jump if Greater or Equal) ; lompat bila operand 1 >= operand2 (bilangan bertanda)
Ø JL (Jump if Less) ; lompat bila operand 1 < operand2 (bilangan bertanda)
Ø JLE (Jump if Less or Equal) ; lompat bila operand 1 <= operand2 (bilangan bertanda)
Ø JC (Jump if Carry) ; lompat bila ada bawaan
Ø JNC (Jump if No Carry) ; lompat bila tidak ada bawaan
Ø JE atau JZ (Jump if Equal)/(Jump if Zerro) ; lompat bila operand 1 = operand 2
Ø JNE atau JNZ (Jump if Not Equal)/(Jump if Not Zero); lompat bila operand 1 <> operand 2
Ø JO (Jump on Overflow) ; lompat bila terjadi overflow
Ø JNO (Jump if No Overflow); lompat bila tidak terjadi overflow
Ø JS (Jump On Sign) ; lompat bila negatif
Ø JNS (Jump if No Sign) ; lompat bila positif
Ø JP atau JPE (Jump on Parity)/(Jump if ParityEven) ; lompat bila berparitas genap
Ø JNP atau JPO (Jump if No Parity)/(Jump if Parity Odd); lompat bila berparitas ganjil
Ø JCXZ (Jump if CX is Zero) ; lompat bila CX=0
Ø JECXZ (Jump if Equal CX is Zero); lompat bila ECX=0 (khusus 80486 ke atas)
Penulisan instruksi lompat bersyarat yang diawali dengan instruksi CMP yang berguna untuk membandingkan isi register untuk dilompati sesuai kondisi.
Contoh 1:
MOV AX, 0010h ;isi AX dengan 10h
MOV BX, 0012h ;isi BX dengan 12h
106: CMP AX,BX ;bandingkan isi AX dengan BX
JE 10D ;bila sama lompat ke alamat 10D
INC AX ;bila tidak tambahkan isi AX dengan 1
JMP 106 ;kembali ke alamat 106
10D: ADD AX,3 ;tambahkan isi AX dengan 3
INT 20h ;kembali ke prompt DOS
Kita tinggal mengganti instruksi lompat sesuai kebutuhan, apakah memenuhi syarat (Y) atau tidak memenuhi syarat (T).
Contoh 2:
.model small
.code
org 100h
MULAI: MOV BX, 0000H
ULANG3: MOV DL, 41H
ULANG2: MOV CX,0003H
ULANG1: MOV AH,02H
INT 21H
LOOP ULANG1
INC DL
CMP DL,5BH
JNE ULANG2
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
INT 21H
INC BX
CMP BX,000BH
JLE ULANG3
INT 20H
END MULAI