INSTRUKSI PERCABANGAN
Insturksi percabangan mengubah urutan normal
pelaksaan suatu program. Dengan instruksi ini program yang sedang dilaksanakan
akan mencabang ke suatu alamat tertentu.
Instruksi percabangan berfungsi untuk membelokkan runtun eksekusi
program yang semula sekuensial menjadi melompat ke instruksi yang lainnya.
Instruksi percabangan terdiri atas instruksi percabangan tanpa syarat dan
bersyarat.
Percabangan Tanpa Syarat
-
CALL alamat
Instruksi
ini melakukan lompatan ke suatu subroutine yang ditunjuk oleh alamat/label. Ada
beberapa insturksi CALL
1. ACALL
alamat-11b
Lompatan
yang dapat dilakukan berada di area 2 Kbyte
2. LCALL
alamat-16b
Lompatan
yang dapat dilakukan berada di area 64 Kbyte
-
JMP alamat
Instruksi
ini melakukan lompatan ke suatu tempat yang diuntjuk oleh alamat/label. Ada beberapa
instukrsi JMP
1. SJMP
alamat-8b
Lompatan
yang dapat dilakukan berada di area 256 alamat
2. AJMP
alamat-11b
Lompatan
yang dapat dilakukan berada di area 2 Kbyte
3. LJMP alamat-16b
Lompatan
yang dapat dilakukan berada diarea 64 Kbyte
Percabangan Bersyarat
Percabangan
bersyarat yaitu instruksi yang akan melaksanakan percabangan ke suatu instruksi
lain jika kondisinya terpenuhi, jika kondisi tidak terpenuhi maka instruksi
selanjutnya (di bawahnya) yang akan dieksekusi. Instruksi percabangan dapat
dikelompokkan menjadi tiga group, yaitu :
1. Menguji satu bit flag
2. Membandingkan bilangan
bertanda
3. Membandingkan bilangan tak bertanda
Menguji Satu Bit Instruksi
|
Deskripsi
|
Kondisi
|
JZ, JE
|
Jump if Zero (Equel)
|
ZF =
1
|
JC , JB, JNAE
|
Jump if Carry (Below, Not
Above Equal).
|
CF =
1
|
JS
|
Jump if Sign.
|
SF =
1
|
JO
|
Jump if Overflow
|
OF =
1
|
JPE, JP
|
Jump
if Parity Even.
|
PF =
1
|
JNZ , JNE
|
Jump
if Not Zero (Not Equal).
|
ZF =
0
|
JNC , JNB, JAE
|
Jump
if Not Carry (Not Below, Above Equal).
|
CF =
0
|
JNS
|
Jump
if Not Sign.
|
SF =
0
|
JNO
|
Jump
if Not Overflow.
|
OF =
0
|
JPO, JNP
|
Jump
if Parity Odd (No Parity).
|
PF =
0
|
Membandingkan
Bilangan Bertanda Instruksi
|
Deskripsi
|
Kondisi
|
JE , JZ
|
Jump if Equal (=). Jump if Zero.
|
ZF = 1
|
JNE , JNZ
|
Jump if Not Equal (<>). Jump if Not
Zero.
|
ZF = 0
|
JG , JNLE
|
Jump if Greater (>). Jump if Not Less or
Equal (not <=)
|
ZF = 0 and
SF = OF
|
JL , JNGE
|
Jump if Less (<). Jump if Not Greater or
Equal (not >=).
|
SF <> OF
|
JGE , JNL
|
Jump if Greater or Equal (>=). Jump if
Not Less (not <).
|
SF = OF
|
JLE , JNG
|
Jump if Less or Equal (<=).Jump if Not
Greater (not >).
|
ZF = 1 or
SF <> OF
|
Membandingkan
bilangan tak bertanda Instruksi
|
Deskripsi
|
Kondisi
|
JE , JZ
|
Jump if Equal (=). Jump if Zero.
|
ZF = 1
|
JNE , JNZ
|
Jump if Not Equal (<>). Jump if Not
Zero.
|
ZF = 0
|
JA , JNBE
|
Jump if Above (>). Jump if Not Below or
Equal (not <=).
|
CF = 0 and
ZF = 0
|
JB , JNAE, JC
|
Jump if Below (<). Jump if Not Above or
Equal (not >=). Jump if Carry.
|
CF = 1
|
JAE , JNB, JNC
|
Jump if Above or Equal (>=). Jump if Not
Below (not <). Jump if Not Carry.
|
CF = 0
|
JBE , JNA
|
Jump if Below or Equal (<=). Jump if Not
Above (not >).
|
CF = 1 or ZF = 1
|
Sintaks:
OP-CODE
label
Contoh:
MOV
AL,5
MOV
BL,5
CMP
AL,BL
JE
stop
ADD BL
stop:RET
Secara
umum jika akan membandingkan dua buah bilangan maka menggunakan instruksi CMP.
Bahan
dan ALat
- Personal Komputer
- Program EMU8086