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