Escolar Documentos
Profissional Documentos
Cultura Documentos
Disusun oleh :
Diktat Kuliah
Judul : Diktat Kuliah Pengenalan Komputer (EE 1122)
Jenis : Diktat Kuliah
Pada : Program Studi S1 Teknik Elektro
Waktu : Mei 2002
Identitas Penulis :
Nama lengkap dan gelar : Nyoman Bogi Aditya Karna, ST., MSEE
Golongan / Pangkat dan NIP : 8 / 730605
Jabatan Akademik : --
Jurusan / Program / Unit Kerja : Teknik Elektro
Perguruan Tinggi : Sekolah Tinggi Teknologi Telkom
Mengetahui, Menyetujui,
Ka. Perpustakaan Kajur. Teknik Elektro
Terminologi ……………………………………………………………………. 1
Survival Guide Using DEBUG ………………………………………………… 4
Command pada DEBUG ………………………………………………. 4
Organisasi Komputer …………………………………………………………... 7
Interaksi µP dengan Memori …………………………………………………... 9
Pembacaan data …………………………………………………... ... .... 9
Penulisan data ………………………………………………….............. 10
Mikroprosesor 8088 ……………………………………………………………. 11
Kemampuan Bus ……………………………………………………….. 12
Register ………………………………………………………..……….. 12
Struktur Memori pada µP 8088 ………………………………………………... 14
Segmentasi ……………………………………………………………... 15
Instruksi Mesin µP 8088 ……………………………………………………….. 17
Instruksi MOV …………………………………………………………. 18
Instruksi ADD & SUB …………………………………………………. 20
Instruksi JMP & JZ ……………………………………………………. 22
Stack ……………………………………………………………………………. 22
8086/8088 Instruction Set Summary …………………………………………… 24
Data Transfer …………………………………………………………… 24
Arithmetic ………………………………………………………….…... 25
Logic …………………………………………………………………… 26
Control Transfer ………………………………………………………... 26
Bagan Dasar µP Intel 8088 ……………………………………………………... 29
Proses Kerja (Bagaimana µP 8088 mengerjakan instruksi) ……………………. 31
Encoding Instruksi Mesin ……………………………………………………… 33
Memory ………………………………………………………………………… 35
Klasifikasi …………………………………………………………….... 35
Hirarki ………………………………………………………………...... 35
Pengalamatan ………………………………………………………....... 36
Peta Memori …………………………………………………………..... 37
PC-XT (Personal Computer eXtended Technology) ………………………….. 38
Mikroprosesor µP 8088 ………………………………………………………... 40
Sistem Penunjang µP 8088 …………………………………………………….. 42
Memori pada sistem µP 8088 ………………………………………………….. 43
Interfacing µP 8088 dengan Memori …………………………………………... 45
Sambungan Data ………………………………………………………... 46
Sambungan Alamat …………………………………………………….. 46
Sambungan Kontrol ……………………………………………………. 47
Sambungan µP 8088 dengan 1 keping memori ………………………... 48
Sambungan µP 8088 dengan 2 keping memori ………………………... 49
Sambungan µP 8088 dengan 4 keping memori ………………………... 51
Address Decoder ………………………………………………………. 52
Interfacing µP 8088 dengan I/O ……………………………………………….. 56
Perangkat Input : Dip Switch ………………………………………….. 51
Perangkat Output : LED ……………………………………………….. 51
PPI 8255 ………………………………………………………………………… 63
Interrupt ………………………………………………………………………… 69
Studi Kasus Mikroprosesor secara Umum …………………………………….. 73
Set Instruksi ……………………………………………………………. 74
Addressing Mode ………………………………………………………. 75
Pipeline pada x86 ………………………………………………………………. 76
Structural Hazard ………………………………………………………. 77
Data Hazard ……………………………………………………………. 78
Control Hazard …………………………………………………………. 81
Referensi
Terminologi
Istilah-istilah yang sering digunakan dalam dunia komputer :
1. Sistem bilangan adalah metode yg menyepadankan suatu besaran dengan suatu
simbol tertentu. Contoh: kita biasanya menggunakan sistem bilangan desimal (10). Ini
berarti kita memiliki 10 buah simbol untuk menyatakan 10 buah besaran, yaitu :
‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’.
2. Sistem bilangan biner (Binary) menggunakan 2 (dua) buah simbol untuk
merepresentasikan 2 besaran, yaitu : ‘0’ dan ‘1’.
3. Suatu simbol biner sering disebut sebagai bit (binary digit)
4. Sistem bilangan Hexadecimal menggunakan 16 (enambelas) buah simbol untuk
merepresentasikan 16 besaran, yaitu : ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘A’,
‘B’, ‘C’, ‘D’, ‘E’, ‘F’.
5. Kesatuan 4 simbol biner yg merepresentasikan suatu informasi disebut dgn nibble
6. Kesatuan 8 simbol biner yg merepresentasikan suatu informasi disebut dgn byte
7. Kesatuan 16 simbol biner yg merepresentasikan suatu informasi disebut dgn word
8. Dunia digital menggunakan 2 buah tegangan (0 volt dan +5 volt). Karena hanya ada 2
besaran, kedua besaran tersebut akan direpresentasikan dengan sistem bilangan biner
(‘0’ dan ‘1’)
9. Transistor adalah komponen aktif yang dapat digunakan sebagai penguat sinyal
(dalam dunia analog) atau sebagai saklar (dalam dunia digital). Tergantung dari bahan
dan media pembuatannya, transistor digital dibedakan menjadi nMOS (negative
Metal Oxide Semiconductor), CMOS (Complementary MOS), dan TTL (Transistor-
Transistor Logic)
10. Gerbang logika (Logic Gate) adalah komponen dasar dari rangkaian digital yang
dibentuk dari beberapa transistor digital untuk membentuk suatu fungsi tertentu
(contoh : AND Gate, OR Gate, INVERTER)
11. Integrated Circuit (IC) adalah gabungan komponen-komponen yang menjalankan
suatu fungsi khusus dan dikemas dalam satu paket (packaging).
Ada beberapa jenis IC dilihat dari komponen yang digabungkan, yaitu :
a. IC analog: integrasi komponen analog (contoh : Operational Amplifier)
b. IC hybrid: integrasi miniatur komponen analog (contoh : Integrated
Amplifier)
c. IC digital: integrasi komponen digital ke dalam plat MOS
d. ASIC (Application Specific IC): integrasi komponen yang dirancang untuk
melakukan suatu fungsi khusus (contoh : Prosesor pada HandPhone)
12. Very Large Scale Integration (VLSI) adalah IC digital yang memiliki jumlah
transistor digital lebih dari 100.000 buah (contoh : Microprocessor)
13. Microprocessor (atau CPU = Central Processing Unit) adalah sebuah VLSI yang
didesain khusus untuk memproses/mengerjakan tugas-tugas standar. UP adalah otak
dari komputer karena dialah yang bertugas menghitung dan mengontrol peralatan lain
disekitarnya (contoh : Zilog dengan Z80, Intel dengan PentiumTM)
14. Microcontroller adalah sebuah Microprocessor dengan fasilitas memori didalamnya
(yang dapat diprogram oleh user) untuk mengerjakan tugas tertentu yang dikehendaki
oleh pemrogramnya dan terkadang juga diperlengkapi dengan port Input/Output
(contoh : Zilog dengan Z8, Intel dengan 8051)
15. Arithmetic and Logic Unit (ALU) adalah bagian dari Microprocessor yang bertugas
untuk melakukan proses aritmetika (penjumlahan dan pengurangan) dan proses logika
(AND, OR, dan Shift) pada data yang melaluinya
16. Flip-Flop adalah rangkaian digital yg dapat digunakan untuk menyimpan suatu nilai
biner (‘0’ atau ‘1’). Karena kemampuannya untuk menyimpan nilai biner, Flip-Flop
menjadi komponen dasar memori (contoh : Data Flip-Flop)
17. Memori adalah serangkaian Flip-Flop yg dikombinasikan untuk menyimpan suatu
informasi.
18. Register adalah memori yg diimplementasikan di dalam microprocessor sehingga
memiliki kecepatan yg sama dgn microprocessor.
19. Random Access Memory (RAM) adalah tempat penyimpanan sementara bagi data
dan code (program) untuk dapat digunakan oleh Microprocessor sebagai scratch book
(contoh : SDRAM, DDR). Karena bersifat sebagai scratch book, maka data harus
dapat ditulis, dibaca, dan kemudian ditulis kembali ke dalam RAM. Data di dalam
RAM akan hilang jika powernya dimatikan (volatile)
20. Read Only Memory (ROM) adalah tipe memori yang bersifat baca saja dimana data
ditulis sekali ke dalamnya dan untuk seterusnya hanya dibaca saja. ROM pada
umumnya digunakan sebagai tempat penyimpanan program atau pustaka (contoh :
EEPROM untuk bootstrap loader). Perbedaan dengan RAM adalah jika power supply
ke ROM diputuskan isinya tidak akan hilang.
21. Control Unit (CU) adalah bagian dari Microprocessor yang bertugas untuk
mengontrol kerja dari bagian-bagian khusus Microprocessor di atas (ALU, Register)
22. Peripheral adalah adalah semua perangkat yang digunakan untuk menambah
utilitas/kegunaan komputer (contoh : printer, plotter, mouse, joystick, gamepad)
23. Input/Output (I/O) adalah saluran transmisi yg digunakan oleh komputer untuk
berinteraksi dgn peripheral (contoh : ISA (IBM Standard Architecture), EISA
(Enhanced ISA), PCI, Parallel Port)
24. Bus adalah jalur pengiriman sinyal informasi antar komponen. Dilihat dari jenis
informasi yang dibawa, terdapat bus data, bus address, dan bus control.
Jika dilihat dari lokasinya ada bus internal dan bus eksternal.
25. HardDisk adalah tempat penyimpanan sekunder untuk penyimpanan data dan
program dalam jumlah/ukuran yang besar
26. x86 adalah sebutan untuk keluarga mikroprosesor 8086, 80286, 80386, 80486,
Pentium, Celeron, Pentium II, Pentium IV, K5, K6, K6/2, K6/3, Athlon, Duron,
Cx5x86, Cx6x86, MII
27. Variable Length Instruction (VLI) adalah set instruksi dimana lebar instruksi
bervariasi tergantung kebutuhan, ada yg hanya 1 instruksi = 1 byte dan ada yg 1
instruksi mencapai 4 byte. Contoh : Instruksi pada uP 8088 s.d. Pentium IV
28. Fixed Length Instruction (FLI) adalah set instruksi dimana lebar semua instruksi
adalah sama, misalnya 4 byte.
Contoh : uP Alpha dari DEC (Digital Equipment Computer)
dan PowerPC pada Apple Macintosh dari Motorola
29. Complex Instruction Set Computer (CISC) adalah desain uP dimana instruksi yang
dapat dijalankan oleh uP tersebut sangat banyak dan kompleks (mencapai 200
instruksi). Contoh : uP 8088 s.d Pentium IV
30. Reduced Instruction Set Computer (RISC) adalah desain uP dimana instruksi yang
dapat dijalankan oleh uP tersebut sangat terbatas namun sederhana (kurang dari 50
instruksi). Contoh : Sharp SH3 pada Palmtop HP320LX
31. Pipeline adalah suatu metode yg mengeksploitasi setiap komponen di dalam uP untuk
selalu bekerja setiap saat. Contoh : pada x86, pipeline mulai diterapkan sejak
80386DX
32. Stalled adalah suatu kondisi dimana suatu instruksi baru tidak dapat dijemput
sehingga penjemputannya terpaksa ditunda (delayed) sampai semua kondisi
mendukung.
33. Hazard adalah hal-hal yang menyebabkan stall terjadi.
34. Structural Hazard adalah yang menyebabkan stall terjadi karena adanya
keterbatasan resource sistem
35. Data Hazard adalah yang menyebabkan stall terjadi karena adanya ketergantungan
data antar instruksi yg berdekatan
36. Control Hazard adalah yang menyebabkan stall terjadi karena eksekusi instruksi
kontrol
37. Paralelism adalah instruksi-instruksi yang tidak memiliki ketergantungan satu sama
lainnya sehingga dapat dikerjakan pada saat yg bersamaan
38. Instruction Scheduling adalah teknik untuk meminimisasi terjadinya Data Hazard
dengan cara menyusun ulang semua instruksi yang akan dikerjakan
39. Superscalar adalah mesin yang mengerjakan beberapa instruksi sekaligus dimana
instruksi-instruksi yang akan dikerjakan dipilih oleh hardware khusus secara dinamis
40. Very Long Instruction Wide (VLIW) adalah mesin yang mengerjakan beberapa
instruksi sekaligus dimana instruksi-instruksi yang akan dikerjakan dipilih oleh
software secara statis
41. Million Instruction Per Second (MIPS) adalah satuan kecepatan uP yg menunjukkan
berapa juta instruksi yg bisa dikerjakan oleh uP tsb dalam sedetiknya. Standar 1 MIPS
adalah uP VAX (tahun 1970). Satuan lainnya adalah MOPS (Million Operation Per
Second), MFLOPS (Million Floating Point Operation Per Second)
42. Cycles Per Instruction (CPI) adalah ukuran kecepatan pengerjaan instruksi. Yang
diukur adalah jumlah rata-rata cycles yang digunakan untuk mengerjakan 1 instruksi.
43. Temporal locality adalah suatu metode yg menganggap : jika suatu data sedang
diakses, maka kemungkinan besar data selanjutnya yg akan diakses adalah data yg
pernah diakses sebelumnya (berdasarkan history)
44. Spatial locality adalah suatu metode yg menganggap : jika suatu data sedang diakses,
maka kemungkinan besar data selanjutnya yg akan diakses adalah data yg letaknya
berdekatan (berdasarkan space)
45. Predict-taken dan Predict-not-taken adalah suatu metode untuk memprediksi
apakah suatu instruksi jump akan dilakukan (taken) atau tidak (not-taken).
46. Tomasulo algorithm adalah metode pengembangan (penggabungan) antara metode
Predict-taken dan Predict-not-taken.
Survival Guide using DEBUG
Debug adalah suatu program kecil yang telah ada sejak MS-DOS versi 3.0 dikeluarkan.
Sampai sekarangpun program Debug tetap disertakan pada saat anda menginstall MS
Windows. Program ini digunakan untuk melihat isi suatu blok memori (view),
mengubahnya (edit), dan menjalankan (run) instruksi-instruksi yang ada di blok tersebut.
Cara mengaktifkan :
1. Cara pertama : Di lingkungan Windows, klik ‘Start’ dan kemudian pilih ‘Run’. Dari
window ‘Run’ ketikkan ‘Debug’ dan klik tombol ‘OK’.
Salah satu dari kedua cara tersebut akan memanggil program Debug dengan
menampilkan cursor berbentuk strip (-)
C:\>Debug
-
Command pada DEBUG
Disini Debug menanti perintah (command) dari kita
C:\WINDOWS>debug
-f 0000 ffff 90 ! mengisi memori dari alamat 0000 sampai ffff
dengan data 90H
-a ! assemble a program
-u ! un-assemble program
-t
-rcx
CX 0000
:0007 ! mengubah isi register CX dari 0000 menjadi 0007
-r
-q
C:\WINDOWS>_
Organisasi Komputer
Sistem mikroprosesor bekerja pada 2 level tegangan, yaitu 0 Volt dan +5 Volt. Oleh
karenanya kita dapat mempergunakan sistem bilangan Biner (Binary) untuk
merepresentasikan kedua level tegangan tersebut dengan simbol ‘0’ dan simbol ‘1’.
Sistem yang hanya mengenal 2 besaran, seperti halnya mikroprosesor, disebut sistem
digital. Sementara sistem yang mengenal jumlah besaran yang sangat banyak (bahkan
mencapai tak berhingga) disebut sistem analog.
Pada umumnya, diluar sistem mikroprosesor, digunakan sistem analog. Oleh karena
adanya perbedaan ini, sebelum mikroprosesor dapat mengolah data dari luar sistemnya,
data tersebut harus dikonversi terlebih dahulu ke sistem digital. Pengubahan ini dilakukan
oleh blok Input dan Output.
Microprocessor O
Sinyal I sinyal = sinyal U sinyal
analog N biner biner T analog
P Control Unit P
U U
T + T
Memory
Seperti halnya manusia yg ingin menulis pada suatu buku dan membaca suatu informasi
dari buku, pertama-tama manusia harus dapat menentukan dimana lokasi informasi
tersebut berada (i.e. nomor halaman, alinea, baris, etc.). Baru setelah itu dapat
menuliskan informasinya atau membaca informasinya.
alamat
read
8088 memori
data
Urutan kerja :
1. µP8088 mempersiapkan alamat (lokasi) dari data yg akan dibaca
2. µP8088 mengirimkan sinyal read ke memori
3. setelah menerima sinyal read, memori mencari data yg diinginkan µP8088 sesuai dgn
alamat yg diberikan
4. data yg sesuai dikirimkan oleh memori ke µP8088
Proses penulisan data oleh uP ke memori (arah data : uP " memori)
alamat
Urutan kerja :
1. µP8088 mempersiapkan alamat (lokasi) dimana data akan ditulis (diletakkan)
2. µP8088 mempersiapkan data yg akan ditulis
3. µP8088 mengirimkan sinyal write ke memori
4. setelah menerima sinyal write, memori membaca data yg diberikan oleh µP8088 dan
meletakkannya sesuai dgn alamat yg ditentukan
Pada proses penulisan dan pembacaan data, uP8088 menggunakan 3 (tiga) buah saluran
khusus untuk mengirimkan (1) alamat, (2) data, dan (3) kontrol baca/tulis.
Ketiga saluran ini disebut sebagai (1) bus alamat, (2) bus data, dan (3) bus kontrol.
8086/8088 Instruction Set Summary
DATA TRANSFER
MOV – Move
1. Reg/Mem to/from Reg 1000 10dw modregr/m
2. Immediate to Register 1011 wreg data data (w=1)
3. Memory to Accumulator 1010 000w addr-low addr-high
4. Accumulator to Memory 1010 001w addr-low addr-high
contoh 1:
MOV AL,BL = 88D8 (10001000 11011000)
d=0, w=0, mod=11, reg=011(BL), r/m=000(AL)
MOV AX,BX = 89D8 (10001001 11011000)
d=0, w=1, mod=11, reg=011(BX), r/m=000(AX)
MOV [BX],AL = 8807 (10001000 00000111)
d=0, w=0, mod=00, reg=000(AL), r/m=111([BX])
MOV [BX],AX = 8907 (10001001 00000111)
d=0, w=1, mod=00, reg=000(AX), r/m=111([BX])
MOV AL,[BX] = 8A07 (10001010 00000111)
d=1, w=0, mod=00, reg=000(AL), r/m=111([BX])
MOV AX,[BX] = 8B07 (10001011 00000111)
d=1, w=1, mod=00, reg=000(AX), r/m=111([BX])
contoh 2:
MOV AX,1234 = B83412 (10111000 34H 12H)
w=1, reg=000(AX), Low-data=34H, Hi-data=12H
MOV AL,78 = B078 (10110000 78H )
w=0, reg=000(AL), data=78H
contoh 3:
MOV AX,[1234] = A13412 (10100001 34H 12H))
w=1,addr-low=34H,addr-high=12H
contoh 4:
MOV [1234],AX = A33412 (10100011 34H 12H))
w=1,addr-low=34H,addr-high=12H
PUSH - Push
1. Register 0101 0reg
2. Segment Register 000reg110
ARITHMETIC
ADD - Add
1. Reg/Mem with Register 0000 00dw modregr/m
2. Immediate to Reg/Mem 1000 00sw mod000r/m data data(sw=01
3. Immediate to AX/AL 0000 010w data data (w=1)
contoh 1:
ADD BX,CX = 01CB (00000001 11001011)
d=0, w=1, mod=11, reg=001(CX), r/m=011(BX)
ADD BL,CL = 00CB (00000000 11001011)
d=0, w=0, mod=11, reg=001(CL), r/m=011(BL)
contoh 2:
ADD BX,1234 = 81C33412 (10000001 11000011 34H 12H)
sw=01, mod=11, r/m=011
contoh 3:
ADD AX,1234 = 053412 (00000101 34H 12H)
w=1, Low-data=34H, Hi-data=12H
SUB - Subtract
1. Reg/Memory and Reg 0010 10dw modregr/m
2. Immediate from Reg/Mem 1000 00sw mod101r/m data data(sw=01
3. Immediate from AX/AL 0010 110w data data (w=1)
contoh 1:
SUB BX,CX = 29CB (00101001 11001011)
d=0, w=1, mod=11, reg=001(CX), r/m=011(BX)
SUB BL,CL = 28CB (00101000 11001011)
d=0, w=0, mod=11, reg=001(CL), r/m=011(BL)
contoh 2:
SUB BX,1234 = 81EB3412 (10000001 11101011 34H 12H)
sw=01, mod=11, r/m=011
contoh 3:
SUB AX,1234 = 2D3412 (00101101 34H 12H)
w=1, Low-data=34H, Hi-data=12H
LOGIC
OR - Or
1. Reg/Memory and Reg 0000 10dw modregr/m
2. Immediate to Reg/Mem 1000 000w mod001r/m data data (w=1)
3. Immediate to AX/AL 0000 110w data data (w=1)
XOR - Exclusive Or
1. Reg/Memory and Reg 0011 00dw modregr/m
2. Immediate to Reg/Mem 1000 000w mod110r/m data data (w=1)
3. Immediate to AX/AL 0011 010w data data (w=1)
CONTROL TRANSFER
contoh:
-a 100
0D9C:0100 jmp 010f
0D9C:0102 jmp 0100
0D9C:0104 jz 010f
0D9C:0106 jz 0100
0D9C:0108
-u 100
0D9C:0100 EB0D JMP 010F
0D9C:0102 EBFC JMP 0100
0D9C:0104 7409 JZ 010F
0D9C:0106 74F8 JZ 0100
jadi:
JMP 010F = EB0D (11101011 00001101):jump 0D(=+13) bytes forward (IP=IP+13)
JMP 0100 = EBFC (11101011 11111100):jump FC(=-4) bytes forward (IP=IP-4)
JZ 010F = 7409 (01110100 00001011):jump 09(=+9) bytes forward (IP=IP+9)
JZ 0100 = 74F8 (01110100 11111000):jump FB(=-8) bytes forward (IP=IP-8)
w = word:
if w=1 then word operation (1 word = 2 bytes)
if w=0 then byte operation
mod = mode:
if mod=11 then r/m is treated as a REG field
if mod=00 then DISP=0, disp-low and disp-high are absent
disp = displacement:
show how far should the CPU jump from recent point (reg. IP)
r/m:
if r/m = 000 then EA = (BX) + (SI) + DISP
if r/m = 001 then EA = (BX) + (DI) + DISP
if r/m = 010 then EA = (BP) + (SI) + DISP
if r/m = 011 then EA = (BP) + (DI) + DISP
if r/m = 100 then EA = (SI) + DISP
if r/m = 101 then EA = (DI) + DISP
if r/m = 110 then EA = (BP) + DISP*
if r/m = 111 then EA = (BX) + DISP
if s:w=01 then 16 bits of immediate data form the operand
if s:w=11 then an immediate data byte is sign extended to form the 16-bit operand
-a 0100
0EA0:0100 mov ax,1234
0EA0:0103 mov bl,f7
0EA0:0105 push ax
-u 0100
0EA0:0100 B83412 MOV AX,1234
0EA0:0103 B3F7 MOV BL,F7
0EA0:0105 50 PUSH AX
Contoh: uP 8088 memiliki bus alamat dengan lebar 20 bit sehingga uP 8088 dapat
mengakses memori berkapasitas maksimum 220=1048576 blok memori atau 1 Mb.
Sedangkan bus kontrol memiliki lebar 1 saluran untuk setiap fungsi.
Register
Pada bagan organisasi komputer, memori diletakkan terpisah dari mikroprosesor. Jika
bagan tersebut diimplementasikan, uP harus mengakses memori setiap saat. Dan karena
kecepatan memori jauh lebih lambat dari uP (sebagai contoh uP Pentium IV telah
mencapai kecepatan 2 GHz sedangkan DDRAM maksimum hanya memiliki kecepatan
0.8 GHz), maka kecepatan kerja uP akan sangat dipengaruhi oleh kecepatan memori.
Untuk mempercepat pemrosesan data di dalam mikroprosesor, selain CU dan ALU,
mikroprosesor juga akan membutuhkan memori yg memiliki kecepatan sama dengan uP.
Untuk melakukannya, memori tersebut harus diimplementasikan didalam mikroprosesor.
Memori ini disebut dengan register.
Jenis register berdasarkan informasi yg disimpannya dapat dibagi menjadi 4.
1. Register Data
digunakan untuk menyimpan data yg diperlukan untuk suatu operasi
Terdiri dari: AX (Accumulator), BX (Base), CX (Counter), DX (Data)
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0100 NV UP EI PL NZ NA PO NC
2. Register Alamat
karena jumlah register data sangat terbatas, maka sebagian besar data tetap diletakkan di
memori. Untuk dapat mengaksesnya, uP membutuhkan alamat dari data tersebut yg
disimpan oleh register alamat.
Terdiri dari: SP (Stack Pointer), BP (Base Pointer), SI (Source Index), DI (Destination
Index), DS (Data Segment), ES (Extra Segment), SS (Stack Segment), CS (Code
Segment), IP (Instruction Pointer) dan BX (Base)
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0100 NV UP EI PL NZ NA PO NC
Flag : - - - - OF DF IF TF SF ZF - AF - PF - CF
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0100 NV UP EI PL NZ NA PO NC
4. Register Instruksi
digunakan untuk menyimpan instruksi yang sedang dikerjakan
Catatan:
Register BX selain dapat digunakan sebagai register data dapat juga digunakan sebagai
register alamat
Lebar semua register uP8088 adalah 16 bit = 2 byte. Sehingga setiap register dapat
berharga 0000H s.d. FFFFH atau 216 = 65536 kombinasi harga. Setiap register akan
diakses (dibaca/ditulis) dalam format 16 bit tersebut, kecuali register data dapat diakses
dalam format 8 bit = 1 byte (AH, AL, BH, BL, CH, CL, DH, DL).
16 bit
8 bit
AH AL
BH BL
CH CL
DH DL
Struktur Memori pada µP 8088
Memori pada sistem µP 8088 memiliki dua ciri :
1. diakses dgn alamat selebar 16 bit (00000H s.d. FFFFFH) atau 2 byte
2. data yg diakses untuk setiap alamat adalah 8 bit atau 1 byte
contoh :
Alamat data yg disimpan pada alamat tsb
(dlm Hexa) (dlm Biner) (dlm Hexa)
FFFF ! 1 0 0 0 1 0 1 0 = 8A
8000 ! 1 1 1 0 1 0 0 0 = E8
0002 ! 1 0 1 1 1 1 0 0 = BC
0001 ! 0 0 0 0 1 1 0 1 = 0D
0000 ! 1 1 1 1 1 1 1 0 = FE
Alamat dari suatu cell memori direpresentasikan dalam format 2 byte (0000H – FFFFH)
yg disimpan dalam register alamat (yg lebarnya juga 2 byte). Karena kapasitas register
alamat adalah 2 byte, maka jumlah cell memori yg dapat disimpan alamatnya adalah 216
= 65536 cell memori.
Dan karena suatu cell memori menyimpan data 1 byte (00H – FFH) maka suatu register
alamat µP 8088 dapat mengakses (membaca/menulis) memori berkapasitas 65536 byte =
64 KByte.
Dari hasil ‘dumping’ memori dgn Debug, memori ditampilkan dalam format 128 byte.
Dapat dilihat bahwa pada alamat 0000 isi datanya 0E, dan pada alamat 0001 isi datanya
E8, dan pada alamat 0002 isi datanya DC, dst.
Segmentasi
Mikroprosesor harus dapat mengakses semua cell memori dari alamat terendah sampai
alamat tertinggi. Alamat tersebut akan disimpan didalam register alamat. Secara fisik,
uP8088 memiliki 20 buah jalur alamat (A0 – A19) untuk menyediakan informasi alamat
selebar 20 bit dimana informasi alamat tersebut dapat berharga 00000H s.d FFFFFH. Ke-
20 bit tersebut digunakan untuk mengakses memori dgn kapasitas 220 = 1048576 cell.
Namun masalah timbul pada lebar register alamat. µP 8088 memiliki register alamat
dengan lebar hanya 16 bit dari 20 yang dibutuhkan untuk mengakses semua memori.
Ini berarti jika suatu register alamat menyimpan alamat memori, dia hanya dapat
digunakan untuk mengakses alamat 0000 sampai FFFF atau 64 KByte.
Untuk mengatasi kekurangan ini, Intel menggunakan 2 register untuk pengalamatan.
Satu register akan menyimpan alamat segment (suatu area memori seluas 64 Kbyte), dan
Satu register akan menyimpan alamat offset (menentukan byte yang mana di dalam
segment tersebut yg akan diakses).
Contoh:
4 bit 4 bit 4 bit 4 bit 4 bit
Segment address DS = 0 F 8 C
Offset address BX = 0 0 0 5
Physical Address DS+BX 0 F 8 C 5
Segment 64
0000
00002 80 Offset 0002
00001 DE Offset 0001
00000 1F Offset 0000
µP8088 menyediakan 4 segment untuk menjalankan suatu program.
Extra Segment
ES (Extra Segment) menyimpan alamat segment (64 Kb of memory) yg digunakan untuk
tambahan lokasi penyimpanan data jika segment Data tidak mencukupi.
Suatu program dapat memakai 4 segment yg berbeda-beda (format program *.EXE) atau
hanya menggunakan sebuah segment untuk menampung program + data + stack + extra
(format program *.COM)
C:\WINDOWS\COMMAND>debug
-n CHKDSK.EXE
-l " loading file ‘chkdsk.exe’ ke memori
-r
AX=0000 BX=0000 CX=0AA0 DX=0000 SP=4000 BP=0000 SI=0000 DI=0000
DS=0F8C ES=0F8C SS=1086 CS=0F9C IP=0000 NV UP EI PL NZ NA PO NC
Perhatikan bahwa program berekstensi EXE menggunakan 3 segment :
1. segment program ada di segment nomor 0F9C
2. segment stack ada di segment nomor 1086
3. segment data = segment extra = 0F8C
C:\WINDOWS\COMMAND>debug
-n FORMAT.COM
-l " loading file ‘format.com’ ke memori
-r
AX=0000 BX=0000 CX=28E7 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0F8C ES=0F8C SS=0F8C CS=0F8C IP=0100 NV UP EI PL NZ NA PO NC
Perhatikan bahwa program berekstensi COM hanya menggunakan 1 segment yaitu
segment nomor 0F8C
Instruksi Mesin µP 8088
Instruksi mesin (machine instruction) adalah instruksi-instruksi yg dapat dikerjakan oleh
suatu mikroprosesor.
Suatu program bahasa Pascal tidak akan dapat dieksekusi secara langsung oleh
mikroprosesor, sehingga agar mikroprosesor dapat mengerti isi program tersebut, terlebih
dahulu kita harus meng-compile program tersebut agar menjadi instruksi mesin.
Pada contoh diatas tampak bahwa hasil penterjemahan instruksi PASCAL “exit”
adalah instruksi mesin “JMP”.
Dilihat dari fungsi yg dilakukannya, instruksi mesin di µP 8088 dapat dibedakan menjadi
3, yaitu :
Data transfer
digunakan untuk (1) memindahkan data dari suatu elemen memory ke elemen memory
lainnya atau (2) mengisi register data dengan suatu data. Contoh: MOV, PUSH, POP
Kontrol
digunakan untuk memindahkan kontrol instruksi ke suatu lokasi baru (tidak lagi secara
sekuensial). Contoh: JMP, JZ, JE
Instruksi MOV
1. Register ! Data (data yg akan ditulis ke register ditulis langsung di instruksi)
2. Register ! Register (data yg akan ditulis ke register berasal dari register lainnya)
3. Register ! Memory (data yg akan ditulis ke register berasal dari memory,
dan alamat dari data disimpan di register alamat)
4. Memory ! Register (data yg akan ditulis ke memory berasal dari register,
dan alamat memory yg akan ditulis disimpan di register alamat)
Contoh instruksi MOV untuk pengisian langsung (1) dan transfer antar register (2)
-a
0F6C:0100 mov bx,abcd " mengisi reg. AX dgn data ABCDH
0F6C:0103 mov ah,56 " mengisi reg. AH dgn data 56H
0F6C:0105 mov bl,ah " mengcopy isi reg. AH ke reg. BL
0F6C:0107 mov ax,bx " mengcopy isi reg. BX ke reg. AX
0F6C:0109
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0100 NV UP EI PL NZ NA PO NC
0F6C:0100 BBCDAB MOV BX,ABCD
-t
AX=0000 BX=ABCD CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0103 NV UP EI PL NZ NA PO NC
0F6C:0103 B456 MOV AH,56
-t
AX=5600 BX=ABCD CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0105 NV UP EI PL NZ NA PO NC
0F6C:0105 88E3 MOV BL,AH
-t
AX=5600 BX=AB56 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0107 NV UP EI PL NZ NA PO NC
0F6C:0107 89D8 MOV AX,BX
-t
AX=AB56 BX=AB56 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0109 NV UP EI PL NZ NA PO NC
catatan:
Instruksi berikut akan menimbulkan Error :
mov ch,5678 : tidak bisa karena CH = 1 byte dan datanya 2 byte
mov dl,ax : tidak bisa karena AX = 2 byte dan DL = 1 byte
mov dx,al : tidak bisa karena AL = 1 byte dan DX = 2 byte
Contoh instruksi MOV untuk transfer Register ! Memory (3) dan
transfer Memory ! Register (4)
-a
0F6C:0100 mov bx,0002 " mengisi reg. BX dgn data 0002H
0F6C:0103 mov ah,[bx] " membaca memori pada alamat BX sebanyak 1 byte (AH)
0F6C:0105 mov ax,[bx] " membaca memori pada alamat BX sebanyak 2 byte (AX)
0F6C:0107 mov ax,[bx+1] " membaca memori pada alamat BX+1 sbanyak 2 byte (AX)
0F6C:010A mov [bx],ax " menulis isi reg. AX ke memori pada alamat BX
0F6C:010C
-d
0F6C:0000 00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F ................
0F6C:0010 10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F ................
0F6C:0020 20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F !”#$%&’()*+,-./
0F6C:0030 30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F 0123456789:;#?
0F6C:0040 40 41 42 43 44 45 46 47-48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO
0F6C:0050 50 51 52 53 54 55 56 57-58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_
0F6C:0060 60 61 62 63 64 65 66 67-68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno
0F6C:0070 70 71 72 73 74 75 76 77-78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~.
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0100 NV UP EI PL NZ NA PO NC
0F6C:0100 BB0200 MOV BX,0002
-t
AX=0000 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0103 NV UP EI PL NZ NA PO NC
0F6C:0103 8A27 MOV AH,[BX] DS:0002=02
-t
AX=0200 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0105 NV UP EI PL NZ NA PO NC
0F6C:0105 8B07 MOV AX,[BX] DS:0002=0302
-t
AX=0302 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=0107 NV UP EI PL NZ NA PO NC
0F6C:0107 8B4701 MOV AX,[BX+01] DS:0003=0403
-t
AX=0403 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=010A NV UP EI PL NZ NA PO NC
0F6C:010A 8907 MOV [BX],AX DS:0002=0302
-t
AX=00A0 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C IP=010C NV UP EI PL NZ NA PO NC
0F6C:010C 90 NOP
-d
0F6C:0000 00 01 03 04 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F ................
0F6C:0010 10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F ................
0F6C:0020 20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F !”#$%&’()*+,-./
0F6C:0030 30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F 0123456789:;#?
0F6C:0040 40 41 42 43 44 45 46 47-48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO
0F6C:0050 50 51 52 53 54 55 56 57-58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_
0F6C:0060 60 61 62 63 64 65 66 67-68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno
0F6C:0070 70 71 72 73 74 75 76 77-78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~.
Catatan:
Instruksi berikut akan menimbulkan Error :
mov [bx],[bx+1] : transfer data dari memori ke memori secara langsung
mov [bx],12 : transfer data langsung ke memori
-a
0DA0:0100 mov ax,1234
0DA0:0103 mov bx,5678
0DA0:0106 add ax,bx
0DA0:0108 sub ax,bx
0DA0:010A
-a
0F6C:0100 MOV AX,ABCD
0F6C:0103 MOV BX,DCBA
0F6C:0106 XOR AL,AL
0F6C:0108 JMP 010C
0F6C:010A MOV AL,BH
0F6C:010C JZ 010E
0F6C:010E
FFFF 5E
FFFE CD ! tumpukan terakhir
tumpukan baru
-a
0EA0:0100 mov ax,1234
0EA0:0103 mov bx,5678
0EA0:0106 push ax
0EA0:0107 push bx
0EA0:0108 pop ax
0EA0:0109 pop bx
SP=FFEE
-d ffe0 ↓
0EA0:FFE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ! isi stack
-t
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0103 NV UP EI PL NZ NA PO NC
0EA0:0103 BB7856 MOV BX,5678
-t
AX=1234 BX=5678 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0106 NV UP EI PL NZ NA PO NC
0EA0:0106 50 PUSH AX
-t
AX=1234 BX=5678 CX=0000 DX=0000 SP=FFEC BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0107 NV UP EI PL NZ NA PO NC
0EA0:0107 53 PUSH BX
-d ffe0 ↓
0EA0:FFE0 00 00 00 00 00 00 00 00-00 00 00 00 34 12 00 00 ! AX ada di stack
-t
AX=1234 BX=5678 CX=0000 DX=0000 SP=FFEA BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0108 NV UP EI PL NZ NA PO NC
0EA0:0108 58 POP AX
-d ffe0 ↓
0EA0:FFE0 00 00 00 00 00 00 00 00-00 00 78 56 34 12 00 00 ! BX ada di stack
-t
AX=5678 BX=5678 CX=0000 DX=0000 SP=FFEC BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0109 NV UP EI PL NZ NA PO NC
0EA0:0109 5B POP BX
-t
AX=5678 BX=1234 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=010A NV UP EI PL NZ NA PO NC
Bagan dasar µP Intel 8088
8 - bit Data Bus Internal
Instruction reg AH AL
Flag
BH BL
CH CL
DH DL
ALU
Instruction Stack Segment
Accumulator
Decoder Stack Pointer
Code Segment
Instruction Pointer
D6 D4 D2 D0
Memory Controller
1 1 0 1 1 1
0 1 0 0 0 0
1 0 0 1 1 1
1
1
0
1
0
1
1
0
0
8-bit Memory (max of 1 Mb) 1
1
0
1
1
0
1
1
0
1 byte
1 0 0 1 1 1
0 0 0 0 0 0
1048576 cell
CU (Control Unit) adalah manajer dari semua unit. CU mengatur keselarasan kerja
setiap unit. Apa yang harus dilakukan oleh suatu unit, semuanya diketahui oleh CU
dengan bantuan microprogram yang ditanamkan padanya. Pengontrolan oleh CU
dilakukan melalui Bus Kontrol (panah dari/ke Control Unit).
Register Data memiliki lebar 16 bit namun dapat diakses dalam format 2x8 bit:
Accumulator : AX = AH+AL
Base Register : BX = BH+BL
Counter Register : CX = CH+CL
Data Register : DX = DH+DL
Register status (Flag) berfungsi untuk menyimpan status dari suatu operasi
Register instruksi menyimpan instruksi yang akan dikerjakan oleh CPU (Instruction
Register)
ALU (Arithmetic and Logic Unit) adalah mesin penghitung (kalkulator) dari CPU. CU
akan menggunakan ALU jika instruksi yang dikerjakan membutuhkan perhitungan
aritmetika (contoh: ADD, SUB) atau logika (contoh: AND, OR, XOR).
Jika suatu instruksi aritmetika dan logika dieksekusi, maka hasil operasinya dapat
mengubah salah satu bit di register status.
Proses Kerja
(Bagaimana µP8088 mengerjakan
instruksi)
Didalam menjalankan suatu instruksi, uP 8088 melakukan 3 tahap pengerjaan sbb :
Karena pada saat IF yg dijemput hanya 1 byte, maka kemungkinan besar setelah proses
ID, CU harus menjemput beberapa byte lagi dari memori agar instruksinya menjadi
lengkap.
Byte pertama dari instruksi yg dijemput disebut dgn op-code (operation code) karena dari
penterjemahan op-code tersebut, didapatkan panjang isntruksi sebenarnya.
Contoh : untuk instruksi B8 34 12 (MOV AX,1234) CU pertama akan mengambil byte
“B8” untuk mengetahui bahwa instruksi tsb adalah MOV AX,xx yy sehingga CU harus
mengambil 2 byte setelahnya untuk dapat mengeksekusi instruksi tsb.
DE
IF EX
proses: IF – DE – EX
DE
IF EX
proses: IF – DE – IF – DE – EX
Encoding Instruksi Mesin
Di dalam CPU (tepatnya pada blok Instruction Decoder), terdapat tabel instruksi yang
memuat daftar semua instruksi yang dapat dimengerti oleh CPU tersebut. Daftar ini
disebut sebagai microcode dan setiap kali CPU menerima sebuah instruksi, CPU akan
memecah kode instruksi tersebut (tahap decoding) dan kemudian melihat arti dari
masing-masing pecahan tersebut di microcode.
Ini menunjukkan bahwa tidak semua CPU memiliki microcode yang sama. Beda
arsitektur berarti berbeda juga microcode-nya. Sebagai contoh, program yang dapat
dijalankan di IBM PC tidak akan jalan di Apple Macintosh, begitu pula sebaliknya.
-a
0EA0:0100 mov bx,000f ! Immediate
0EA0:0103 mov ax,bx ! Register Direct
0EA0:0105 mov ax,[bx] ! Register Indirect
0EA0:0107 mov ax,[bx-1] ! Displacement
0EA0:010A mov ax,[000d] ! Direct/Absolute
[0000] [000D] [000F]
-d 0000 ↓ ↓ ↓
0EA0:0000 CD 20 00 A0 00 9A EE FE - 1D F0 4F 03 27 08 8A 03
0EA0:0010 25 08 17 03 25 08 2A 07 - 01 01 01 00 02 FF FF FF
↑
[0010]
-t
AX=0000 BX=000F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0103 NV UP EI PL NZ NA PO NC
0EA0:0103 89D8 MOV AX,BX
-t
AX=000F BX=000F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0105 NV UP EI PL NZ NA PO NC
0EA0:0105 8B07 MOV AX,[BX] DS:000F=2503
-t
AX=2503 BX=000F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=0107 NV UP EI PL NZ NA PO NC
0EA0:0107 8B47FF MOV AX,[BX-01] DS:000E=038A
-t
AX=038A BX=000F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=010A NV UP EI PL NZ NA PO NC
0EA0:010A A10D00 MOV AX,[000D] DS:000D=8A08
-t
AX=8A08 BX=000F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0EA0 ES=0EA0 SS=0EA0 CS=0EA0 IP=010D NV UP EI PL NZ NA PO NC
Memory
Klasifikasi
Hirarki Memory
Seorang pengguna komputer akan membutuhkan memori yang cepat dalam jumlah yang
tidak terbatas. Namun hal ini akan memakan biaya yang sangat mahal. Solusi ekonomis
untuk keinginan tersebut adalah dengan menggunakan hirarki memori. Dengan hirarki
memori, kita dapat menyeimbangkan antara Speed, Capacity, Size, dan Price.
uP 8088
Price Capacity Size Speed
Cache memory
Main memory
Hard Disk
Pengalamatan Memori
Metode pengalamatan memori untuk tiap-tiap desain uP amat berbeda. Disini kita akan
mempelajari metode pengalamatan yang dipakai oleh uP 8088.
Logical Memory
Memori logika adalah system memori yang dilihat dari sudut programmer.
Memori logika biasanya diberikan nomor dalam format Hexadecimal.
FFFFFF
4 GByte
FFFF
- 386 DX
- 80486
16 MByte FFFF
1 MByte
- 80286,
- 8086
- 386 SX
- 8088
- 80186
000
Karena semua cell memori pada sistem uP 8088 memiliki lebar 8-bit (1 byte), maka jika
uP hendak mengakses 16-bit (2 byte) data dari memori, 2 byte berturutan akan diambil.
Peletakan data di memori diurutkan dari LSB (least significant byte) dengan alamat
memori terendah sampai MSB (most significant byte) dengan alamat memori tertinggi.
Sistem ini disebut Little Endian dan berlaku untuk semua keluarga uP x86 yang berarti
alamat memori dari suatu data akan menunjuk ke LSB dari data.
-a
11A8:0100 mov ax,[0005]
-t
AX=EE9A BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=11A8 ES=11A8 SS=11A8 CS=11A8 IP=0103 NV UP EI PL NZ NA PO NC
Physical Memory
Pada keluarga microprocessor Intel, perbedaan memori secara hardwarenya terletak pada
lebarnya dimana 8088 : 8-bit, 8086-80386SX : 16-bit, dan 80386DX-80486 : 32-bit.
Meskipun terdapat perbedaan lebar data pada tiap desain microprocessor di atas, seorang
programmer tetap mengaksesnya seakan-akan mereka adalah 8-bit. Perbedaan lebar data
tersebut hanya menjadi masalah bagi hardware desainer.
Peta memori
Peta memori adalah suatu peta yang menggambarkan lokasi dari data di memori. Peta
memori digambarkan sebagai blok yang memiliki alamat dan 8-bit data.
Cell memori dengan alamat terendah digambarkan paling bawah
FFFF 8A
7777 E8
0000 FE
Untuk µP x86, sistem operasi MSDOS (Real Mode) membagi seluruh area memori
menjadi 3 :
unlimited
depend on
XMS 15 Mb for 80286 – 80386SX
the uP
(eXtended Memory System) 4 Gb for 80386DX and up
100000
FFFFF
EMS
384 Kb System Area
(Expanded Memory System)
A0000
9FFFF
TPA
640 Kb Conventional Memory
(Transient and Program Area)
00000
ROM
4164 4164 41256 41256
ROM
4164 4164 41256 41256
8-bit ISA bus
8253
4164 4164 41256 41256
ROM
4164 4164 41256 41256
8259
8237
ON
8088
8255
Crystal = 14.318 MHz
8288 = Bus Controller
4164 4164 41256 41256
8088 = Microprocessor
= 640 Kbyte
Personal Computer
eXtended Technology
8284 8288
Keyboard
8088 (Microprocessor)
adalah mikroprosesor yang bertugas mengontrol semua komponen
8087 (Arithmatic Co-Processor)
adalah arithmatic co-prosesor yang bertugas untuk membantu 8088
dalam menangani kalkulasi atau perhitungan aritmetik
yang melibatkan angka sangat besar
8237 (DMA Controller)
adalah prosesor khusus untuk menangani proses DMA (Direct Memory Access)
yaitu suatu proses dimana yang menulis / membaca data di memori
bukan lagi mikroprosesor, melainkan peripheral (perangkat luar)
8251 (Serial Communication Controller)
adalah prosesor khusus untuk transaksi data serial (misalnya untuk modem)
(terpasang pada I/O card, tidak pada motherboard)
8253 (Programmable Interval Timer)
adalah prosesor khusus untuk menangani timing
8255 (Programmable Peripheral Interface)
adalah prosesor khusus untuk transaksi data paralel (misalnya untuk floppy disk)
8259 (Programmable Interrupt Controller)
adalah prosesor khusus untuk mengontrol mekanisme interupsi
8284 (Clock Generator)
adalah IC yg digunakan untuk menghasilkan :
sinyal clock (4.77 MHz), sinyal Reset, dan sinyal Ready.
8288 (Bus Controller)
adalah prosesor khusus untuk mengontrol penggunaan bus data dan bus alamat
4164 (Dynamic RAM)
adalah memori DRAM dengan kapasitas 65536 x 1 bit (64 Kbit).
Oleh karena DRAM ini hanya dapat menyimpan 1 bit,
maka untuk dapat menyimpan 8 bit, digunakan 8 x 4164.
Ditambah 1 x 4164 untuk menyimpan Parity Bit.
41256 (Dynamic RAM)
adalah memori DRAM dengan kapasitas 262144 x 1 bit (256 Kbit).
Oleh karena DRAM ini hanya dapat menyimpan 1 bit,
maka untuk dapat menyimpan 8 bit, digunakan 8 x 41256.
Ditambah 1 x 41256 untuk menyimpan Parity Bit.
Interfacing µP Intel 8088 dengan I/O
Setiap perangkat Input maupun Output akan memiliki nomor tersendiri (unik) untuk
menandakan perangkat mana yang akan diakses oleh µP 8088. Nomor ini disebut nomor
port.
Jika kita menggunakan instruksi MOV, PUSH, dan POP untuk mengakses memori,
maka instruksi untuk mengakses I/O sedikit berbeda :
Berdasarkan Addressing
1. menggunakan fixed addressing :
IN AL,00 ! mengambil data dari perangkat input yang memiliki nomor port 00H
dan dimasukkan ke register AL (8 bit)
IN AX,FF ! mengambil data dari perangkat input yang memiliki nomor port FFH
dan dimasukkan ke register AX (16 bit)
OUT 00,AL ! mengirimkan data dari register AL (8 bit)
ke perangkat output yang memiliki nomor port 00H
OUT FF,AX ! mengirimkan data dari register AX (16 bit)
ke perangkat output yang memiliki nomor port FFH
Keterangan :
• Disini nomor port yg akan diakses ditulis langsung pada instruksinya.
• Maksimum jumlah port yang bisa diakses adalah 256
(IN AL,00H sampai IN AL,FFH).
• Untuk pengaksesannya digunakan Address Bus A0 – A7
(Address Line A0 – A7 menyimpan nomor port)
• Tergantung dari kemampuan I/O yg diakses, data yg ditransfer bisa 8 bit
(menggunakan register AL) atau 16 bit (menggunakan register AX)
A07FF
2 Kbyte dari 4016 B
A0000
30FFF
4 Kbyte dari 4016 C
30000
2. Memory-mapped I/O : dimana peta alamat I/O dimasukkan ke dalam peta alamat
untuk memori
30FFF
4 Kbyte dari 4016 C
30000
000FF I/O
[00000] = Dip Switch
00000 [000FF] = LED
Pada Isolated I/O, instruksi untuk mengakses I/O dibedakan dengan instruksi untuk
mengakses memori. Instruksi IN dan OUT untuk akses I/O, dan MOV untuk akses
memori. Sedangkan pada Memory-mapped I/O, instruksi untuk mengakses I/O sama
dengan instruksi untuk mengakses memori yaitu MOV (instruksi IN dan OUT tidak ada
lagi).
Untuk dapat mengambil data dari suatu I/O diperlukan suatu interface khusus untuk
menjembatani data yg disimpan oleh I/O tersebut dengan data bus. Untuk keperluan ini
dapat digunakan 3-state buffer untuk perangkat input dan latch atau flip-flop untuk
perangkat output.
5 KOhm x 8
ON
D0
D1
D2
D3
D4
D5
8088
D6
D7
RD IO / M
Address
Decoder } Address
Bus
Dip switch seperti halnya switch biasa akan memutuskan atau menyambungkan suatu
titik dengan salah satu titik lainnya (SPDT = Single Pole Double Terminal). Jika posisi
suatu switch ada dalam posisi ON (di kanan) maka line Data tersebut akan tersambung
langsung dengan Ground (0 volt) sebaliknya jika dalam posisi OFF (kiri) maka line Data
tersebut akan tersambung dengan VCC (5 volt).
Posisi Dip switch di atas akan menghasilkan D0 = D1 = D2 = D4 = D7 = ground dan D3
= D5 = D6 = VCC. Sehingga data bus dari dip switch berisi (D7)01101000(D0). Agar
i8088 dapat mengambil data tersebut, i8088 harus mengaktifkan kedelapan 3-state buffer
diatas dengan menggunakan decoder. Setelah semua 3-state buffer diaktifkan, maka data
bus i8088 akan tersambung dengan dengan data bus dip switch dan data dati dip switch
dapat dibaca (RD) oleh i8088.
Desain decoder dan jumlah address line yg digunakan tergantung dari desain kita.
Ada 4 desain yg berbeda :
1. fixed addressing + isolated IO
2. fixed addressing + memory mapped IO
3. variable addressing + isolated IO
4. variable addressing + memory mapped IO
Contoh untuk desain decoder nomor 2 (fixed addressing + memory mapped IO)
A0
A1
A2
A3 Address to 3-state
A4
A5 Decoder buffer
A6
A7
RD
sinyal IO/M tidak perlu di-decode-kan dan instruksinya menjadi MOV AL,[04] !
addressing mode : absolute. Tanpa adanya dekoding sinyal IO/M, maka tidak akan ada
lagi yg membedakan antara akses ke IO dgn akses ke memori. Dalam hal ini semua akses
ke IO dianggap sama dgn akses ke memori. Oleh karenanya tidak ada lagi instruksi IN
dan OUT yg menyebabkan sinyal IO/M berharga 5V dan akan digantikan dgn instruksi
MOV yg menyebabkan sinyal IO/M berharga 0V
Contoh untuk desain decoder nomor 3 (variable addressing + isolated IO)
A0
A1
A2
A3
A4
A5
A6
A7
Address to 3-state
A8
A9 Decoder buffer
A10
A11
A12
A13
A14
A15
RD
IO/M
address line yg masuk ke Address Decoder (gerbang OR diatas) adalah A0 – A15 tidak
hanya sampai A7 saja.
instruksi untuk mengaktifkannya menjadi:
MOV DX,0004
IN AL,DX
Contoh untuk desain decoder nomor 4 (variable addressing + memory mapped IO)
A0
A1
A2
A3
A4
A5
A6
A7
Address to 3-state
A8
A9 Decoder buffer
A10
A11
A12
A13
A14
A15
RD
address line yg masuk ke Address Decoder (gerbang OR diatas) adalah A0 – A15 tidak
hanya sampai A7 saja. Dan sinyal IO/M tidak perlu di-decode-kan dan instruksinya
menjadi MOV AL,[DX] (setelah terlebih dahulu mengisi DX dengan 0004) !
addressing mode : register indirect
Contoh perangkat Output dengan menggunakan LED (Light Emitting Diode)
QD D0
QD D1
QD D2
QD
QD
QD
D3
D4
D5
8088
QD D6
QD D7
WR IO / M
Address
Decoder } Address
Bus
Disini akan digunakan D-FF (Data Flip-Flop) untuk menyimpan data keluaran dari i8088
agar datanya dapat dilihat terus sampai kemudian diubah dgn data lainnya. Untuk
mengaktifkan Flip-Flop kita tinggal mengaktifkan sinyal CLOCK-nya agar D-FF
membaca masukan data dan mengubah outputnya sesuai dgn data yg diberikan.
Kemudian sesuai dengan data yg tersimpan pada D-FF, lampu LED akan dinyalakan
sehingga kita dapat melihat (visualisasi) data yg dikeluarkan oleh i8088.
Misalnya data yg dikeluarkan adalah FF, maka semua LED akan menyala begitu
kesemua D-FF diaktifkan clock-nya.
sinyal IO/M tidak perlu di-decode-kan dan instruksinya menjadi MOV [F7], AL !
addressing mode : absolute
address line yg masuk ke IO decoder (gerbang AND diatas) adalah A0 – A15 tidak hanya
sampai A7 saja.
Contoh untuk desain decoder nomor 4 (variable addressing + memory mapped IO)
A0
A1
A2
A3
A4
A5
A6
A7
A8 Address to D-FF
A9
A10
A11
Decoder
A12
A13
A14
A15
WR
address line yg masuk ke IO decoder (gerbang NAND diatas) adalah A0 – A15 tidak
hanya sampai A7 saja. Dan sinyal IO/M tidak perlu di-decode-kan namun instruksinya
menjadi MOV [DX],AL (setelah terlebih dahulu mengisi DX dengan 00F7) !
addressing mode : register indirect
Mikroprosesor i8088
Mikroprosesor yg akan digunakan disini adalah µP Intel 8088 yang memiliki
karakteristik sebagai berikut (diambil dari spesifikasi teknis i8088 dari Intel®):
8-Bit Data Bus Interface (D0 – D7) ! Eksternal Data Bus = 8 jalur
16-Bit Internal Architecture ! Internal Data Bus = 16 jalur
Direct Addressing memori sampai 1 Mbyte ! Address Bus = A0 – A19
Operasi data dalam format Byte (8 bit), Word (16 bit), and Block (variable)
Mikroprosesor 8088 difabrikasi dgn teknologi N-channel, depletion load, silicon gate
(HMOS-II), dan dipasarkan dalam 40-pin CERDIP (Ceramic Dual In Line Package).
GND 1 40 Vcc
A14 2 39 A15
A13 3 38 A16/S3
A12 4 37 A17/S4
A11 5 36 A18/S5
A10 6 35 A19/S6
A9 7 34 SS0
A8 8 33 min/max
D7 / A7 9 32 read
D6 / A6 10 31 hold
D5 / A5 11 8088 30 hold ack
D4 / A4 12 29 write
D3 / A3 13 28 IO/mem
D2 / A2 14 27 DT/R
D1 / A1 15 26 DEN
D0 / A0 16 25 ALE
NMI 17 24 interrupt ack
interrupt 18 23 test
clock 19 22 ready
GND 20 21 reset
Pada i8088 ada beberapa pin yg harus diperhatikan (mode Minimum) :
Active High : pin tersebut dianggap aktif jika dalam kondisi High Voltage (VCC)
Active Low : pin tersebut dianggap aktif jika dalam kondisi Low Voltage (Ground)
In : arah sinyal masuk ke dalam i8088
Out : arah sinyal keluar dari i8088
Pow : Power Line (catu daya)
1 GND Vcc 40
A14 2 39 A15
A13 3 38 A16
A12 4 37 A17
A11 5 36 A18
A10 6 35 A19
A9 7
+5 V
A8 8 33 min/max
A7 QD D7 / A7 9 32 read
A6 D6 / A6 10
A5 D5 / A5 11
8088 +5 V
74
A4 D4 / A4 12 29 write CSync 1 18 Vcc
A3
LS D3 / A3 13 28 IO/mem 17 X1
15 MHz
A2 373 D2 / A2 14 16 X2
A1 D1 / A1 15
8284
+5 V
A0 QD D0 / A0 16 25 ALE ready 5
13 F/C
D0 D7
ALE clock 19 22 ready clock 8 11 res
20 GND 21 reset GND 9 10 reset
A B C D
D0
DQ DQ DQ DQ
D1
DQ DQ DQ DQ
D2
DQ DQ DQ DQ
D0 - D7
D3
Read
DQ DQ DQ DQ Only
D4 Memory
DQ DQ DQ DQ
4 byte
D5 A0 - A1
DQ DQ DQ DQ
CS
D6
DQ DQ DQ DQ
D7
DQ DQ DQ DQ
A0
A1
CS
Struktur Memori
CS A1 A0 Set Flip-Flop yang Disambungkan dgn Data Bus (D0 – D7)
0 0 0 A
0 0 1 B
0 1 0 C
0 1 1 D
1 X X tidak ada karena output semua gerbang OR = ‘1’
Dengan memberikan suatu harga tertentu pada Address Bus (A0 – A1) maka salah satu
set Flip-Flop akan diaktifkan dan datanya dapat diambil melalui Data Bus (D0 – D7) dgn
catatan input CS harus diaktifkan.
Memori diatas memiliki kapasitas 4 x 8 bit atau 4 byte.
Kapasitas suatu memori = 2n x d bit
dimana n = jumlah address bus yang masuk kedalam IC memori
d = jumlah data bus yang ada pada IC memori tersebut
Klasifikasi Memori
Memory
Memory Map Address line used
Size
256 Byte 00 – FF A0 A1 A2 A3 A4 A5 A6 A7
512 Byte 000 – 1FF A0 A1 A2 A3 A4 A5 A6 A7 A8
1 Kbyte 000 – 3FF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9
2 Kbyte 000 – 7FF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
4 Kbyte 000 – FFF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11
8 Kbyte 0000 – 1FFF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
16 Kbyte 0000 – 3FFF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13
32 Kbyte 0000 – 7FFF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14
64 Kbyte 0000 – FFFF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15
A7 1 24 Vcc A7 1 24 Vcc
A6 2 23 A8 A6 2 23 A8
A5 3 22 A9 A5 3 22 A9
A4
A3
4
5
2716 21
20
Vpp
CS
A4
A3
4
5
4016 21
20
WE
OE
A2 6 19 A10 A2 6 19 A10
A1 7 18 PGM A1 7 18 CS
A0 8 2 Kbyte 17 D7 A0 8 2 Kbyte 17 D7
D0 9 PROM 16 D6 D0 9 SRAM 16 D6
D1 10 15 D5 D1 10 15 D5
D2 11 14 D4 D2 11 14 D4
GND 12 13 D3 GND 12 13 D3
D0
D1
D2
D3
DATA
D4 ARRAY
D5
D6
D7
WE OE
Sinyal WE dan OE akan mengaktifkan salah satu set dari 3-state buffer (jika WE
diaktifkan ! arah data masuk ke dalam memori, jika OE diaktifkan ! arah data keluar
dari memori).
Untuk menyambungkan suatu keping memori dengan µP Intel 8088 dibutuhkan 3
penyambungan yaitu sambungan untuk data, alamat, dan kontrol.
Sambungan data adalah secara langsung karena lebarnya sama-sama 8 bit (D0 – D7)
baik dari sisi µP Intel 8088 maupun dari sisi memori.
dst… sampai
Pin A10 dari µP Intel 8088 disambungkan pada masukan A10 RAM/ROM
8088
RD signal Mem READ to pin OE
IO / M
WR signal Mem WRITE to pin WE
A0 A0
A1 A1
A2 A2
A3 A3
A4 A4
A5 A5
A6 A6
A7 A7 11 A0 - A10
A8 A8 A0 - A10
A9 A9
A10 A10 CS CS CS
A0 A0
A1 A1
A2 A2
A3 A3
A4 A4
A5 A5 11 A0 - A10
A6 A6
A7 A7 A0 - A10
A8 A8
A9 A9
A10 A10 CS CS CS
Gambar (b) dan (c) merupakan cara lain (yg lebih sederhana) untuk menggambarkan
interkoneksi (bus data dan bus alamat) antara 8088 dgn memori.
Jika digunakan dua buah 4016, akan timbul masalah ketika µP Intel 8088 akan
mengakses data pada alamat 00000 dimana akan ada suatu data dari 4016 yg pertama dan
ada data lainnya dari 4016 yang kedua.
Untuk menghindarinya, diperlukan suatu mekanisme pemilihan (selector) yang akan
memilih salah satu 4016. Jadi dalam suatu saat hanya ada satu 4016 yang aktif. Untuk hal
ini, disediakan sebuah masukan pada 4016 yang disebut dgn CS (Chip Select) yang aktif
Low.
Jika CS diaktifkan (diberikan Low Voltage) maka data didalam 4016 akan dapat diakses
oleh i8088. Sebaliknya jika CS tidak diaktifkan (diberikan High Voltage) maka data
didalam 4016 tidak akan dapat diakses.
Karena hanya ada 2 pilihan (2 buah 4016) maka dapat digunakan sebuah gerbang inverter
dimana untuk mengaktifkannya kita gunakan A19.
8088 D0 - D7
2716
A0 - A10
A
CS
A19 2716
B
CS
(a)
8088 D0 - D7
4016
A0 - A10
A WE
CS
OE
A19 4016
B WE
OE
CS
RD
Mem READ
IO/ M
WR
Mem WRITE
(b)
Peta memori untuk sistem diatas adalah sebagai berikut :
A19 ---------------------------A0
1111-1111-1111-1111-1111 = FFFFF
510 KByte
second half
berisi pengulangan content
512 K Byte
4016B (atau 2716B)
selected
1000-0000-1000-0000-0000 = 80800
when
1000-0000-0111-1111-1111 = 807FF A19 = 1
2 KByte
dari 4016B (atau 2716B)
1000-0000-0000-0000-0000 = 80000
0111-1111-1111-1111-1111 = 7FFFF
510 KByte
first half
berisi pengulangan content
512 K Byte
4016A (atau 2716A)
selected
0000-0000-1000-0000-0000 = 00800
when
0000-0000-0111-1111-1111 = 007FF A19 = 0
2 KByte
dari 4016A (atau 2716A)
0000-0000-0000-0000-0000 = 00000
Terjadinya pengulangan content memori karena tidak semua Address Line sisa (A11 –
A19) digunakan untuk menghasilkan sinyal CS. Perhatikan bahwa pada saat Address Bus
berisi 00000H dan 00800H, memori 4016A (atau 2716A) tetap diaktifkan. Dan pada
kedua kondisi tersebut, set flip-flop yg sama (yg pertama) yg akan diakses.
Untuk menghindari terjadinya pengulangan isi memori, maka seluruh sisa Address Line
yg tidak tersambung ke memori, harus di-kode-kan untuk menghasilkan sinyal CS. Pada
kasus diatas, untuk menghasilkan sinyal CS, maka seluruh A11 – A19 harus di-kode-kan
(tidak hanya A19 saja).
Masalah akan menjadi besar jika kita akan menggunakan lebih dari dua buah 4016,
dimana harus ada suatu sistem selektor untuk mengaktifkan salah satu memori. Disini
kita akan mendesainnya dengan gerbang logika.
D0 - D7
4016
A0 - A10 WE
A
N1 CS OE
4016
WE
B
N2 CS OE
4016
i8088 C WE
N3 CS OE
4016
WE
A18 D
N4 CS OE
A19
RD
Mem READ
IO / M
Mem WRITE
WR
A19 ---------------------------A0
1111-1111-1111-1111-1111 = FFFFF 254 KByte
berisi pengulangan fourth quarter
1100-0000-1000-0000-0000 = C0800 content 4016D 256 KByte
1100-0000-0111-1111-1111 = C07FF selected when
2 KByte A19 = 1 & A18 = 1
dari 4016 D
1100-0000-0000-0000-0000 = C0000
1011-1111-1111-1111-1111 = BFFFF 254 KByte third quarter
berisi pengulangan 256 KByte
1000-0000-1000-0000-0000 = 80800 content 4016C selected when
1000-0000-0111-1111-1111 = 807FF 2 KByte A19 = 1 & A18 = 0
dari 4016 C
1000-0000-0000-0000-0000 = 80000
0111-1111-1111-1111-1111 = 7FFFF 254 KByte
berisi pengulangan second quarter
0100-0000-1000-0000-0000 = 40800 content 4016B 256 KByte
0100-0000-0111-1111-1111 = 407FF selected when
2 KByte A19 = 0 & A18 = 1
dari 4016 B
0100-0000-0000-0000-0000 = 40000
0011-1111-1111-1111-1111 = 3FFFF 254 KByte
berisi pengulangan first quarter
0000-0000-1000-0000-0000 = 00800 content 4016A 256 KByte
0000-0000-0111-1111-1111 = 007FF selected when
2 KByte A19 = 0 & A18 = 0
dari 4016 A
0000-0000-0000-0000-0000 = 00000
Untuk menghindari terjadinya pengulangan isi memori, maka seluruh sisa Address Line
yg tidak tersambung ke IC memori tersebut harus di-kode-kan untuk menghasilkan sinyal
CS.
Sebagai contoh, kita akan membuat Address Decoder yg akan mengaktifkan salah satu
dari 4 IC memori yg berbeda-beda kapasitasnya. Karena sambungan data dan kontrol
selalu tetap, maka yg perlu diperhatikan hanya sambungan alamatnya saja (disesuaikan
dengan tabel).
A13
1100-0010-0000-0000-0000 = C2000
A14 1100-0001-1111-1111-1111 = C1FFF
A15 Address to CS of 8 KByte
A16 dari 2764
A17 Decoder 2764 1100-0000-0000-0000-0000 = C0000
A18
A19 1011-1111-1111-1111-1111 = BFFFF
252 KByte
empty
A12 1000-0001-0000-0000-0000 = 81000
A13
A14 1000-0000-1111-1111-1111 = 80FFF
A15 Address to CS of 4 KByte
A16 Decoder 2732 1000-0000-0000-0000-0000 = dari 2732
A17 80000
A18
A19 0111-1111-1111-1111-1111 = 7FFFF
254 KByte
empty
A11
A12 0100-0000-1000-0000-0000 = 40800
A13 0100-0000-0111-1111-1111 = 407FF
A14 Address to CS of 2 KByte
A15
A16 Decoder 2716 dari 2716
A17
0100-0000-0000-0000-0000 = 40000
A18 0011-1111-1111-1111-1111 = 3FFFF
A19
255 KByte
empty
A10
A11
A12 0000-0000-0100-0000-0000 = 00400
to CS of 0000-0000-0011-1111-1111 = 003FF
A13
A14 Address 1 KByte
A15
A16
Decoder 2708 dari 2708
A17
0000-0000-0000-0000-0000 = 00000
A18
A19
Alternatif lain (dan juga yg paling banyak diterapkan) untuk mengaktifkan salah satu
keping memori adalah dengan menggunakan address decoder. Decoder adalah suatu alat
yang akan menterjemahkan kondisi input dengan mengaktifkan salah satu outputnya.
Setiap output dari decoder akan dihubungkan ke masukan CS dari salah satu keping
memori. Karena hanya ada satu output yg aktif, maka hanya ada satu keping memory yg
diaktifkan.
Pada contoh diatas (4 buah 4016), karena ada 4 buah keping yang akan diaktifkan, maka
dibutuhkan decoder 2-to-4 yang memiliki 4 buah output dan salah satu output akan
mengaktifkan salah satu keping memori yang bersesuaian.
Sedangkan untuk menyeleksi 8 keping memori, kita dapat menggunakan 3-to-8 Decoder
yang akan menterjemahkan sinyal A17, A18, dan A19 untuk mengaktifkan salah satu dari
8 keping memori.
Rangkaian lengkap dari sistem µP Intel 8088 dengan 4 keping memori ada pada gambar
berikut ini :
D0 - D7
2716
A0 - A10
A
CS
2716
B
CS
i8088
2716
C
CS
A18
2 to 4
2716
A19
Decoder
D
CS
PPI 8255
Untuk mengirimkan data ke perangkat luar, µP8088 dapat menggunakan latch (Flip-
Flop) untuk menyimpan data tersebut sampai ada data baru yang ingin dikirim µP 8088.
Sedangkan untuk menerima data, diperlukan pula suatu latch untuk menyimpan data,
sampai µP 8088 memiliki waktu untuk mengambil data tersebut.
Sebuah latch hanya dapat digunakan untuk satu arah saja : output atau input. Untuk
sistem yang kompleks, implementasi dengan PPI 8255 (Programmable Peripheral
Interface) akan sangat memudahkan dan menyederhanakan sistem.
Hal ini disebabkan karena PPI 8255 memiliki 3 latch yang dapat diprogram sesuka kita,
apakah ingin dibuat sebagao input latch atau sebagai output latch.
PA3 1 40 PA4
PA2 2 39 PA5
PA1 3 38 PA6
PA0 4 37 PA7
read 5 36 write
CS 6 35 reset
ground 7 34 D0
A1 8 33 D1
A0 9 32 D2
PC7 10 31 D3
PC6 11 8255 30 D4
PC5 12 29 D5
PC4 13 28 D6
PC0 14 27 D7
PC1 15 26 Vcc
PC2 16 25 PB7
PC3 17 24 PB6
PB0 18 23 PB5
PB1 19 22 PB4
PB2 20 21 PB3
DATA REGISTER
D0 - D7 BUS DATA PA0 - PA7
BUFFER A
Group A
A0
A1 2 TO 4 PC0 - PC3
DECODER REGISTER
DATA
C
PC4 - PC7
REGISTER
CONTROL Group B
REGISTER
DATA PB0 - PB7
RD READ/WRITE B
CONTROL
LOGIC
WR
Terlihat bahwa PPI 8255 memiliki 3 port I/O (setiap port memiliki lebar 8 bit). Ketiga
port tersebut diberi nama port A, port B, dan port C.
Register 8255
diakses saat
keterangan
A0 A1
Register data A 0 0 register ini menyimpan data dari/untuk port A
Register data B 0 1 register ini menyimpan data dari/untuk port B
Register data C 1 0 register ini menyimpan data dari/untuk port C
Register kontrol 1 1 register untuk mengontrol kerja 3 register lainnya
Register data A, register data B, dan register kontrol hanya dapat diakses dalam format 8-
bit. Register data C dapat diakses dalam 2 nibble (2 x 4 bit) yaitu Lower C (C0 – C3) dan
Upper C (C4 – C7)
Programming 8255
Dengan mengirim suatu informasi selebar 1 byte ke register kontrol, kita dapat
memprogram kerja dari port A, B, dan C. Informasi ini disebut juga dengan Control
Word. Control Word A berfungsi untuk memprogram kerja setiap port, sedangkan
Control Word B berfungsi untuk menSet atau meReset salah satu bit di Port C.
1 D6 D5 D4 D3 D2 D1 D0
Group B
Tipe Port C Lower (PC0-PC3)
0 → output
1 → input
Tipe Port B
0 → output
1 → input
Mode Selector
0 → mode 0
1 → mode 1
Group A
Tipe Port C Upper (PC4-PC7)
0 → output
1 → input
Tipe Port A
0 → output
1 → input
Mode Selector
00 → mode 0
01 → mode 1
1X → mode 2
Control Word B :
menSet/Reset salah satu bit di Port C saat 8255 bekerja pada mode
0 X X X D3 D2 D1 D0
Karena masing-masing port dapat diprogram sebagai buffer input maupun output, maka
untuk memudahkan, 8255 didesain khusus untuk menerima 3 mode kerja :
pada mode ini setiap port bekerja secara independen. masing-masing dapat bekerja
sebagai input atau output.
MODE 0 - 8255
Port B Port C Port A
8 lines
4 lines
4 lines
8 lines
Control Word A :
D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 A CU 0 B CL
A = 0 (port A sbg Output); B = 0 (port B sbg Output); CU = 0 (Port C Upper sbg output);
CL = 0 (Port C Lower sbg Output)
2. mode 1 : Strobe I/O
MODE 1 - 8255
Port B Port C Port A
8 lines
8 lines
I/O Control atau I/O I/O
Control Word B :
D7 D6 D5 D4 D3 D2 D1 D0
1 don’t care a b c 0/1
MODE 2 - 8255
Port B Port C Port A
8 lines
8 lines
Bidirectional I/O Control Bidirectional
Control Word A :
D7 D6 D5 D4 D3 D2 D1 D0
1 1 X A CU 1 B CL
Control Word B :
D7 D6 D5 D4 D3 D2 D1 D0
1 don’t care a b c 0/1
Kedua jenis interupsi di atas akan menyebabkan µP Intel 8088 mengerjakan suatu routine
(program kecil) khusus (Interrupt Service Routine).
Software Generated
00003 00
Segment address
00002 C9
Interrupt #00
00001 0F
Offset address
00000 9E
4. Mengerjakan routine XX
µP 8088 akan mengerjakan semua instruksi yg ada sampai ditemukan instruksi IRET
(Interrupt Return)
Adanya sinyal +5V pada pin 18 pada 8088 akan menyebabkan 8088 meninggalkan
program yg sedang dikerjakan, dan mengerjakan routine khusus untuk nomor interupsi
tersebut. Setelah routine tersebut selesai dikerjakan, maka 8088 akan kembali ke program
semula yg tadinya ditinggalkan.
Urutan kerja µP 8088 saat mendapatkan sinyal aktif pada pin 18 (INTR) :
1. Menyimpan isi register ke Stack
2. Mengaktifkan sinyal INTA (Interrupt Acknowledged) di pin 24
3. Membaca nomor interupsi di Address Bus (A0 – A7)
4. Mencari alamat routine untuk nomor interupsi tersebut
5. Lompat ke alamat routine tersebut
6. Mengerjakan routine tersebut
7. Kembali ke program semula dgn cara mengembalikan semua isi register dari Stack
Urutan kerja yang harus dilakukan oleh CU dalam mengerjakan suatu instruksi
tergantung pada desainnya. Arsitektur VLI (Variable Length Instruction) seperti pada x86
menggunakan 3 tahapan sebagai berikut :
IR ! Mem[CS+IP]
Proses kerja dimulai dengan penjemputan instruksi baru, bagian operation codenya
(opcode) dari memori ke Instruction Register (IR). Untuk dapat menjemput opcode
instruksi baru tersebut, Control Unit (CU) harus menerjemahkan isi dari register Code
Segment dan Instruction Pointer (CS+IP) untuk menentukan letak dari instruksi baru
tersebut di memori. Hasil terjemahan isi CS+IP ini dikirim CU ke pengontrol memori
melalui bus alamat, yang kemudian oleh pengontrol memori, isi dari cell memori yang
bersesuaian diletakkan di bus data. CU kemudian memasukkannya ke IR.
Isi baru dari IR tersebut kemudian diterjemahkan oleh CU untuk mengetahui apa saja
yang diinginkan oleh instruksi baru tersebut. Untuk penterjemahan ini, CU menggunakan
bantuan tabel instruksi untuk memahami isi dari opcode tersebut. Karena belum tentu
opcode yg ada di IR tersebut adalah instruksi lengkapnya, maka ada kemungkinan akan
terjadi penjemputan kembali ke memori untuk melengkapi instruksinya.
Contoh :
PUSH AX = 50 " instruksi 1 byte yg berarti tidak perlu lagi penjemputan ke memori
MOV AX,0007 = B8 07 00 " hanya opcode = B8 yg dijemput pada tahap IF. Ini
menyebabkan perlunya pengaksesan memori kembali untuk menjemput data “07 00”
Tergantung dari hasil penterjemahan instruksi diatas, CU akan melaksanakan satu dari
tiga fungsi, yaitu :
• Data Transfer: CU akan memindahkan data dari suatu elemen memori ke elemen
memori lainnya, contoh : MOV, PUSH, POP
• Aritmetika dan Logika: CU akan meminta ALU (Arithmetic and Logic Unit)
untuk melakukan kalkulasi, contoh : ADD, SUB, XOR, AND
• Control: CU akan melompat ke suatu lokasi memori dengan cara mengubah isi
register CS dan IP, contoh : JMP, JE, JZ, CALL, RET
Set Instruksi
Di dalam CPU terdapat daftar instruksi yang dapat dikerjakan hanya oleh CPU itu
sendiri. Daftar ini sering disebut sebagai microcode dan setiap kali CPU menerima
sebuah instruksi, CPU akan menterjemahkan kode instruksi tersebut (decoding) dan
kemudian melihat arti dari masing-masing pecahan tersebut di microcode.
Ini menunjukkan bahwa tidak semua CPU memiliki microcode yg sama. Beda arsitektur
berarti berbeda juga microcodenya. Sebagai contoh, program yang dapat dijalankan di
IBM PC tidak akan jalan di Apple Macintosh.
Pada arsitektur Intel 80x86, berdasarkan pengukuran dengan SPECint92, pada umumnya
terdapat penggunaan extensive pada beberapa tipe instruksi tertentu.
Addressing Mode
Jika CPU mengerjakan instruksi yang memerlukan pengalamatan, instruksi tersebut pasti
termasuk ke salah satu jenis pengalamatan (addressing mode) di bawah ini :
Sebagai contoh :
Instruksi 1 : ADD AX,AX
Instruksi 2 : ADD BX,CX
Dengan adanya pipeline dua instruksi selesai dilaksanakan pada detik keenam (sedangkan
pada kasus tanpa pipeline baru selesai pada detik kesepuluh). Dengan demikian telah
terjadi percepatan sebanyak 1,67x dari 10T menjadi hanya 6T. Sedangkan untuk
pengerjaan 3 buah instruksi terjadi percepatan sebanyak 2,14x dari 15T menjadi hanya
7T.
Untuk kasus pipeline sendiri, 2 instruksi dapat dikerjakan dalam 6T (CPI = 3) dan 3
instruksi dapat dikerjakan dalam 7T (CPI = 2,3) dan untuk 4 instruksi dapat dikerjakan
dalam 8T (CPI = 2). Ini berarti untuk 100 instruksi akan dapat dikerjakan dalam 104T
(CPI = 1,04). Pada kondisi ideal CPI akan mencapai harga 1.
Kelemahan pipeline adalah untuk mencapai keadaan ideal tersebut, setiap instruksi yang
berdekatan harus tidak tergantung dari instruksi disekitarnya. Inilah yang disebut
paralelism yaitu dimana instruksi-instruksi disusun sedemikian sehingga mereka dapat
dijalankan secara bersamaan (paralel).
Masalah-masalah pada Pipeline
Dengan adanya persyaratan bahwa setiap instuksi yang berdekatan harus tidak saling
bergantung, maka ada kemungkinan terjadinya situasi dimana pipeline gagal
dilaksanakan (instuksi berikutnya tidak bisa dilaksanakan). Situasi ini disebut Hazards.
Hazards mengurangi performansi dari CPU dimana percepatan ideal tidak dapat dicapai.
Ada 3 kelompok Hazards :
1. Structural Hazards muncul dari konflik resource sistem yaitu ketika hardware tidak
dapat mensuport semua kemungkinan kombinasi pelaksanaan instruksi
2. Data Hazards muncul ketika data untuk suatu instruksi tergantung pada hasil instruksi
sebelumnya
3. Control Hazards muncul pada pelaksanaan instruksi yang mengubah PC (contoh :
branch)
Adanya Hazards menyebabkan pipeline terhambat (stalled). Tidak ada instruksi baru
yang dijemput sampai hambatan itu selesai. Ini berarti instruksi-instruksi selanjutnya
akan ditunda pula penjemputannya.
Structural Hazards
Ketika suatu mesin di-pipeline, eksekusi dari instruksi yang bertumpukan tersebut
membutuhkan pemasangan pipeline pada unit-unit fungsional dan duplikasi resource
untuk memperbolehkan semua kemungkinan kombinasi pelaksanaan instruksi di pipeline.
Jika beberapa kombinasi dari instruksi tidak dapat diakomodasikan karena konflik
resource, CPU tersebut dikatakan memliki structural hazards
Sebagai contoh, sebuah mesin yang memiliki sistem memori dengan hanya 1 port (1 set
address bus dan 1 set data bus) untuk membaca dan menulis, akan menghasilkan stall
setiap kali tahapan EX dan IF terjadi bersamaan dimana suatu instruksi pada tahap EX
ingin menulis memori dan pada saat yang bersamaan instruksi lainnya ada pada tahap IF
yang berarti pembacaan memori.
t= 1 2 3 4 5 6 7
PUSH AX IF DE EX
PUSH BX IF DE EX
ADD AX,AX IF DE IF DE EX
Pada t3 terjadi dua buah akses ke memori. Yang pertama untuk mengirim isi register AX
ke stack dan yg kedua untuk menjemput instruksi ketiga (ADD). Jika memori tidak
mendukung 2 pembacaan sekaligus seperti ini, maka akan terjadi Structural Hazard
dimana penjemputan instruksi ketiga (ADD) akan ditunda sampai detik keempat.
Data hazards terjadi ketika pipeline merubah urutan baca/tulis ke operand sehingga
urutannya menjadi berbeda dengan urutan yang dilihat dengan menjalankan instruksi-
instruksi tersebut pada mesin yang tidak di-pipeline.
Data Hazards dapat diklasifikasikan menjadi 3 tipe dilihat dari urutan operasi baca-tulis
oleh instruksi yang berdekatan. Jika ada 2 instruksi X dan Y dimana instruksi X
dikerjakan lebih dahulu dari instruksi Y :
t= 1 2 3 4 5 6
MOV AX, 0000 IF DE IF DE EX
MOV AX, FFFF IF DE IF DE EX
PUSH AX IF DE EX
Jika ketiga instruksi tersebut dikerjakan pada uP tanpa pipeline, maka data yang di-Push
ke stack adalah FFFF.
Namun ternyata jika dikerjakan pada uP dengan pipeline, yang di-Push ke stack adalah
0000.
Hal ini disebabkan karena register AX akan diisi harga 0000 oleh instruksi pertama pada
t5,
dan kemudian akan ditumpuk oleh instruksi kedua dengan data FFFF pada t6.
Instruksi ketiga akan membaca AX pada t5 sehingga yang dibaca adalah 0000 bukan
FFFF.
RAW adalah type yang paling sering terjadi diantara tipe yg lain.
WAW (Write After Write) : Y mencoba untuk menulis suatu cell memori sebelum ditulis
oleh X. Urutan penulisan menjadi terbalik sehingga isi dari memori adalah hasil proses
instruksi X padahal yang diinginkan adalah hasil proses dari instruksi Y (tertumpuk oleh
hasil instruksi X)
t= 1 2 3 4 5
MOV AX,FFFF IF DE IF DE EX
POP AX IF DE EX
Jika kedua instruksi tersebut dikerjakan pada uP tanpa pipeline, maka data yang ada di
AX adalah dari stack.
Namun ternyata jika dikerjakan pada uP dengan pipeline, data yang ada di AX adalah
0000.
Hal ini disebabkan karena register AX akan diisi data dari stack oleh instruksi kedua pada
t4 sedangkan instruksi pertama akan menumpuknya dengan data 0000 karena instruksi
kedua baru selesai pada t5.
WAR (Write After Read) : Y mencoba untuk menulis suatu cell memori sebelum dibaca
oleh X.
t= 1 2 3 4 5 6
MOV AX,FFFF IF DE IF DE EX
MOV BX,AX IF DE IF DE EX
POP AX IF DE EX
Jika ketiga instruksi tersebut dikerjakan pada uP tanpa pipeline, maka data yang ada di
BX adalah FFFF. Namun ternyata jika dikerjakan pada uP dengan pipeline, data yang ada
di BX berasal dari stack.
Hal ini disebabkan karena register AX akan diisi data dari stack oleh instruksi ketiga pada
t5, dan data ini akan menumpuk data FFFF yang diberikan oleh instruksi pertama.
Teknik yang pertama adalah forwarding atau bypassing dimana hasil dari suatu tahap
pengerjaan instruksi diumpankan langsung ke tahapan dimana instruksi lainnya
memerlukan hasil dari tahap tersebut.
Sebagai contoh adalah output dari ALU (tahap EX) diumpankan langsung kembali ke
ALU yang digunakan untuk melaksanakan proses selanjutnya. Teknik ini sederhana
untuk dilakukan namun akan memperumit desain CPU dan tidak dapat digunakan untuk
semua kasus Data Hazard.
Teknik kedua adalah yang paling sering digunakan yaitu dengan penjadwalan instruksi
(Instruction Scheduling). Disini instruksi-instruksi disusun sedemikian rupa agar tingkat
kebergantungan antara instruksi yang berdekatan dapat dikurangi. Hal ini membutuhkan
suatu compiler yang canggih dan pintar untuk melakukan penyusunan instruksi.
Contoh :
Pada cuplikan program Pascal :
a := b + c;
d := a + e;
dimana a = [0000], b = [0002], c = [0004], d = [0006], e = [0008]
t= 1 2 3 4 5 6 7 8 9 10 11 12
MOV BX, [0002] IF DE IF DE EX
MOV CX, [0004] IF DE IF DE EX
a:=b+c
ADD BX, CX IF DE EX
MOV [0000], BX IF DE IF DE EX
MOV AX, [0000] IF DE IF DE EX
MOV BX, [0008] IF DE IF DE EX
d:=a+e
ADD AX, BX IF DE EX
MOV [0006], AX IF DE IF DE EX
t= 1 2 3 4 5 6 7 8 9 10
MOV BX, [0002] IF DE IF DE EX
MOV CX, [0004] IF DE IF DE EX
ADD BX, CX IF DE EX
MOV [0000], BX IF DE IF DE EX
2. antara instruksi ke-6 dan ke-7 dimana instruksi ketujuh akan membaca BX sebelum
diisi data [0008] oleh instruksi keenam. Untuk menghindarinya, kita harus menunda
eksekusi instruksi ketujuh sampai detik ke-13 agar BX yg dibaca adalah data dari
[0008] (semua instruksi telah tergeser 2T karena penundaan instruksi ketiga diatas)
t= 7 8 9 10 11 12 13 14 15 16
MOV AX, [0000] IF DE IF DE EX
MOV BX, [0008] IF DE IF DE EX
ADD AX, BX IF DE EX
MOV [0006], AX IF DE IF DE EX
Total waktu yg dibutuhkan untuk melaksanakan semua instruksi menjadi 16T karena ada
4 buah penundaan.
Dengan hasil yang sama, delapan instruksi diatas dapat disusun ulang (reschedule)
pengerjaannya menjadi :
t= 1 2 3 4 5 6 7 8 9 10 11 12 13
MOV BX, [0002] IF DE IF DE EX
MOV CX, [0004] IF DE IF DE EX
MOV AX, [0008] IF DE IF DE EX
sisipan
instruksi lain
ADD BX, CX IF DE EX
MOV [0000], BX IF DE IF DE EX
sisipan
instruksi lain
ADD AX, BX IF DE EX
MOV [0006], AX IF DE IF DE EX
Dengan menyusun ulang instruksi waktu yang dibutuhkan sekarang menjadi 13T.
Control Hazard
Control Hazards menyebabkan CPU kehilangan performansi yang sangat besar karena
ketika suatu instruksi mengubah isi Program Counter (CS+IP), seluruh instruksi
setelahnya akan dibatalkan meskipun sudah dijemput (IF).
Hal ini terjadi jika instruksi tersebut adalah lompatan (jump), panggilan service (call),
dan kembali ke alur program sebelumnya (return). Untuk jump, call, dan return, teknik
minimisasi control hazard adalah dengan menghitung alamat tujuan terlebih dahulu dan
menjemput instruksi di alamat tujuan tersebut. Hal ini karena ketiga instruksi tersebut
perubahan isi PC pasti akan dilakukan (karena lompatan tanpa syarat).
Sedangkan untuk lompatan bersyarat isi PC dapat berubah dan dapat juga tidak. Hal ini
akan menyebabkan stall yang cukup besar jika instruksi yang dijemput adalah instruksi
yang salah.
offset t= 1 2 3 4 5 6 7 8 9
a:=0 0100 MOV AX, 0000 IF DE IF DE EX
repeat 0103 MOV CX, 000A IF DE IF DE EX
a:=a+1 0106 ADD AX, 0001 IF DE IF DE EX
until 0109 XOR CX, AX IF DE IF DE EX
a=10
010B JNZ 0103 IF DE IF DE EX
a:=b 010D POP AX IF DE EX
Saat instruksi JNZ 0103 dieksekusi (t9), instruksi POP AX telah selesai dieksekusi (t8).
Jika lompatan ternyata tidak dilakukan, maka hal ini tidak menjadi masalah karena
memang instruksi berikutnya adalah POP AX. Namun jika lompatan ternyata dilakukan,
maka hal ini akan menjadi masalah karena register AX telah diubah oleh instruksi POP
AX.
Ada dua cara yg dapat dilakukan untuk mengurangi Control Hazard :
1. dengan mendeteksi terlebih dahulu apakah lompatan bersyarat akan dilaksanakan atau
tidak dengan mengetes instruksi yang mempengaruhi keputusan tersebut. Kelanjutan
dari tes ini adalah menghitung alamat tujuan terlebih dahulu. Kelebihan dari cara ini
adalah deteksinya 100% benar. Dan kekurangannya adalah diperlukannya hardware
tambahan (yg cukup banyak) untuk dapat melakukan testing tersebut.
2. dengan mengasumsikan apakah lompatan bersyarat tersebut akan dilakukan atau
tidak.
a. Predict Taken adalah menganggap semua lompatan bersyarat pasti dilakukan
(pasti melompat) sehingga begitu terjemput suatu instruksi lompatan, maka yg
dijemput kemudian adalah instruksi-instruksi di alamat tujuan lompatan tersebut.
b. Predict Not Taken adalah menganggap semua lompatan bersyarat pasti tidak
dilakukan (pasti tidak melompat) sehingga jika terjemput suatu instruksi
lompatan, maka yg dijemput kemudian adalah instruksi-instruksi setelah instruksi
lompatan tersebut.
Pengembangan lebih lanjut dari kedua metode diatas (predict-taken dan predict-not-
taken) adalah dgn suatu metode yg disebut scoreboard. Algoritma yg digunakan pada
metode ini adalah Tomasulo.
Not Taken
Taken
Predict Predict
Taken Taken
00 01
Taken
Predict
Predict Not Taken Not
Not Taken
Taken 10
11
Taken
Not Taken