Minggu 2 Teori Dasar

Bab 2: Arsitektur Internal 8086

Mengenal blok diagram internal 8086, memahami fungsi setiap register, dan konsep pipeline sederhana.

Capaian Pembelajaran Bab Ini

Setelah mempelajari bab ini, mahasiswa mampu menggambar blok diagram internal 8086 (EU & BIU), menjelaskan fungsi setiap register (umum, indeks, pointer, segmen, flag), serta memahami konsep pipeline sederhana pada 8086.

2.1 Gambaran Umum Arsitektur 8086

Intel 8086 memiliki arsitektur internal yang dibagi menjadi dua unit fungsional yang bekerja secara paralel. Ini adalah inovasi penting yang memungkinkan overlapped processing (pipeline), sehingga meningkatkan kecepatan dibandingkan prosesor generasi sebelumnya.

Bus Interface Unit (BIU)
Address Adder
Segment Registers (CS, DS, SS, ES)
Instruction Pointer (IP)
Instruction Queue (6 Bytes)
Bus Control Logic
External Address Bus (20-bit)
External Data Bus (16-bit)
Control Bus
Execution Unit (EU)
ALU (16-bit)
General Registers
AX, BX, CX, DX
Pointer & Index
SP, BP, SI, DI
Flag Register (16-bit)
EU Control System
Internal Communication Bus
Menghubungkan EU dan BIU. EU menerima instruksi dari Queue, BIU menerima permintaan alamat/data dari EU.

Gambar 2.1: Blok Diagram Arsitektur Internal Intel 8086.

Execution Unit (EU)

  • • Mengeksekusi instruksi (decode + execute)
  • • Mengandung ALU, register, flag, EU control
  • • Menerima instruksi dari queue BIU
  • • Tidak pernah akses memori langsung

Bus Interface Unit (BIU)

  • • Fetch instruksi dan isi queue
  • • Hitung alamat fisik (segment + offset)
  • • Kendalikan bus alamat, data, kontrol
  • • Menyimpan CS, DS, SS, ES, IP

2.2 Execution Unit (EU)

EU bertanggung jawab atas seluruh proses eksekusi. Komponen-komponennya:

ALU

Arithmetic Logic Unit

Melakukan semua operasi aritmatika (penjumlahan, pengurangan, perkalian, pembagian) dan logika (AND, OR, XOR, NOT, shift, rotate). Menerima input dari register, menghasilkan output ke register, dan memperbarui bit-bit flag sesuai hasil operasi.

REG

Register-Register (8 buah, 16-bit)

Menyimpan data sementara, alamat, dan hasil operasi. Detail lengkapnya di sub-bab 2.5 dan 2.6.

FLG

Flag Register (16-bit)

Menyimpan status hasil operasi. Detail per-bit di sub-bab 2.8.

CTL

EU Control System

Menerima instruksi dari queue, melakukan decode, lalu menghasilkan sinyal kendali internal yang mengarahkan ALU, register, dan data path untuk menjalankan instruksi tersebut.

Perhatian penting: EU tidak pernah berkomunikasi langsung dengan memori eksternal. EU selalu menerima instruksi dari queue BIU dan mengirim permintaan baca/tulis melalui BIU. Inilah yang memungkinkan keduanya bekerja paralel.

2.3 Bus Interface Unit (BIU)

BIU bertanggung jawab atas seluruh komunikasi dengan memori eksternal dan perangkat I/O.

IQ

Instruction Queue (6 byte FIFO)

Buffer FIFO yang menyimpan instruksi yang sudah di-fetch. BIU secara otomatis mengisi queue selama EU sibuk. Ketika EU butuh instruksi, diambil dari queue tanpa menunggu akses memori. Jika queue penuh (6 byte terisi), BIU menunggu EU mengosongkan sebelum melanjutkan fetch.

SEG

Segment Registers (4 buah)

CS (Code), DS (Data), SS (Stack), ES (Extra). Detail di sub-bab 2.7.

IP

Instruction Pointer (16-bit)

Menyimpan offset instruksi berikutnya dalam segmen kode. Dipasangkan dengan CS untuk membentuk alamat fisik CS:IP. Bertambah otomatis saat BIU mengambil instruksi. Tidak bisa diakses langsung oleh programmer.

ADD

Address Adder

Melakukan perhitungan alamat fisik 20-bit: Fisik = Segment × 16 + Offset. Operasi ×16 dilakukan dengan menggeser register segmen 4 bit ke kiri.

BUS

Bus Control Logic

Menghasilkan sinyal kendali untuk bus alamat (20 bit), bus data (16 bit), dan bus kontrol (READ, WRITE, ALE, DEN, DT/R, M/IO, dll).

2.4 Perhitungan Alamat Fisik

Ini adalah konsep paling kritis pada 8086 — bagaimana prosesor 16-bit bisa mengakses 1 MB memori (20-bit).

Rumus

Alamat Fisik = Segment × 16 + Offset
ContohSegmentOffsetPerhitunganAlamat Fisik
11234H5678H12340H + 5678H179B8H
22000H0010H20000H + 0010H20010H
30A000HFFFFH0A0000H + FFFFH19FFFH

Kenapa × 16?

Mengalikan dengan 16 desimal (bukan 16 bit) sama saja dengan menggeser register 4 bit ke kiri, atau menambahkan satu digit nol heksadesimal di belakang. Contoh: 1234H × 16 = 12340H.

Berapa memori yang bisa diakses?

Bus alamat 20-bit menghasilkan 220 = 1.048.576 alamat unik = 1 MB. Dari 00000H sampai FFFFFH.

2.5 Register Umum: AX, BX, CX, DX

Keempat register ini bisa diakses sebagai 16-bit penuh atau dua register 8-bit terpisah.

AH
AL
AX
Accumulator
BH
BL
BX
Base
CH
CL
CX
Count
DH
DL
DX
Data

Gambar 2.2: Empat register umum dengan akses 8-bit dan 16-bit.

Register16-bit8-bitFungsi Khusus
AXAXAH, ALI/O (IN/OUT), MUL, DIV. Instruksi dengan AX sering lebih pendek dan cepat.
BXBXBH, BLSatu-satunya register umum yang bisa jadi base register. Digunakan XLAT.
CXCXCH, CLCounter otomatis untuk LOOP/REP. CL = jumlah shift/rotate.
DXDXDH, DLAlamat port 16-bit untuk IN/OUT. Sisa hasil MUL/DIV.

2.6 Register Pointer & Indeks

Empat register ini tidak bisa diakses per 8-bit — hanya 16-bit penuh.

RegisterNamaFungsi UtamaSegmen Default
SPStack PointerMenunjuk elemen teratas stack. Berkurang 2 saat PUSH, bertambah 2 saat POP.SS:SP
BPBase PointerAkses parameter di stack. Default ke SS (bukan DS).SS:BP
SISource IndexPointer sumber data pada instruksi string (MOVSB, CMPSB).DS:SI
DIDestination IndexPointer tujuan data pada instruksi string (STOSB, MOVSB).ES:DI

2.7 Register Segmen

Empat register segmen menyimpan alamat dasar dari masing-masing segmen memori. Digunakan bersama offset untuk menghasilkan alamat fisik 20-bit.

RegisterNamaFungsiDigunakan Bersama
CSCode SegmentMenunjuk ke segmen yang berisi kode program.CS:IP
DSData SegmentMenunjuk ke segmen data (default untuk akses memori).DS:offset
SSStack SegmentMenunjuk ke segmen stack.SS:SP / SS:BP
ESExtra SegmentSegmen tambahan. Default untuk DI pada instruksi string.ES:DI

Aturan penting: Tidak bisa langsung memindahkan nilai antar register segmen. Harus melalui register umum. Contoh: MOV AX, 2000H; MOV DS, AX. Jika menulis MOV DS, ESERROR.

2.8 Register Flag (Detail Lengkap)

Register flag 16-bit. Hanya 9 bit yang aktif (digunakan), sisanya tidak terdefinisi (selalu 0 atau 1 tergantung prosesor).

BitFlagNamaKapan Aktif
0CFCarry FlagOperasi aritmatika menghasilkan carry/borrow dari bit paling tinggi (ADD, SUB, CMP, ROL, RCL)
1Reservasi (selalu 1)
2PFParity FlagJumlah bit 1 di hasil operasi adalah ganjil (LOGIC, aritmatika 8-bit)
3AFAuxiliary CarryCarry dari bit 3 ke bit 4 (operasi BCD: DAA, DAS, AAA, AAS)
4ZFZero FlagHasil operasi bernilai nol (CMP, AND, OR, XOR, TEST, INC, DEC)
5SFSign FlagBit tertinggi dari hasil = 1 (operasi aritmatika, NEG, CMP)
6TFTrap FlagDigunakan oleh debugger. Jika TF=1, CPU berhenti setelah tiap instruksi (single-step).
7IFInterrupt FlagMengizinkan (1) atau memblokir (0) interupsi hardware eksternal. STI=izinkan, CLI=blokir.
8DFDirection FlagArah instruksi string. CLD=maju (SI/DI increment), STD=mundur (SI/DI decrement).
9OFOverflow FlagOverflow aritmatika signed. Hasil di luar jangkauan signed (ADD, SUB, CMP).

Flag untuk Conditional Jump Unsigned

JA/JNBE — Above / Not Below (CF=0 dan ZF=0)
JAE/JNB — Above or Equal (CF=0)
JB/JNAE — Below / Not Above (CF=1)
JBE/JNA — Below or Equal (CF=1 atau ZF=1)

Flag untuk Conditional Jump Signed

JG/JNLE — Greater / Not Less (ZF=0 dan SF=OF)
JGE/JNL — Greater or Equal (SF=OF)
JL/JNGE — Less / Not Greater (SF != OF)
JLE/JNG — Less or Equal (ZF=1 atau SF != OF)

2.9 Konsep Pipeline pada 8086

Pipeline adalah teknik di mana fetch instruksi berikutnya dilakukan bersamaan dengan eksekusi instruksi saat ini. Ini dimungkinkan oleh pemisahan EU dan BIU.

Waktu
BIU
EU
Hasil
T1
Fetch I1
Idle
T2
Fetch I2
Execute I1
I1 done
T3
Fetch I3
Execute I2
I2 done
T4
Fetch I4
Execute I3
I3 done

Gambar 2.3: Timeline pipeline — BIU dan EU bekerja paralel. Tanpa pipeline, EU harus idle saat BIU fetch.

Keuntungan Pipeline

  • Mengurangi waktu tunggu EU (T1 tidak ada, tanpa pipeline EU harus idle)
  • Throughput instruksi meningkat
  • Tidak memerlukan arsitektur yang lebih kompleks

Keterbatasan Pipeline 8086

  • Queue hanya 6 byte — jika instruksi panjang (jump far), queue bisa penuh dan BIU harus menunggu
  • Tidak ada branch prediction (jump bersyarat selalu mengosongkan queue)
  • Hanya 1 level pipeline (prosesor modern punya 5-15 level)

Kapan Pipeline Terputus?

1. JMP jauh (short/near) → queue di-flush, BIU fetch dari alamat tujuan baru
2. CALL → queue di-flush, BIU fetch dari alamat prosedur
3. Conditional jump yang "salah ambil" → BIU sudah fetch instruksi yang salah, harus di-flush
4. Queue penuh → BIU menunggu EU mengosongkan sebelum lanjut fetch

Pada kasus 1-3, ini disebut pipeline flush. Tidak fatal, tapi membuang beberapa siklus clock.

2.10 Soal Latihan

Kerjakan soal-soal berikut. Klik "Lihat jawaban" setelah mencoba menjawab sendiri.

Soal 1. Jelaskan perbedaan fungsi EU dan BIU pada arsitektur 8086. Mengapa keduanya dipisahkan?

Lihat jawaban

EU (Execution Unit) bertugas mengeksekusi instruksi: decode instruksi dari queue, operasikan ALU, akses register dan flag. BIU (Bus Interface Unit) bertugas mengelola komunikasi dengan memori/I/O: fetch instruksi ke queue, hitung alamat fisik, kendalikan bus. Dipisahkan agar keduanya bisa bekerja paralel — EU mengeksekusi sementara BIU meng-fetch instruksi berikutnya, sehingga meningkatkan performa (pipeline).

Soal 2. Apa fungsi Instruction Queue pada BIU? Berapa ukurannya dan mengapa tidak lebih besar?

Lihat jawaban

Instruction Queue adalah buffer FIFO 6 byte di dalam BIU yang menyimpan instruksi yang sudah di-fetch dari memori. Fungsinya memberikan instruksi siap pakai ke EU tanpa harus menunggu akses memori setiap kali. Ukurannya 6 byte karena sebagian besar instruksi 8086 panjangnya 1-6 byte, sehingga cukup untuk menampung setidaknya satu instruksi penuh. Ukuran lebih besar akan memerlukan lebih banyak transistor dan meningkatkan kompleksitas tanpa peningkatan performa signifikan.

Soal 3. Register CX memiliki fungsi khusus sebagai counter. Sebutkan instruksi yang secara otomatis menggunakan CX.

Lihat jawaban

Instruksi yang menggunakan CX secara otomatis: LOOP (CX--, jump jika CX != 0), LOOPE/LOOPZ (CX--, jump jika CX != 0 dan ZF=1), LOOPNE/LOOPNZ (CX--, jump jika CX != 0 dan ZF=0), serta REP/REPE/REPNE untuk instruksi string. Selain itu, CL (byte rendah CX) digunakan sebagai jumlah shift/rotate pada instruksi SHL, SHR, dll.

Soal 4. Mengapa register segmen tidak bisa diakses langsung dengan instruksi MOV? Berikan contoh cara mengubah nilai DS.

Lihat jawaban

Karena arsitektur 8086 tidak mendukung operasi langsung antar register segmen. Ini adalah batasan desain hardware. Cara yang benar: MOV AX, 2000H; MOV DS, AX. Data harus melewati register umum sebagai perantara. Hal ini berlaku juga untuk CS, SS, dan ES.

Soal 5. Apa yang terjadi jika SP di-inisialisasi dengan nilai 0000H dan kemudian dilakukan PUSH AX?

Lihat jawaban

SP = 0000H berarti stack berada di ujung atas segmen stack (SS:0000). Saat PUSH AX: (1) SP dikurangi 2 menjadi FFFEH, (2) byte tinggi AX disimpan di SS:FFFE, (3) byte rendah AX di SS:FFFF. Jika dilakukan PUSH lagi, SP menjadi FFFCH, dan seterusnya ke bawah. Jika SP sudah 0000H dan dilakukan PUSH lagi, SP menjadi FFFEH (wrap-around) dan akan menimpa data sebelumnya — ini menyebabkan stack overflow.

Soal 6. Jelaskan perbedaan CF (Carry Flag) dan OF (Overflow Flag). Keduanya berubah saat ADD 7FH + 01H. Berapa nilainya masing-masing?

Lihat jawaban

CF (Carry Flag) menandakan carry/borrow keluar dari bit paling tinggi. OF (Overflow Flag) menandakan overflow aritmatika signed (hasil di luar jangkauan). Untuk ADD 7FH + 01H = 80H: CF = 0 (tidak ada carry dari bit 7), namun jika 80H ditafsirkan signed = -128, padahal +127 + 1 seharusnya +128 yang tidak muat di 8-bit signed, sehingga OF = 1.

2.11 Kuis Bab 2

Pilih satu jawaban yang paling tepat.

1. Berapa jumlah register 16-bit yang tersedia di EU 8086?

2. Instruction Queue pada BIU 8086 berukuran berapa byte?

3. Register manakah yang TIDAK bisa diakses sebagai 8-bit terpisah?

4. Register segmen mana yang secara default digunakan untuk mengakses data di memori?

5. Apa fungsi register IP (Instruction Pointer)?

6. Flag apa yang diubah oleh instruksi CMP AX, BX?

7. Bagaimana cara menghitung alamat fisik dari CS=1234H dan IP=5678H?

8. Apa keuntungan arsitektur pipeline pada 8086?

9. Register BP (Base Pointer) secara default menggunakan segmen mana?