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.
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.
Opcode Offset (rendah) Offset (tinggi) Segmen (rendah) Segmen (tinggi) EA 00 00 00 10 Bahasa mesin sepanjang 5 byte dari instruksi JMP (10000H)
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.
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 16- bit (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.
GAMBAR 3-15 Instruksi JMP [2]. Instruksi ini melompati 2 10000 EB JMP [2] byte memori yang mengikuti 10001 02 instruksi JMP. 10002 10003 10004
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 TABLE DW LOC0 menyimpan alamat berbagai program. DW LOC1 Alamat sebenarnya yang dipilih dari DW LOC2 TABLE ditentukan oleh indeks yang DW LOC3 tersimpan dalam instruksi lompatan.
TABEL 3-11 Contoh pengalamatan program memori tak langsung. Bahasa Assembly POPF POPFD PUSHF PUSHFD PUSH AX POP BX PUSH DS PUSH 1234H POP CS PUSH WORD PTR[BX] PUSHA POPA PUSHAD POPAD POPEAX PUSH EDI Operasi 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
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!
Terima Kasih TUTUP