Mode Pengalamatan Memori 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
Bahasa mesin sepanjang 5 byte dari instruksi JMP (10000H) Opcode Offset (rendah) Offset (tinggi) Segmen (rendah) Segmen (tinggi) EA 00 00 00 10 Bahasa mesin sepanjang 5 byte dari instruksi JMP (10000H) NEXT
Pengalamatan Program Memori Relatif 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 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. NEXT
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 NEXT
TABEL 3-10 Contoh pengalamatan program memori tak langsung. TABEL 3-10 Contoh pengalamatan program memori tak langsung. Bahasa Assembly Operasi JMP AX Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi AX JMP CX Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi CX JMP NEAR PTR [BX] Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi lokasi memori segmen data yang dialamati oleh BX JMP NEAR PTR [DI+ 2] Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi lokasi memori segmen data yang dialamati oleh DI ditambah 2 JMP TABLE [BX] Melompat ke lokasi segmen kode saat itu yang dialamati oleh isi lokasi memori segmen data yang dialamati oleh TABLE ditambah BX JMP ECX 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. NEXT
NEXT
TABEL 3-11 Contoh pengalamatan program memori tak langsung. TABEL 3-11 Contoh pengalamatan program memori tak langsung. Bahasa Assembly Operasi POPF Memindahkan word dari stack dan menempatkannya ke dalam flag POPFD Memindahkan doubleword dari stack dan menempatkannya ke dalam register EFLAG PUSHF Menyalin flag ke dalam stack PUSHFD Menyalin register EFLAG ke dalam stack PUSH AX Menyalin AX ke dalam stack POP BX Memindahkan word dari stack dan menempatkannya ke dalam BX PUSH DS Menyalin DS ke dalam stack PUSH 1234H Menyalin 1234H ke dalam stack POP CS Instruksi illegal PUSH WORD PTR[BX] Menyalin word dari lokasi memori segmen data yang dialamati BX ke dalam stack PUSHA Menyalin isi word dari AX, CX, DX, BX, SP, BP, DI, dan SI ke dalam stack POPA Memindahkan data dari stack dan menempatkannya ke dalam SI, DI, BP, SP, BX, DX, CX, dan AX PUSHAD Menyalin isi doubleword dari EAX, ECX, EDX, EBX, ESP, EBP, EDI, dan ESI ke dalam stack POPAD Memindahkan data dari stack dan menempatkannya ke dalam ESI, EDI, EBP, ESP, EBX, EDX, ECX, dan EAX POPEAX Memindahkan data dari stack dan menempatkannya dalam EAX PUSH EDI Menyalin EDI ke dalam stack 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