Pointer instruksi adalah sebuah register khusus yang menyimpan alamat memori dari instruksi program yang sedang dieksekusi oleh prosesor. Pointer instruksi berfungsi untuk menunjukkan instruksi program mana yang harus diambil dan dieksekusi selanjutnya oleh prosesor.
Pada umumnya, pointer instruksi bisa bertambah secara otomatis setelah mengambil instruksi program, sehingga instruksi biasanya diambil secara berurutan dari memori, dengan instruksi tertentu, seperti cabang, melompat dan panggilan subrutin dan kembali, mengganggu urutan dengan menempatkan nilai baru dalam pointer instruksi.
Lalu, mengapa pointer instruksi bisa bertambah secara otomatis setelah mengambil instruksi program? Hal ini terjadi karena adanya mekanisme yang disebut sebagai incrementing atau penambahan. Incrementing adalah proses menambahkan nilai tertentu ke dalam pointer instruksi setelah mengambil instruksi program dari memori.
Nilai yang ditambahkan ke dalam pointer instruksi biasanya sama dengan panjang atau ukuran dari instruksi program yang diambil. Misalnya, jika panjang instruksi program adalah 4 byte, maka pointer instruksi akan ditambahkan 4 byte setelah mengambil instruksi program tersebut. Dengan demikian, pointer instruksi akan menunjuk ke alamat memori berikutnya yang berisi instruksi program selanjutnya.
Incrementing ini dilakukan secara otomatis oleh prosesor tanpa perlu adanya instruksi khusus. Hal ini memudahkan prosesor untuk mengambil dan mengeksekusi instruksi program secara berurutan tanpa perlu menghitung atau mencari alamat memori dari instruksi program selanjutnya.
Namun, incrementing ini tidak selalu berlaku untuk semua jenis instruksi program. Ada beberapa instruksi program yang dapat mengubah nilai dari pointer instruksi secara langsung, sehingga mengganggu urutan pengambilan dan eksekusi instruksi program. Instruksi-instruksi ini antara lain adalah:
- Cabang atau branch. Instruksi ini digunakan untuk melakukan percabangan atau pengkondisian dalam program. Instruksi ini akan memeriksa kondisi tertentu, seperti nilai dari register, flag, atau variabel, dan kemudian memutuskan apakah akan melanjutkan eksekusi instruksi program secara berurutan atau melompat ke alamat memori lain yang berisi instruksi program yang diinginkan. Contoh instruksi cabang adalah BEQ (Branch if Equal), BNE (Branch if Not Equal), BGT (Branch if Greater Than), dan sebagainya.
- Melompat atau jump. Instruksi ini digunakan untuk melakukan lompatan atau perpindahan dalam program tanpa memeriksa kondisi apapun. Instruksi ini akan langsung mengubah nilai dari pointer instruksi dengan alamat memori yang ditentukan oleh operand instruksi. Contoh instruksi melompat adalah JMP (Jump), JAL (Jump and Link), dan sebagainya.
- Panggilan subrutin atau call. Instruksi ini digunakan untuk memanggil subrutin atau fungsi dalam program. Instruksi ini akan menyimpan alamat memori dari instruksi program berikutnya setelah panggilan subrutin ke dalam sebuah register khusus yang disebut sebagai stack pointer atau pointer tumpukan. Kemudian, instruksi ini akan mengubah nilai dari pointer instruksi dengan alamat memori dari subrutin atau fungsi yang dipanggil. Contoh instruksi panggilan subrutin adalah CALL, BL (Branch and Link), dan sebagainya.
- Kembali atau return. Instruksi ini digunakan untuk kembali dari subrutin atau fungsi yang dipanggil sebelumnya. Instruksi ini akan mengambil alamat memori dari instruksi program berikutnya setelah panggilan subrutin dari register stack pointer, dan kemudian mengubah nilai dari pointer instruksi dengan alamat memori tersebut. Contoh instruksi kembali adalah RET, JR (Jump Register), dan sebagainya.
Dengan adanya instruksi-instruksi ini, pointer instruksi tidak selalu bertambah secara otomatis setelah mengambil instruksi program, tetapi bisa juga berubah sesuai dengan alamat memori yang ditentukan oleh instruksi-instruksi tersebut. Hal ini memungkinkan prosesor untuk melakukan kontrol alur program yang lebih kompleks dan fleksibel.
Demikianlah penjelasan mengenai mengapa pointer instruksi bisa bertambah secara otomatis setelah mengambil instruksi program. Semoga artikel ini bermanfaat dan menambah wawasan Anda tentang pemrograman.