SISTEM KERJA
1
MIKROPROSESOR Percobaan I
Tujuan Percobaan 1. Mempelajari hubungan bahasa tingkat rendah dengan arsitektur mikroprosesor. 2. Memahami konsep pemograman modular dan pengolahan data dalam memori 3. Memecahkan masalah kompeks dalam manipulasi data di dalam mikroprosesor dan memori.
Teori Dasar CPU (Central Processing Unit) sesuai dengan namanya merupakan “otak” pada sebuah komputer. Semua kalkulasi, pengambilan keputusan, dan pemindahan data dilakukan disini. CPU memiliki tempat penyimpanan yang disebut register. Dalam sebuah CPU juga terdapat ALU (Arithmetic and Logic Unit) yang digunakan untuk melakukan operasi – operasi penjumlahan, pengurangan, inversi, OR, AND, dan XOR. Proses yang dilakukan CPU secara umum adalah sebagai berikut, mengambil data dari register, kemudian diproses, dan selanjutnya dikembalikan lagi ke register.
Keluarga 80x86 Pada keluarga 80x86, mikroprosesor 8086 merupakan mikroprosesor generasi pertama yang diperkenalkan pada tahun 1978. Generasi ini berkembang hingga saat ini (Pentium II di tahun 1997). Banyak sekali perbedaan – perbedaan yang terjadi pada proses metamorfosa keluarga mikroprosesor ini. Tetapi perubahan yang terjadi tetap selalu menjaga kompatibilitas mikroprosesor sebelumnya. Sehingga antara generasi pertama hingga generasi saat ini masih memiliki kesamaan karakteristik yang mendasar, kesamaan tersebut hanya terjadi bila mikroprosesor melakukan operrasi operasi 16-bit. Berikut adalah kesamaan yang dimiliki oleh keluarga 80x86 : General Purpose Register CPU memiliki 4 buah general purpose register yang selalu ditandai dengan akhiran X, yaitu AX (Accumulator), BX (Base), CX (Count), dan DX (Data) dengan ukuran masing-masing sebesar 16-bit. Register ini dapat dipisah menjadi dua bagian di mana masing-masing bagian terdiri atas 8-bit. Bagian pertama disebut dengan “H” (High) dan bagian yang lain sebagai “L” (Low). Register 8-bit ini dapat menyimpan
Percobaan I - Sistem Kerja Mikroprosesor
8
bilangan bulat posistif atara 0 sampai 127 dan bilangan bulat antara –128 sampai +127. Register digunakan sebagai referensi awal untuk lokasi alamat pada RAM disebabkan transfer data antara RAM dengan CPU membutuhkan waktu yang 15
7
Accumulator
AH
Base
BH
Count
CH
Data
DH
0
AX BX CX DX
AL BL CL DL
Multiply, devide, IO, dan fast arithmetic Pointer to base address (data segment) Count for loops, repeats, shifts, dan rotates Multiply, devide, dan IO
Gambar 1 General-Purpose Registers untuk mikroprosesor keluarga 80x86
cukup lama. Pada mikroprosesor 80386 ke atas akan mendapat tambahan register EAX (Extended Accumulator), EBX (Extended Base), ECX (Extended Count), dan EDX (Extended Data). Index Register CPU juga memiliki 2 buah index register yang selalu ditandai dengan akhiran I, yaitu SI (Source Index) dan DI (Destination Index). Register ini dapat digunakan untuk penyimpanan, tetapi tidak dapat mengakses 1 byte pada satu waktu yang bersamaan, sehingga membuat register ini kurang fleksibel. Tetapi SI dan DI memiliki kekhususan dalam menangani operasi string.
Source string dan index pointer
Source Index
SI
Destination Index
DI
Destination string dan index pointer
Gambar 2 Index Registers untuk mikroprosesor keluarga 80x86.
Pada mikroprosesor 80386 ke atas akan mendapat tambahan register ESI (Extended Source Index) dan EDI (Extended Destination Index). Pointer Register Di dalam CPU mengenal 3 buah pointer register yang juga selalu ditandai dengan akhiran P, yaitu IP, SP, dan BP. Pada mikroprosesor 80386 ke atas akan
Percobaan I - Sistem Kerja Mikroprosesor
9
mendapat tambahan register EIP (Extended Instruction Pointer), ESP (Extended Stack Pointer), dan EBP (Extended Base Pointer). IP (Instruction Pointer) Register menunjukan alamat di memori tempat dari intruksi selanjutnya akan dieksekusi. Ketika eksekusi selesai, IP bertambah ke instruksi berikutnya. Instruksi “Jump”, nilai IP berubah mengikuti arah “Jump”. Sedangkan untuk instruksi “Call”, nilai IP akan berubah kembali setelah dikembalikan dari stack. SP (Stack Pointer) Stack menggunakan aturan sistem penyimpanan secara LIFO (Last In First Out). Stack digunakan untuk menyimpan penunjukan alamat yang akan terpakai kemudian, dan penunjukan alamat tersebut dapat dikeluarkan dari stack pada saat akan digunakan. SP berpasangan dengan segment register SS (SS:SP).
Pointer to base address (stack segment)
Base Pointer
BP
Stack Pointer
SP
Instruction Pointer
IP
Pointer top of stack
Gambar 3 Pointer Registers untuk mikroprosesor keluarga 80x86
BP (Base Pointer) BP digunakan sebagai pencatat suatu alamat di memori tempat data. BP ini berpasangan dengan segment register SS (SS:BP). Segmented Addressing dan Segment Register “Segmented Addressing” adalah sebuah mekanisme internal yang mengijinkan mikroprosesor untuk melakukan pengalamatan sebesar 1 Mbyte pada memori utama 1. Dengan mekanisme ini mikroprosesor dapat mengakses memori utama dengan cara mengkombinasikan 2 buah alamat 16-bit. Dua buah alamat tersebut dapat di representasikan di dalam program sebagai berikut : segmen:offset Pada 16-bit alamat pertama, merupakan alamat segmen. Sedangkan alamat berikutnya adalah alamat offset. Kerja yang dilakukan alamat segmen yaitu memilih 64K area memori, dan alamat offset bekerja sebagai pemilih byte di dalam sebuah area. Berikut akan dijelaskan mengenai cara kerjanya:
Percobaan I - Sistem Kerja Mikroprosesor
10
1. Alamat segmen akan digeser oleh mikroprosesor sebanyak 4-bit ke kiri, sehingga akan menghasilkan alamat 20-bit dengan akhiran 0. Operasi ini sama dengan efek pada perkalian 16. 2. Mikroprosesor akan menambahkan alamat 20-bit ini dengan alamat offset 16bit. Dimana alamat offset tidak mengalami pergeseran. 3. Mikroprosesor menggunakan hasil dari alamat 20-bit ini yang disebut dengan alamat fisik / physical Address yang digunakan untuk mengakses lokasi alamat yang sebenarnya pada ukuran 1 Mbyte. Gambar 4 merupakan ilustrasi proses “Segmented Addressing”. Sebenarnya mikroprosesor keluarga 80x86 hanya dapat menangani pengalamatan 64K pada satu waktu (karena ukuran register yang dipergunakan hanya sebesar 16-bit). Dengan penggunaan mekanisme ini, mikroprosesor keluarga 80x86 mampu untuk menjangkau seluruh alamat sebesar 1 Mbyte. 15
0
16-bit segment register
15
0
Segment register shifted left 4 bits 15
0
16-bit offset 19
0
20-bit physical address Gambar 4 Mengilustrasikan bagaimana mikroprosesor keluarga 80x86 menghitung alamat fisik
Ada 4 buah segment register yang selalu ditandai dengan akhiran S, yaitu CS, DS, SS, dan ES. Sedangkan pada mikroprosesor 80386 ke atas terdapat tambahan register segmen 16-bit, yaitu FS (Extra Segment) dan GS (Extra Segment). CS (Code Segment) CS (Code Segment) selalu digunakan oleh mikroprosesor untuk menunjukan tempat dari segmen alamat yang instruksi berikutnya akan diproses oleh IP (Instruction Pointer). IP merupakan alamat offset. CS:IP merepresentasikan instruksi berikutnya pada jangkauan alamat memori penuh.
1
Lihat percobaan III
Percobaan I - Sistem Kerja Mikroprosesor
11
DS (Data Segment) Register DS (Data Segment) biasanya digunakan untuk menunjukan tempat segmen di mana data-data program disimpan. Umumnya isi dari register ini tidak perlu diubah kecuali pada program residen.
Code Segment
CS
Data Segment
DS
Stack Segment
SS
Extra Segment
ES
Gambar 5 Segment Register untuk mikroprosesor keluarga 80x86
SS (Stack Segment) Ketika
mikroprosesor
mengakses
data
pada
stack,
proses
tersebut
menggunakan SS (Stack Segment). SS:SP selalu menunjuk pada suatu alamat di memori yang merupakan posisi dari stack. ES (Extra Segment) Register ES (Extra Segment), sesuai dengan namanya adalah suatu register bonus yang tidak mempunyai suatu tugas khusus. Register ES ini biasanya digunakan untuk menunjukan suatu alamat di memori yang berada diluar daerah standar. ES sangat berperan di dalam instruksi string. Dengan cara ini, register DI selalu relatif ke alamat segmen ES. Flag Register Register ini berisikan flag yang merupakan laporan status dari CPU 2. Adapun flag yang digunakan pada mikroprosesor 8086 keatas adalah :
2
O
OverFlow
Flag akan mencatat jika hasil yang didapat terlalu besar untuk ditempatkan didalam register
D
Direction
Digunakan pada operasi string untuk menunjukan arah proses
I
Interrupt Enable
T
Trap
Digunakan untuk proses instrusi secara bertahap
S
Sign
Flag akan mencatat jika hasil kalkulasi bernilai negatif.
Z
Zero
Flag akan mencatat jika hasil kalkulasi bernilai 0.
CPU akan mengabaikan interupsi jika flag ini disable
Lihat percobaan III
Percobaan I - Sistem Kerja Mikroprosesor
12
A
Auxiliary Carry
Flag akan mencatat jika operasi menghasilkan carry atau borrow pada 4-bit bagian rendah. Flag ini digunakan pada operasi BCD.
P
Parity
Flag akan mencatat jika bilangan yang dihasilkan adalah bilangan genap
C
Carry
Jika terjadi carry atau borrow pada operasi aritmatika maka akan dicatat oleh flag.
Tabel 1 Susunan flag yang digunakan pada mikroprosesor 8086 ke atas 3.
NT 15
IOPL
O
D
I
T
S
Z
A
P
C
7 Gambar 6 Model flag untuk mikroprosesor keluarga 80x86
0
Sedangkan flag lain yang berlaku pada keluarga 80x86 ini adalah : Flag yang berfungsi untuk menjaga jalannya interupsi yang terjadi secara berurutan
*
NT
Nested Task
IOPL
IO Protection Level
PE
Protection Enable
MP
Monitor Coprosessor
*
EM
Emulate Coprosessor
*
TS
Task Switched
*
ET
Extention Type
*
RF
Resume Flag
VF
Flag akan mencatat jika mode proteksi digunakan dan sebaliknya akan berada pada mode real
*
Digunakan bersama flag trap untuk menangani terjadinya instruksi WAIT Flag ini digunakan untuk prosesor matematik x87
mengemulasikan
Flag ini dapat dijumpai pada mikroprosesor 80286 ke atas Flag ini digunakan untuk menentukan jenis prosesor matematik 80287 atau 80387 Flag ini dapat dijumpai pada mikroprosesor 80386 ke atas
**
Virtual 8086 mode
Flag ini terdiri atas 2 bit digunakan untuk mode proteksi
*
**
Flag akan mencatat jika mode proteksi digunakan, sehingga memungkinkan menggunakan mode real pada saat mode proteksi digunakan.
Tabel 2 Susunan flag tambahan yang dapat digunakan pada mikroprosesor 80286 dan 80386
3
Penamaan flag ini digunakan oleh Microsoft, sedangkan Intel menambahkannya dengan akhiran F pada tiap susunan. * Terdapat pada mikroprosesor 80286 ke atas ** Terdapat pada mikroprosesor 80386 ke atas Percobaan I - Sistem Kerja Mikroprosesor
13
Tugas 1. Perhatikan jalannya program per-instruksi, seluruh isi register sebelum dan sesudah instruksi dilaksanakan, dan isi memori bila instruksi melakukan hubungan dengan memori. 2. Pahami dan amati proses pemanggilan fungsi / prosedur di dalam program, dan perhatikan kondisi sebelum dan sesudah fungsi / prosedur dilaksanakan. 4. Analisa dan simpulkan seluruh percobaan ini.
Percobaan I - Sistem Kerja Mikroprosesor
14
1
PEMROGRAMAN BAHASA TINGKAT RENDAH
Percobaan I Tujuan Percobaan 1. Mempelajari instruksi – instruksi dasar pada pemograman bahasa tingkat rendah. 2. Memahami penerapan algoritma / flow chart pada bahasa tingkat rendah. 3. Membuat
dan
menganalisa
program
sederhana
maupun
kompleks
dengan
menggunakan bahasa tingkat rendah.
Teori Dasar Instruksi – instruksi dalam bahasa mesin dilambangkan dengan pola 1 dan 0. Tetapi bila dalam menulis suatu program menggunakan pola – pola ini tentu akan menyulitkan bagi penggunanya. Untuk memudahkan maka digunakan simbol – simbol nama untuk mewakili pola 1 dan 0 tersebut. Simbol nama ini disebut dengan mnemonic. Sedangkan kumpulan dari mnemonic ini dan aturan – aturannya yang membentuk suatu bahasa pemrograman, sering disebut dengan pemrograman tingkat rendah atau Assembly. Program yang ditulis dalam bahasa tingkat rendah dapat langsung diterjemahkan ke bahasa mesin melalui suatu program khusus yang disebut dengan Assembler. Format umum penulisan tiap baris pada pemrograman tingkat rendah adalah sebagai berikut : [label :]
Mnemonic [operand1] [,operand2]
[;comment]
Pada bagian mnemonic ada assembler command yang tidak akan di eksekusi oleh mikroprosesor, yang disebut Assembler Directives. Assembler directives hanya merupakan instruksi bagi program tingkat rendah. Contohnya yang sering digunakan ialah ORG, EQU, END, DB, DW, DS. Jenis – jenis instruksi dasar pada bahasa pemrograman tingkat rendah : Instruksi Pengalamatan dan Pemindahan Data Direct Adressing Direct
addressing adalah suatu pengalamatan data, di mana data tersebut
terdapat di dalam alamat yang terdapat dalam instruksi. Contohnya instruksi ADD 20, menyebabkan CPU untuk menambahkan isi dari Akumulator dengan data di dalam address 20 ( [A] = [A] + [20] ). Perhatikan bahwa alamat 20 tidak
Percobaan I - Sistem Kerja Mikroprosesor
15
harus berisi 20 juga. Direct addressing dapat menjangkau alamat yang ada di memori pada setiap saat. Indirect Addressing Memori Program ADD 20
… Memori Data 19 20 21
Akumulator +
5 7 3
5
Gambar 1 Ilustrasi penggunaan direct addressing. Memori Program ADD @20
… Memori Data 6 7 8 .. 19 20 21
Akumulator +
15 75 3814 … 5 7 3
5
Gambar 2 Ilustrasi penggunaan indirect addressing. Indirect Adressing adalah suatu pengalamatan data, di mana data yang diinginkan ada di dalam alamat yang terdapat dalam isi dari alamat yang terdapat pada instruksi. Contohnya instruksi ADD @20, menyebabkan CPU untuk menambahkan isi akumulator dengan isi dari alamat yang terdapat di alamat 20 ( [A] = [A] + [[20]] ). Indirect addressing dapat menjangkau alamat yang lebih luas dari pada direct addressing.
Immediate Addressing Immediate addressing adalah suatu pengalamatan data, di mana data yang diinginkan terdapat pada instruksi. Contohnya ADD #20, menyebabkan CPU untuk menambahkan isi akumulator dengan 20 ( [A] = [A] + 20 ). Pengalamatan jenis ini bersifat statis. Memori Program ADD @20
…
Akumulator +
5
Gambar 3 Ilustrasi penggunaan immediate addressing.
Indexed Addressing Indexed addressing adalah suatu pengalamatan data, di mana data yang diinginkan ada di dalam alamat yang merupakan jumlah dari Base Address yang terdapat pada instruksi dengan isi dari Index Register yang merupakan index-nya. Contohnya LOAD 20,X ( X adalah Index Register; misal [X] = 5 ), akan menyebabkan CPU untuk menyalin ke akumulator data dari alamat 25, yang merupakan hasil dari penjumlahan 20 dengan isi dari Index Register. ( [A] = [20 + [X]] ). Pengalamatan jenis ini sangat berguna untuk menangani sekumpulan data / array.
Percobaan I - Sistem Kerja Mikroprosesor
16
Memori Program
Index Register 3
LOAD 20,X
… Akumulator +
Memori Data 22 23 24
5
4 9 16
Gambar 4 Ilustrasi penggunaan indexed addressing.
Stack Operation
Stack operation adalah suatu penyalinan data antara stack dengan register. Contohnya perintah PUSH menyalin data dari register ke dalam stack. Stack adalah LIFO memori (Last – In First – Out). Pada stack, kita hanya dapat menambahkan data pada tumpukan yang paling atas dan mengambil data dari tumpukan yang teratas. Sehingga data yang terakhir dimasukkan akan dikeluarkan pertama kali 4. Instruksi Manipulasi Data Pada umumnya instruksi manipulasi data merubah isi dari status flag 5. Beberapa flag yang sering digunakan adalah carry, zero, parity, sign dan auxiliary carry. Carry flag
berguna
untuk
menunjukkan
apakah
suatu
operasi
penjumlahan
/
pengurangan menghasilkan carry / borrow. Zero flag untuk menunjukkan apakah hasil dari suatu operasi nol atau bukan. Parity flag menunjukkan banyaknya bit 1 dari hasil operasi ganjil atau genap. Sign flag untuk menunjukkan apakah MSB dari hasil operasi bernilai 1 atau bukan. Auxiliary carry flag menunjukkan apakah ada carry out yang dihasilkan dari bit ke-3.
4 5
Lihat percobaan II Lihat percobaan II dan percobaan III
Percobaan I - Sistem Kerja Mikroprosesor
17
Instruksi Aritmatika Instruksi
aritmatika berguna untuk memanipulasi data secara aritmatika.
Instruksi yang termasuk dalam jenis ini adalah instruksi penjumlahan, pengurangan. A=A+M
ADD ADD dengan CARRY
A = A + M + CARRY A=A–M
SUBTRACT
A=A–M M=M+1
SUBTRACT dengan CARRY
INCREMENT
M=M–1 A=AxM A=A/M
DECREMENT MULTIPLY DIVIDE
Tabel 3 Operasi Aritmatika
Instruksi Logika Instruksi yang termasuk dalam jenis ini antara lain adalah instruksi AND, OR, XRA dan complemen. A=A M A=A+M
AND OR EXCLUSIVE OR
A=A
COMPLEMENT
M=
M
M
Tabel 4 Operasi Logika
Shift Operations Berguna untuk menggeser data yang ada (baik ke kiri maupun ke kanan) dan meng-clear-kan posisi yang kosong. Carry
Data
C
b7
b6
b5
b4
b3
b2
b1
b0
Data asli
b7
b6
b5
b4
b3
b2
b1
b0
0
Logical Shift Left
b0
0
b7
b6
b5
b4
b3
b2
b1
Logical Shift Right
b6
b7
b5
b4
b3
b2
b1
b0
0
Arithmetic Shift Left
b0
b7
b0
b6
b5
b4
b3
b2
b1
Arithmetic Shift Right
b7
b6
b5
b4
b3
b2
b1
b0
b7
Rotate Left
b0
b0
b7
b6
b5
b4
b3
b2
b1
Rotate Right
Gambar 5 Intruksi Shift Percobaan I - Sistem Kerja Mikroprosesor
18
Instruksi Perbandingan Instruksi perbandingan memungkinkan kita untuk membandingkan atau memeriksa suatu data tanpa mengubah isi data itu. Instruksi ini hanya mengubah status flag dari data tersebut. COMPARE BIT TEST
Operasi A – M Operasi A
M
TEST
Operasi M – 0
SCAN
Melihat sebuah pola di dalam string
Tabel 5 Operasi Pembanding
Instruksi Spesial Ada instruksi – instruksi spesial yang ada di bahasa pemrograman tingkat rendah seperti decimal aritmatic dan keyboard scans untuk aplikasi kalkulator, floating point conversion untuk aplikasi matematika ataupun parity generation dan checker untuk aplikasi data processing. Komputer yang tidak mempunyai instruksi special membutuhkan suatu set kumpulan – kumpulan instruksi untuk melaksanakan tugas yang sama seperti yang dilakukan oleh instruksi special tersebut.
Instruksi Manipulasi Program Instruksi ini berguna untuk memindahkan program control dari suatu memori ke tempat yang lain. Instruksi ini mengubah isi program counter sehingga instruksi yang dilaksanakan keluar dari urutan instruksi normal yang ada. Program Counter adalah suatu register yang menunjukkan alamat dari lokasi memori yang berisi instruksi berikutnya. Instruksi Jump Instruksi JUMP ada dua jenis yaitu instruksi unconditional jump dan conditional jump. Unconditional Jump Pada instruksi ini program langsung mengeksekusi perintah yang ada tanpa memeriksa terlebih dahulu kondisi dari status flag yang ada. Contoh : perintah JUMP 100 akan menempatkan 100 di program counter dan CPU akan mengeksekusi perintah selanjutnya dari alamat tersebut. Conditional Jump Sebelum melaksanakan perintah yang ada, program akan memeriksa terlebih dahulu kondisi dari status flag yang ada , bila kondisi status flag yang ada sesuai dengan perintah, maka perintah akan dilaksanakan. Bila tidak CPU akan melanjutkan urutan instruksi normal yang ada. Instruksi Subrutin Instruksi terdiri dari instruksi CALL dan instruksi RET. Bila instruksi CALL dilaksanakan maka CPU akan meletakkan isi program counter ke dalam stack dan akan melompat ke alamat pada perintah CALL tersebut atau disebut juga
Percobaan I - Sistem Kerja Mikroprosesor
19
menjalankan subrutin. Instruksi CALL sama seperti instruksi JUMP ada yang kondisional ada yang tidak (lihat lampiran A). Untuk keluar dari subrutin dan kembali ke program yang memanggil subrutin tersebut, terdapat instruksi RET. Instruksi ini akan mengambil kembali isi program counter yang diletakkan di stack, sehingga program kembali ke posisi sebelum menjalankan subrutin. Instruksi RST adalah instruksi CALL 1-word yang menyebabkan CPU untuk melaksanakan rutin interupt atau trap 6. Instruksi Halt dan No Operations Instruksi Halt akan menyebabkan CPU tidak melakukan operasi apapun, dan hanya dapat di hilangkan oleh sinyal interupt ataupun sinyal reset. Instruksi No Operations akan menyebabkan CPU menambahkan isi dari program counter tanpa melaksanakan operasi apa-apa lagi.
Tugas 1. Amati dan pahami format penulisan setiap instruksi dan kegunaan dari setiap instruksi yang digunakan. 2. Pahami maksud setiap program yang diuji coba pada percobaan ini dan amati langkah – langkah yang dilaksanakan setiap program sehingga mencapai suatu sasaran yang diinginkan. 5. Analisa dan simpulkan seluruh percobaan ini.
6
Lihat percobaan III
Percobaan I - Sistem Kerja Mikroprosesor
20