Mikroprosesor merupakan pusat pemrosesan utama dalam sistem komputer yang bertugas mengeksekusi instruksi program, melakukan operasi aritmetika maupun logika, serta mengatur komunikasi antara memori dan perangkat input/output. Sebagai otak dari komputer, mikroprosesor dirancang dengan arsitektur internal yang memungkinkan ribuan hingga jutaan instruksi dapat dijalankan setiap detik. Arsitektur ini terdiri atas unit pengendali, unit logika aritmetika (ALU), register, serta jalur data yang saling terhubung untuk membentuk suatu sistem pemrosesan yang terorganisasi.
Model pemrograman mikroprosesor, yang mencakup kumpulan register dan flag, memberikan gambaran bagaimana perangkat lunak dapat berinteraksi langsung dengan perangkat keras. Setiap register memiliki fungsi tertentu, mulai dari penyimpanan data sementara, penunjuk alamat memori, hingga pengendalian status operasi. Dalam perkembangannya, arsitektur mikroprosesor juga mengenal berbagai mode pengalamatan memori, seperti real mode yang sederhana, protected mode dengan sistem proteksi antar proses, hingga flat memory model pada prosesor modern yang mendukung pengelolaan ruang alamat lebih luas dan efisien.
Kemajuan arsitektur mikroprosesor tidak hanya terbatas pada peningkatan kecepatan dan kapasitas memori yang dapat diakses, tetapi juga mencakup teknologi seperti paging untuk mendukung konsep memori virtual, serta mekanisme pengelolaan data yang lebih kompleks. Semua aspek tersebut menjadikan mikroprosesor sebagai inti dari sistem komputer modern, yang memungkinkan perangkat ini tidak hanya sekadar menghitung, tetapi juga mengendalikan berbagai proses komputasi yang mendukung kebutuhan manusia di berbagai bidang.
Tujuan
Penulisan ini bertujuan untuk:
1. Menjelaskan arsitektur internal mikroprosesor secara sederhana.
2. Menjelaskan model pemrograman yang ada.
3. Memberikan informasi tentang apa itu register serbaguna dan register khusus.
4. Mendeskripsikan apa itu real mode memory addressing.
5. Memberikan gambaran umum mengenai Protected Mode Memory Addressing
6. Mengetahui cara kerja dari memory paging.
7. Mengetahui apa itu flat memory model
Arsitektur internal mikroprosesor dapat dipahami melalui model pemrograman (programming model) yang terdiri atas kumpulan register yang dapat diakses oleh program. Register-register ini digunakan untuk menyimpan data, alamat memori, maupun status operasi yang sedang dijalankan.
Pada mikroprosesor keluarga Intel (mulai dari 8086 hingga Core2, termasuk ekstensi 64-bit), register dikelompokkan menjadi beberapa bagian, yaitu:
-
Register Serbaguna (General-Purpose Registers):
Digunakan untuk operasi aritmetika, logika, maupun penyimpanan sementara. Contohnya AX, BX, CX, DX pada 16-bit; EAX, EBX, ECX, EDX pada 32-bit; serta RAX, RBX, RCX, RDX hingga R15 pada 64-bit. Register Penunjuk dan Indeks (Pointer and Index Registers):
Digunakan untuk pengalamatan memori, misalnya SP (Stack Pointer), BP (Base Pointer), SI (Source Index), dan DI (Destination Index).-
Register Segmen (Segment Registers):
Menyimpan alamat dasar segmen memori, seperti CS (Code Segment), DS (Data Segment), SS (Stack Segment), serta ES, FS, dan GS untuk keperluan tambahan. -
Instruction Pointer (IP/EIP/RIP):
Menunjuk alamat instruksi berikutnya yang akan dieksekusi. -
Register Status/Flag (FLAGS/EFLAGS/RFLAGS):
Berisi bit-bit status yang menunjukkan hasil operasi (misalnya Zero Flag, Carry Flag, Sign Flag) serta kontrol eksekusi program.
Keseluruhan register tersebut saling terhubung melalui jalur data (data bus) dan dikendalikan oleh unit kontrol serta unit logika aritmetika (ALU). Dengan arsitektur ini, mikroprosesor mampu melakukan pemrosesan data, pengambilan instruksi dari memori, dan pengendalian alur program secara terkoordinasi.
Model pemrograman pada mikroprosesor Intel mulai dari 8086 hingga Core2 terdiri atas register 8-bit, 16-bit, 32-bit, dan 64-bit. Mikroprosesor awal seperti 8086, 8088, dan 80286 hanya memiliki register 16-bit internal. Sejak 80386, seluruh register diperluas menjadi 32-bit, dan pada Pentium 4 serta Core2 ditambahkan ekstensi 64-bit. Dengan demikian, kompatibilitas antar generasi tetap terjaga, sementara kemampuan prosesor semakin meningkat.
Register 8-bit meliputi AH, AL, BH, BL, CH, CL, DH, DL. Instruksi yang menggunakan register ini hanya memengaruhi 8-bit dari register induknya, misalnya instruksi ADD AL, AH
hanya mengubah bagian 8-bit bawah dari AX.
Register 16-bit meliputi AX, BX, CX, DX, SP, BP, DI, SI, IP, FLAGS, CS, DS, ES, SS, FS, GS. Sebagian besar register 16-bit merupakan pasangan dari register 8-bit. Contoh: AX terdiri dari AH dan AL. Instruksi seperti ADD DX, CX
akan menambahkan isi register CX ke DX.
Register 32-bit diperkenalkan pada 80386, yaitu EAX, EBX, ECX, EDX, EBP, EDI, ESI, ESP, EIP, EFLAGS. Register FS dan GS juga ditambahkan pada generasi ini untuk mendukung segmentasi tambahan. Instruksi 32-bit dapat mengakses langsung 32-bit data dalam register, misalnya ADD ECX, EBX
.
Register 64-bit mulai diperkenalkan pada Pentium 4 dan Core2, dengan nama RAX, RBX, RCX, RDX, RBP, RSP, RSI, RDI. Selain itu, ditambahkan 8 register baru R8–R15, yang masing-masing dapat diakses dalam ukuran 8-bit, 16-bit, 32-bit, maupun 64-bit. Ekstensi 64-bit ini memperluas kapasitas ruang register dan memungkinkan pengolahan data yang lebih besar.
3. Register Serbaguna dan Register Khusus [Kembali]
A. Register Serbaguna (General-Purpose Registers)
Register serbaguna digunakan untuk menyimpan data sementara, alamat, maupun hasil perhitungan. Walaupun disebut “serbaguna”, pada praktiknya banyak register memiliki fungsi khas.
-
RAX (Accumulator)
Berfungsi sebagai akumulator utama, digunakan dalam instruksi aritmetika seperti perkalian, pembagian, serta operasi penyesuaian. RAX dapat diakses sebagai RAX (64-bit), EAX (32-bit), AX (16-bit), dan AH/AL (8-bit). RBX (Base Register)
Digunakan sebagai base index untuk pengalamatan memori. RBX dapat diakses sebagai RBX (64-bit), EBX (32-bit), BX (16-bit), serta BH/BL (8-bit).-
RCX (Count Register)
Berfungsi sebagai penghitung pada instruksi perulangan (REP, REPE, REPNE) dan instruksi shift/rotate. RCX dapat diakses sebagai RCX (64-bit), ECX (32-bit), CX (16-bit), dan CH/CL (8-bit). -
RDX (Data Register)
Menyimpan bagian hasil perkalian atau bagian dividend sebelum pembagian. RDX dapat diakses sebagai RDX (64-bit), EDX (32-bit), DX (16-bit), dan DH/DL (8-bit). -
R8 – R15
Hanya tersedia pada prosesor 64-bit (Pentium 4, Core2, dan seterusnya). Semua dapat diakses dalam ukuran 8-bit, 16-bit, 32-bit, atau 64-bit, dan digunakan sebagai tambahan general-purpose registers.
Gambar ini menunjukkan isi dari register FLAGS/EFLAGS pada keluarga mikroprosesor Intel, mulai dari 8086 sampai Pentium 4. Register ini berfungsi menyimpan status hasil operasi dan kontrol eksekusi program.
1. Bit-bit penting dalam FLAGS/EFLAGS:
C (Carry Flag, bit 0) → Menunjukkan adanya carry/borrow pada operasi aritmetika. Fungsinya adalah mendeteksi apakah hasil penjumlahan atau pengurangan melampaui kapasitas register.
P (Parity Flag, bit 2) → Bernilai 1 jika hasil operasi memiliki jumlah bit 1 genap. Fungsinya adalah membantu pemeriksaan kesalahan sederhana (error checking) pada data.
A (Auxiliary Carry, bit 4) → Bernilai 1 jika terjadi carry (setengah carry) dari bit 3 ke bit 4 saat penjumlahan, atau borrow dari bit 4 ke bit 3 saat pengurangan. Fungsinya digunakan oleh instruksi DAA/DAS untuk menyesuaikan hasil aritmetika BCD.
Z (Zero Flag, bit 6) → Bernilai 1 jika hasil operasi bernilai 0. Fungsinya adalah digunakan pada instruksi percabangan (misalnya JZ, JNZ) untuk menentukan alur program.
S (Sign Flag, bit 7) → Menunjukkan tanda (positif/negatif) dari hasil operasi. Fungsinya adalah menentukan apakah hasil operasi aritmetika bertanda negatif.
T (Trap Flag, bit 8) → Bernilai 1 jika prosesor diatur ke mode single-step (trap). Fungsinya adalah memungkinkan prosesor menghentikan eksekusi setelah setiap instruksi, sehingga memudahkan proses debugging.
I (Interrupt Enable Flag, bit 9) → Bernilai 1 jika interupsi maskable diizinkan, dan 0 jika dinonaktifkan. Fungsinya adalah mengaktifkan atau menonaktifkan penerimaan interupsi eksternal melalui pin INTR.
D (Direction Flag, bit 10) → Menentukan arah pemrosesan pada instruksi string. Jika bernilai 0, indeks (SI/DI) akan bertambah setelah setiap operasi string; jika bernilai 1, indeks akan berkurang setelah setiap operasi string.
O (Overflow Flag, bit 11) → Menunjukkan overflow pada operasi bilangan bertanda. Fungsinya adalah mendeteksi kesalahan ketika hasil operasi signed tidak dapat ditampung dalam register.
IOPL (I/O Privilege Level, bit 12–13) → Menentukan tingkat hak akses (privilege level) yang diperlukan untuk menjalankan instruksi I/O (seperti IN, OUT). Nilai 0 memiliki hak akses tertinggi, sedangkan 3 paling rendah. Hanya dapat diubah saat prosesor berada pada level hak istimewa (ring 0).
NT (Nested Task, bit 14) → Bernilai 1 jika task yang sedang berjalan dipanggil oleh task lain (nested). Fungsinya adalah membantu mekanisme pengendalian task switching dalam mode terproteksi.
RF (Resume Flag, bit 16) → Digunakan oleh mekanisme debugging untuk melanjutkan eksekusi program setelah terjadi trap atau fault. Jika bernilai 1, prosesor akan melanjutkan eksekusi pada instruksi berikutnya setelah instruksi yang memicu trap.
VM (Virtual-8086 Mode, bit 17) → Bernilai 1 jika prosesor sedang berada pada mode Virtual-8086. Fungsinya adalah memungkinkan eksekusi program real-mode di dalam lingkungan protected-mode.
AC (Alignment Check, bit 18) → Bernilai 1 bila terjadi akses word/doubleword pada alamat yang tidak sejajar (misaligned). Fungsinya adalah mendeteksi kesalahan penyelarasan memori, terutama pada mode terproteksi.
- RF (Resume Flag, bit 16) → Digunakan oleh mekanisme debugging untuk melanjutkan eksekusi program setelah terjadi trap atau fault. Jika bernilai 1, prosesor akan melanjutkan instruksi berikutnya setelah yang memicu trap.
IF (Interrupt Enable, bit 9) → Mengizinkan atau menonaktifkan interupsi maskable. Fungsinya adalah mengaktifkan atau menonaktifkan penerimaan interupsi.
DF (Direction Flag, bit 10) → Menentukan arah operasi string (inkremen/dekrement). Fungsinya adalah menentukan apakah indeks (SI/DI) bertambah atau berkurang setiap kali operasi string dilakukan.
VIF (Virtual Interrupt Flag, bit 19) → Salinan dari Interrupt Flag (IF) yang digunakan pada mode virtual. Fungsinya adalah memungkinkan sistem operasi mengelola status interupsi pada lingkungan multitasking.
VIP (Virtual Interrupt Pending, bit 20) → Bernilai 1 jika terdapat interupsi virtual yang tertunda pada mode virtual. Fungsinya membantu sistem operasi dalam menangani interupsi yang sedang menunggu untuk dijalankan.
ID (Identification Flag, bit 21) → Digunakan untuk mengecek dukungan instruksi CPUID pada prosesor modern. Fungsinya adalah memungkinkan perangkat lunak mengenali jenis dan fitur prosesor.
2. Perkembangan generasi prosesor:
8086/8088 hanya menggunakan sebagian kecil bit (hingga 16-bit FLAGS).
80286 menambahkan beberapa bit kontrol baru.
80386 ke atas memperluas menjadi 32-bit (EFLAGS).
Pentium/Pentium 4 menambahkan fungsi kontrol tambahan.
Pengalamatan memori dalam real mode adalah cara prosesor generasi 8086 hingga Pentium awal mengakses memori. Pada mode ini, prosesor hanya dapat menggunakan ruang alamat maksimum sebesar 1 MB, yaitu area memori yang sering disebut sebagai conventional memory atau memori DOS. Prosesor modern seperti Pentium 4 atau Core2 tetap mendukung real mode untuk alasan kompatibilitas, tetapi hanya pada 1 MB pertama. Pada sistem 64-bit, aplikasi yang ditulis untuk real mode tidak dapat berjalan langsung kecuali melalui emulator.
Dalam real mode, setiap alamat memori dibentuk dari dua bagian, yaitu segment address dan offset address. Segment address tersimpan di salah satu register segmen, dan menunjukkan titik awal sebuah blok memori berukuran 64 KB. Offset address adalah jarak atau pergeseran dari awal segmen menuju lokasi data atau instruksi yang diinginkan. Untuk menghasilkan alamat fisik, prosesor akan mengalikan nilai segment address dengan 16 (atau menambahkan angka 0 di ujung kanan dalam notasi heksadesimal), kemudian menjumlahkannya dengan offset. Hasilnya adalah alamat memori fisik 20-bit yang menunjuk lokasi sebenarnya di RAM.
Setiap segmen dalam real mode memiliki panjang 64 KB, sehingga alamat memori yang dapat dicakup sebuah segmen dimulai dari alamat awal (base address) sampai alamat akhir (base address + FFFFH). Karena panjang segmen adalah kelipatan 16 byte, batas awal segmen disebut juga sebagai paragraph boundary. Sebagai contoh, bila register segmen berisi nilai 1200H
, maka alamat awal segmen adalah 12000H
. Jika offset yang diberikan adalah 1000H
, maka alamat fisiknya adalah 13000H
.
Dengan mekanisme ini, real mode memungkinkan prosesor mengakses lokasi memori dengan menggunakan kombinasi segmen dan offset, walaupun ruang alamat totalnya dibatasi hingga 1 MB.
Pada contoh, jika segment register berisi 1000H dan offset-nya 2000H, maka prosesor akan mengakses lokasi memori pada alamat fisik 12000H. Offset selalu ditambahkan ke alamat awal segmen untuk menemukan data atau instruksi. Cara penulisan sering kali ditulis sebagai 1000:2000
, yang artinya segment 1000H dengan offset 2000H.
Mulai dari prosesor 80286 (dengan sirkuit eksternal tertentu) hingga 80386 dan Pentium 4, terdapat tambahan area memori sebesar 64 KB dikurangi 16 byte yang bisa diakses jika segment address = FFFFH dan offset lebih besar dari FFFFH. Area ini dikenal sebagai high memory (alamat 0FFFF0H hingga 10FFEFH). Jika pin alamat A20 diaktifkan, maka alamat yang melampaui 1 MB dapat diakses. Contohnya, segment FFFFH dengan offset 4000H menghasilkan alamat fisik FFFF0H + 4000H = 103FF0H. Jika A20 tidak didukung atau tetap nol, alamatnya akan terpotong menjadi 03FF0H.
Beberapa mode pengalamatan juga memungkinkan penjumlahan lebih dari satu register dengan nilai offset. Jika hasil penjumlahan melebihi FFFFFH (batas 20-bit), maka hasilnya akan dipotong menjadi 20 bit (modulo 1 MB). Misalnya, jika segment address = 4000H dan offset = F000H + 3000H, jumlah sebenarnya adalah 4000H + F000H + 3000H = 1C000H. Namun karena alamat fisik hanya 20 bit, nilai yang digunakan adalah 0C000H (hasil 1C000H setelah dibuang carry 1 pada bit ke-21). Sehingga alamat yang diakses adalah 0C000H atau 42000H, tergantung perhitungan dalam konteks register dan offset.
5. Protected Mode Memory Addressing [Kembali]
Pengalamatan memori pada protected mode (mulai dari prosesor 80286 dan seterusnya) memungkinkan data dan program yang berada di luar 1 MB pertama memori untuk diakses, termasuk juga data dalam 1 MB tersebut. Protected mode inilah yang digunakan oleh sistem operasi modern seperti Windows.
Untuk menggunakan area memori yang lebih luas ini, prosesor tetap memakai kombinasi segmen dan offset seperti pada real mode, namun dengan cara yang berbeda. Pada protected mode, register segmen tidak lagi langsung menunjuk alamat awal segmen seperti di real mode. Sebagai gantinya, register segmen berisi selector, yaitu indeks yang menunjuk ke sebuah entri dalam descriptor table. Descriptor menyimpan informasi tentang lokasi segmen di memori, panjang segmen, dan hak aksesnya.
Karena alamat fisik tetap dihitung dari nilai offset ditambah informasi lokasi dari descriptor, sebagian besar instruksi memori pada protected mode tetap mirip dengan instruksi di real mode. Oleh sebab itu, banyak program yang ditulis untuk real mode dapat berjalan di protected mode tanpa perubahan besar.
Perbedaan utama antara kedua mode adalah cara prosesor menafsirkan nilai pada register segmen. Pada protected mode, register segmen digunakan untuk memilih descriptor, yang kemudian menentukan di mana segmen berada di memori. Selain itu, mulai dari prosesor 80386 dan seterusnya, nilai offset dapat berupa bilangan 32-bit, berbeda dengan real mode yang hanya menggunakan offset 16-bit. Offset 32-bit ini memungkinkan prosesor mengakses data dalam satu segmen dengan panjang hingga 4 GB. Program yang ditulis untuk protected mode 32-bit dapat berjalan di mode 64-bit pada prosesor seperti Pentium 4.
Pada prosesor 80286, segmen memori dibatasi oleh alamat dasar (base) 24-bit dengan panjang segmen (limit) 16-bit. Karena itu, ukuran maksimum segmen hanya 64 KB.
Mulai dari 80386 hingga Pentium 4, digunakan alamat dasar 32-bit sehingga segmen bisa ditempatkan di mana saja dalam ruang memori 4 GB. Panjang segmen diperluas menjadi 20-bit dan ditambah fitur granularity bit. Jika granularity = 0, maka limit dihitung per 1 byte. Jika granularity = 1, maka limit dihitung per 4 KB. Dengan cara ini, ukuran segmen bisa dari 4 KB sampai 4 GB.
Pada prosesor 64-bit (seperti Core2), struktur dasar deskriptor masih sama dengan 80386, tetapi lingkungan 64-bit memungkinkan pengalamatan memori yang jauh lebih besar, melampaui 4 GB, bahkan hingga puluhan gigabyte.
Singkatnya, 80286 hanya mampu mengakses segmen kecil 64 KB, sedangkan 80386 ke atas mampu mengakses segmen besar hingga 4 GB berkat basis 32-bit dan granularity. Pada arsitektur 64-bit, konsep deskriptor tetap ada, tetapi kapasitas memori yang bisa dijangkau jauh lebih besar.
6. Memory Paging [Kembali]
Pada gambar ditunjukkan bagaimana mekanisme paging memungkinkan sebuah alamat memori logis (linier) dipetakan ulang ke alamat fisik yang berbeda. Konsep dasar paging adalah pemisahan antara alamat logis yang digunakan program dengan alamat fisik yang benar-benar ada di modul RAM. Pemisahan ini membuat sistem operasi dapat mengelola memori secara lebih fleksibel, aman, dan efisien.
Dalam contoh pada gambar, terlihat bahwa sebuah rentang alamat logis, yaitu 000C8000H–000C9000H, tidak harus menempati alamat fisik dengan nilai yang sama. Melalui pemetaan ulang (remapping), alamat tersebut dapat dialihkan ke lokasi fisik lain, misalnya 00110000H–00110FFFH. Proses translasi ini sepenuhnya ditangani oleh unit paging dalam mikroprosesor melalui struktur page directory dan page table.
Page directory bertugas menunjukkan ke tabel halaman (page table), sedangkan page table menyimpan informasi pemetaan detail setiap halaman 4 KB memori logis ke alamat fisik tertentu. Dengan kata lain, sistem operasi bebas menempatkan halaman-halaman program di lokasi manapun pada RAM, selama ada catatan yang sesuai dalam page table.
Manfaat dari mekanisme ini cukup besar. Pada masa sistem operasi lama seperti DOS, fasilitas paging digunakan bersama dengan program EMM386.EXE untuk memindahkan sebagian program ke area memori tinggi (upper memory). Hal ini membantu mengatasi keterbatasan memori konvensional sebesar 640 KB yang tersedia untuk aplikasi.
7. Flat Memory Model [Kembali]
Flat mode memory adalah sistem memori yang digunakan pada prosesor modern berbasis Pentium (seperti Pentium 4 atau Core2 dengan ekstensi 64-bit). Dalam mode ini, memori dipandang sebagai satu ruang alamat besar yang berkesinambungan, tanpa segmentasi.
-
Alamat pertama dalam memori adalah 0000 0000H.
-
Alamat terakhir adalah FFFFFFFFH (untuk 4 GB pada mode 32-bit).
-
Pada mode 64-bit, alamat dapat diperluas hingga 64-bit address space.
Tidak seperti mode terproteksi yang masih menggunakan segment register, dalam flat mode segmentasi hampir diabaikan. CS segment register hanya dipakai untuk memilih deskriptor kode (code segment descriptor) yang berisi hak akses, tetapi tidak lagi memengaruhi perhitungan alamat. Dengan kata lain, offset yang digunakan langsung menjadi alamat fisik.
Dari gambar, ditunjukkan bagaimana sebuah alamat linier (misalnya 0000F0000H) langsung dipetakan ke alamat fisik yang sama dalam ruang memori besar, mulai dari 000000000H sampai FFFFFFFFH.
Model ini sangat sederhana dibandingkan dengan model segmentasi atau paging yang memerlukan translasi tambahan. Flat mode memori menjadikan alamat logis dan fisik hampir identik.