MODE PENGALAMATAN PROGRAM MEMORI Mode pengalamatan program memori menggunakan instruksi JMP dan CALL, terdiri dari tiga bentuk yang berbeda: langsung, relatif, dan tak langsung. Bagian ini mengenal tiga bentuk pengalamatan diatas dengan menggunakan instruksi JMP untuk mengilustrasikan operasinya. NEXT Pengalamatan Program Memori Langsung Pengalamatan program memori langsung adalah pengalamatan yang digunakan mikroprosesor pertama untuk semua lompatan (jump) dan panggilan (call). Pengalamatan program memori langsung juga digunakan dalam bahasa tingkat tinggi seperti bahasa BASIC dengan instruksi GOTO dan GOSUB. Mikroprosesor menggunakan bentuk pengalamatan ini, tetapi tidak sesering penggunaan pengalamatan program memori relatif dan tidak langsung. NEXT Opcode EA Offset (rendah) Offset (tinggi) Segmen (rendah) Segmen (tinggi) 00 00 00 10 Bahasa mesin sepanjang 5 byte dari instruksi JMP (10000H) NEXT Pengalamatan Program Memori Relatif Pengalamatan program memori relatif tidak terdapat dalam mikroprosesor awal, melainkan pada keluarga mikroprosesor ini. Istilah relatif berarti ”relatif terhadap pointer instruksi (IP)”. Sebagai contoh, jika instruksi JMP melompati memori dua byte berikutnya, alamat yang berhubungan dengan pointer instruksi adalah 2 ditambah pointer instruksi. Hasil penjumlahan tersebut menghasilkan alamat instruksi program selanjutnya. Sebuah contoh instruksi JMP relatif ditunjukkan pada gambar 3-15. perhatikan bahwa instruksi JMP adalah instruksi satu byte, dengan displacement satu byte atau dua byte yang menambah pointer instruksi. Displacement satu byte digunakan pada short jump, dan displacement dua byte digunakan untuk near jump dan call. Kedua jenis lompatan tersebut termasuk lompatan intrasegmen. (lompatan intrasegmen adalah lompatan disetiap tempat dalam suatu segmen kode). Pada 80386 ke atas, displacement dapat memunyai nilai 32-bit, sehingga mampu menggunakan pengalamatan relatif di setiap lokasi dalam 4G byte segmen kodenya. NEXT Pengalamatan Program Memori Tak Langsung Mikroprosesor mengizinkan beberapa bentuk pengalamatan program memori tak langsung dengan instruksi JMP dan CALL. Tabel 3-10 merupakan daftar beberapa instruksi lompatan program tak langsung yang diizinkan, yang dapat menggunakan register 16bit (AX, BX, CX, DX, SP, BP, DI, atau SI); register relatif ([BP], [BX], [DI], atau [SI]); dan register setiap relatif dengan suatu displacement. Pada 80386 ke atas, extended register juga dapat digunakan untuk menyimpan alamat atau alamat tak langsung dari JMP atau CALL relatif. Sebagai contoh, JMP EAX akan menyebabkan program melompat ke lokasi memori yang dialamati register EAX. NEXT GAMBAR 3-15 Instruksi JMP [2]. Instruksi ini melompati 2 byte memori yang mengikuti instruksi JMP. 10000 10001 10002 10003 10004 EB 02 — — JMP [2] NEXT TABEL 3-10 Contoh pengalamatan program memori tak langsung. Bahasa Assembly JMP AX JMP CX JMP NEAR PTR [BX] JMP NEAR PTR [DI+ 2] JMP TABLE [BX] JMP ECX Operasi Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi AX Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi CX Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi lokasi memori segmen data yang dialamati oleh BX Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi lokasi memori segmen data yang dialamati oleh DI ditambah 2 Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi lokasi memori segmen data yang dialamati oleh TABLE ditambah BX Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi ECX GAMBAR 3-16 Tabel lompatan yang menyimpan alamat berbagai program. Alamat sebenarnya yang dipilih dari TABLE ditentukan oleh indeks yang tersimpan dalam instruksi lompatan. TABLE DW DW DW DW LOC1 LOC2 LOC3 LOC0 NEXT NEXT TABEL 3-11 Contoh pengalamatan program memori tak langsung. Bahasa Assembly Operasi POPF POPFD Memindahkan word dari stack dan menempatkannya ke dalam flag Memindahkan doubleword dari stack dan menempatkannya ke dalam register EFLAG Menyalin flag ke dalam stack Menyalin register EFLAG ke dalam stack Menyalin AX ke dalam stack Memindahkan word dari stack dan menempatkannya ke dalam BX Menyalin DS ke dalam stack Menyalin 1234H ke dalam stack Instruksi illegal Menyalin word dari lokasi memori segmen data yang dialamati BX ke dalam stack Menyalin isi word dari AX, CX, DX, BX, SP, BP, DI, dan SI ke dalam stack Memindahkan data dari stack dan menempatkannya ke dalam SI, DI, BP, SP, BX, DX, CX, dan AX Menyalin isi doubleword dari EAX, ECX, EDX, EBX, ESP, EBP, EDI, dan ESI ke dalam stack Memindahkan data dari stack dan menempatkannya ke dalam ESI, EDI, EBP, ESP, EBX, EDX, ECX, dan EAX Memindahkan data dari stack dan menempatkannya dalam EAX Menyalin EDI ke dalam stack PUSHF PUSHFD PUSH AX POP BX PUSH DS PUSH 1234H POP CS PUSH WORD PTR[BX] PUSHA POPA PUSHAD POPAD POPEAX PUSH EDI NEXT Soal 1. Buatlah contoh tabel pengalamatan program memori tak langsung dan contoh pengalamatan program memori tak langsung! 2. Jelaskan dan gambarkan instruksi PUSH dan POP dimana PUSH BX menempatkan isi BX ke dalam stack dan POP CX memindahkan data dari stack dan menempatkannya ke dalam CX! NEXT TUTUP Terima Kasih