Tags : chipProgrammablerobotMCS-51Pemrograman8051TeknologiAlteraFPGAMikrokontrolerMikroprosesorPLCVHDL
Home » Mikrokontroler » Perintah Pencabangan Program (ACALL – SJMP)

Perintah Pencabangan Program (ACALL – SJMP)

Oleh , 17 Juli 2009.

Perintah Pencabangan Program

ACALL

Panggilan mutlak digunakan untuk memanggil subrutin yang berada dalam jangkauan 2K dari memori program, dimulai dari byte berikutnya mengikuti perintah ACALL. Ini adalah perintah 2-byte. Ini tidak mempengaruhi flag PSW manapun. Byte kode perintahnya memiliki alamat 11-bit, dibutuhkan untuk mengalamatkan ruang memory 2K, sebagaimana yang ditunjukkan gbr.1:

fig4 7 1024x185 Perintah Pencabangan Program (ACALL   SJMP)

Gambar 1

Alamat-alamat 11 bit berikut ini terhubung dengan isi konter program yang ditambahkan untuk memperoleh alamat tujuan, dimana subrutin yang akan dipanggil berada. Ini ditunjukkan oleh gambar selanjutnya. Perintah ACALL pertama-tama menambahkan konter program sebanyak dua, karena perintahnya memiliki panjang 2-byte, contohnya: (PC) = (PC) + 2. Lalu penunjuk stack-nya ditambahkan sebanyak 1; (SP) = (SP) +1. Di lokasi ini dalam stack, tersimpan byte lebih rendah dari konter program. Penunjuk stack ditambahkan (SP) = (SP) + 1 dan byte yang lebih tinggi dari konter program yang mengikutinya disimpan.

AJMP (Absolute Jump)

AJMP adalah perintah jump mutlak. Jump dalam 2 KB dimulai dari alamat yang mengikuti perintah AJMP. Ini mentransfer kendali program ke lokasi dimana alamat dikalkulasi dengan cara yang sama dengan perintah ACALL, sebagaimana ditunjukkan dalam gbr.2. Konter program ditambahkan dua kali dimana perintah AJMP adalah perintah 2-byte. Konter program di-load dengan a10 – a0 11 bits, sebagaimana ditunjukkan di gbr.2:

fig4 8 copy 1024x659 Perintah Pencabangan Program (ACALL   SJMP)

untuk membentuk alamat tujuan 16-bit. Pengkodean perintah AJMP ditunjukkan oleh gbr.3. Perhatikanlah perbedaannya dalam pengkodean perintah AJMP dan ACALL yang ditunjukkan oleh gbr.1 dan gbr.3.

fig4 9 1024x185 Perintah Pencabangan Program (ACALL   SJMP)

Lebih jauh lagi, kita perlu melihat perbedaan antara perintah jump and call. Berkaitan dengan perintah AJMP, saat kendali program ditransfer ke alamat tujuan, program lanjut berjalan dari tempat tersebut, dimana perintah ACALL mentransfer kendali ke alamat tujuan dan kendali dikembalikan ke alamat mengikuti perintah ACALL berkaitan dengan perintah RET. Alamat return disimpan dalam stack sebelum mentransfer kendali ke alamat tujuan. Maka, dalam semua kasus perintah Jump, baik stack maupun penunjuk stack dituliskan.

­­­­

SJMP (Short Jump)

Sebuah Short Jump mentransfer kendali ke alamat tujuan dalam 127 bytes yang mengikuti dan 128 yang mengawali perintah SJMP. Alamat tujuannya ditentukan sebagai sebuat alamat relative 8-bit. Ini adalah Jump tidak bersyarat. Perintah SJMP menambahkan konter program sebanyak 2 dan menambahkan alamat relatif ke dalamnya untuk mendapatkan alamat tujuan. Alamat relatif tersebut ditentukan dalam perintah sebagai ‘SJMP rel’. Sebagai contoh, lihatlah perintah berikut dengan alamat tujuannya, yang membentuk loop tidak terbatas.

fig4 9b Perintah Pencabangan Program (ACALL   SJMP)

Perintah SJMP diatas berlokasi di alamat yang terkait dengan label ‘HERE’, yaitu 0100h. Mari kita mengkalkulasi alamat tujuan:

(i)      Tambahkan ‘2’ ke konter program, contoh: 0100H + 02H = 0102H. Sekarang PC akan mempunyai 0102H

(ii)    Sekarang tambahkan alamat relative ke PC. Untuk alamat tujuan 0100H, kita perlu mengurangi sebanyak 2. Atau alamat relatifnya sebanyak -2. Alamatnya harus berada dalam bentuk pengganti ‘2’. 2 pengganti -2 adalah FEH. Maka, perintah ‘SJMP FEH’ akan membentuk loop yang tidak terbatas.­­­

· kirim komentar

Komentar

Tambahkan komentar anda di bawah, atau trackback dari situs anda. Berlangganan komentar ini melalui RSS.

Silahkan berdiskusi yang padat dan berisi. Tetap pada topik. Dilarang spam.