ACALL addr11
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
2
|
ACALL Addr11
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan lompatan ke suatu subroutine yang ditunjuk oleh alamat pada addr11. Lompatan yang dapat dilakukan berada di area sebesar 2K byte.
Proses yang terjadi pada saat instruksi ini dikerjakan adalah sebagai berikut:
- Data pada Program Counter + 2 yang merupakan alamat program saat kembali dari subroutine disimpan ke dalam stack
- Stack pointer bertambah 2 kali
- Melakukan lompatan ke alamat yang ditunjuk oleh addr11 dengan mengisi Program Counter dengan alamat tersebut. Alamat yang diisikan ke Program Counter hanya 11 bit sehingga lompatan maksimum hanya sebesar 2K byte.
Contoh:
2000 Acall Lompatan1 ………… ………… Lompatan1 2100 Mov A,#00H
Data pada Program Counter + 2 yaitu 2002H disimpan pada stack di mana byte tinggi disimpan di alamat yang ditunjuk oleh SP+1 dan byte rendah disimpan di alamat yang ditunjuk oleh SP+2. Apabila sebelumnya posisi SP berada di alamat 10H maka byte tinggi, 20H akan disimpan di alamat 11H dan byte rendah, 02H disimpan di 12H. Kemudian data 11 bit pada alamat lompatan 1 dipindah ke Program Counter.
LCALL addr16
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
3
|
LCALL Addr16
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan lompatan ke suatu subroutine yang ditunjuk oleh alamat pada addr16. Lompatan yang dapat dilakukan berada di area sebesar 64K byte.
Proses yang terjadi pada saat instruksi ini dikerjakan adalah sebagai berikut:
- Data pada Program Counter + 2 yang merupakan alamat program saat kembali dari subroutine disimpan ke dalam stack
- Stack pointer bertambah 2 kali
- Melakukan lompatan ke alamat yang ditunjuk oleh addr16 dengan mengisi Program Counter dengan alamat tersebut. Alamat yang diisikan ke Program Counter adalah 16 bit sehingga lompatan maksimum dapat mencapai 64K byte.
Contoh:
2000 Lcall Lompatan1 ………… ………… Lompatan1 3000 Mov A,#00H
Data pada Program Counter + 2 yaitu 2002H disimpan pada stack di mana byte tinggi disimpan di alamat yang ditunjuk oleh SP+1 dan byte rendah disimpan di alamat yang ditunjuk oleh SP+2. Apabila sebelumnya posisi SP berada di alamat 10H maka byte tinggi, 20H akan disimpan di alamat 11H dan byte rendah, 02H disimpan di 12H. Kemudian data 16 bit pada alamat lompatan 1 dipindah ke Program Counter yaitu 3000H.
RET
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
1
|
RET
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan lompatan ke alamat yang disimpan dalam SP dan SP-1. Instruksi ini biasa digunakan pada saat kembali dari subroutine yang dipanggil dengan instruksi ACALL atau LCALL.
Proses yang terjadi adalah sebagai berikut:
- Isi dari alamat yang ditunjuk oleh stack pointer dipindah ke Program Counter nibble tinggi
- Stack pointer berkurang 1
- Isi dari alamat yang ditunjuk oleh stack pointer dipindah ke Program Counter nibble rendah
- Stack pointer berkurang 1.
Contoh:
2000 Lcall Lompatan1 2002 ……….… ………… ………… Lompatan1 3000 Mov A,#00H 3002 Ret
Saat instruksi RET dijalankan maka data 20H di stack pointer dipindah ke Program Counter nibble tinggi, dan data 02H di stack pointer –1 dipindah ke Program Counter nibble rendah, sehingga isi dari Program Counter menjadi 2002H dan otomatis program akan menjalankan instruksi di alamat 2002H.
RETI
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
1
|
RETI
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan lompatan ke alamat yang disimpan dalam SP dan SP-1 dan mengembalikan kondisi flag-flag interrupt agar interrupt berikutnya dengan prioritas yang sama dapat dilakukan.
Pada saat terjadi interrupt, data pada PC+2 yang merupakan alamat tempat program harus kembali setelah proses interrupt selesai dilakukan tersimpan dalam SP dan SP-1, maka setelah instruksi RETI dijalankan, alamat pada SP dan SP-1 dipindah ke Program Counter dan program melompat ke alamat tempat akhir instruksi yang sedang dijalankan saat interrupt terdeteksi.
AJMP addr11
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
2
|
AJMP Addr11
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Absolute Jump, melompat dan menjalankan program yang berada di alamat yang ditentukan oleh addr11. Proses yang terjadi adalah, 11 bit dari alamat yang ditentukan oleh addr11 dipindah ke Program Counter sehingga program akan langsung menjalankan instruksi yang ada pada alamat tersebut.
Contoh:
AJMP Lompatan1 Mov A,#05H Lompatan1: Mov R0,#00H
Program akan melompat ke alamat lompatan 1 dan menjalankan instruksi Mov R0,#00H.tanpa melalui instruksi MOV A,#05H.
LJMP addr16
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
3
|
LJMP Addr16
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Long Jump, melompat dan menjalankan program yang berada di alamat yang ditentukan oleh addr16. Proses yang terjadi adalah, 16 bit dari alamat yang ditentukan oleh addr16 dipindah ke Program Counter sehingga program akan langsung menjalankan instruksi yang ada pada alamat tersebut.
Contoh:
LJMP Lompatan2 Mov A,#05H Lompatan2: Mov R0,#00H
Program akan melompat ke alamat lompatan 2 dan menjalankan instruksi Mov R0,#00H.tanpa melalui instruksi MOV A,#05H.
SJMP rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
2
|
SJMP rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Short Jump, melakukan lompatan ke alamat yang ditentukan oleh rel dengan lompatan maksimum sebesar 128 byte.
JMP @A+DPTR
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
1
|
JMP @A+DPTR
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan lompatan ke alamat yang dihasilkan oleh penjumlahan antara DPTR dan akumulator A.
Contoh:
Mov A,#05H Mov DPTR,#2000H JMP A,@A+DPTR
Saat instruksi JMP A,@A+DPTR terjadi maka terjadi lompatan ke alamat 2000H + 5H yaitu 2005H dan menjalankan instruksi yang ada di alamat tersebut.
JZ rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
2
|
JZ rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan lompatan ke alamat yang ditentukan apabila akumulator A adalah 00H dan langsung meneruskan instruksi dibawahnya bila akumulator A tidak 00H.
Contoh:
JZ Lompat1 MOV A,#07H Lompat1: MOV B,#00H
Apabila nilai akumulator A tidak 00H maka program akan langsung meneruskan instruksi dibawahnya yaitu MOV A,#07H dan program akan menjalankan instruksi di alamat Lompat1 yaitu MOV B,#00H apabila nilai akumulator A adalah 00H.
JNZ rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
2
|
JNZ rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan lompatan ke alamat yang ditentukan apabila akumulator A adalah bukan 00H dan langsung meneruskan instruksi dibawahnya bila akumulator A adalah 00H.
Contoh:
JNZ Lompat1 MOV A,#07H Lompat1: MOV B,#00H
Apabila nilai akumulator A adalah 00H maka program akan langsung meneruskan instruksi dibawahnya yaitu MOV A,#07H dan program akan menjalankan instruksi di alamat Lompat1 yaitu MOV B,#00H apabila nilai akumulator A adalah bukan 00H.
CJNE
Instruksi ini melakukan perbandingan antara data tujuan dan data sumber serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.
Bentuk perintah:
CJNE data tujuan, data sumber, alamat lompatan
Carry flag akan set apabila data tujuan lebih kecil dari data sumber.
CJNE A,direct,rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
3
|
CJNE A,direct,rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
X
|
Melakukan perbandingan antara akumulator A dan alamat langsung serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.
Contoh:
CJNE A,00H,lompat1
Program akan menuju ke alamat lompat 1 apabila data akumulator A tidak sama dengan data yang ada pada alamat 00H.
CJNE A,#data,rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
3
|
CJNE A,#data,rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
X
|
Melakukan perbandingan antara akumulator A dan data immediate serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.
Contoh:
CJNE A,#00H,lompat1
Program akan menuju ke alamat lompat 1 apabila data akumulator A tidak sama dengan data 00H..
CJNE Rn,#data,rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
3
|
CJNE Rn,#data,rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
X
|
Melakukan perbandingan antara Rn (R0…R7) dan data immediate serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.
Contoh:
CJNE R1,#00H,lompat1
Program akan menuju ke alamat lompat 1 apabila data pada R1 tidak sama dengan data yang ada pada alamat 00H.
CJNE @Ri,#data,rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
3
|
CJNE @Ri,#data,rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
X
|
Melakukan perbandingan antara data yang terletak pada alamat yang ditunjuk oleh Register Index (R0 atau R1) dan data immediate serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.
Contoh:
CJNE @R1,#00H,lompat1
Program akan menuju ke alamat lompat 1 apabila data di alamat yang ditunjuk oleh R1 tidak sama dengan data 00H.
DJNZ Rn,rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
2
|
DJNZ Rn,rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan pengurangan pada Rn (R0…R7) dengan 1 dan lompat ke alamat yang ditentukan apabila hasilnya bukan 00. Apabila hasilnya telah mencapai 00, maka program akan terus menjalankan instruksi di bawahnya.
Contoh:
Tunggu: DJNZ R7,Tunggu RET
Selalu melakukan lompatan ke alamat tunggu dan mengurangi R7 dengan 1 selama nilai R7 belum mencapai 00
DJNZ direct,rel
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
2
|
3
|
DJNZ direct,rel
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Melakukan pengurangan pada data di alamat yang ditunjuk secara langsung dengan 1 dan lompat ke alamat yang ditentukan apabila hasilnya bukan 00. Apabila hasilnya telah mencapai 00, maka program akan terus menjalankan instruksi di bawahnya.
Contoh:
Tunggu: DJNZ 07H,Tunggu RET
Selalu melakukan lompatan ke alamat tunggu dan mengurangi data pada alamat 07H dengan 1 selama nilai pada data yang berada pada alamat 07H belum mencapai 00
NOP
Siklus
|
Jumlah Byte
|
Instruksi
| |||||||
1
|
1
|
NOP
| |||||||
Flag
|
C
|
AC
|
F0
|
RS1
|
RS0
|
OV
|
P
| ||
Instruksi ini berfungsi untuk melakukan tundaan pada program sebesar 1 cycle tanpa mempengaruhi register-register maupun flag.
Tidak ada komentar:
Posting Komentar