C P U (arkom)

Komponen Utama CPU

CPU merupakan komponen terpenting dari sistem komputer. CPU adalah komponen

pengolah data berdasarkan instruksi – instruksi yang diberikan kepadanya.

Dalam mewujudkan fungsi dan tugasnya, CPU tersusun atas beberapa komponen sebagai bagian dari struktur CPU, seperti terlihat pada gambar 3.1 dan struktur detail internal CPU terlihat pada gamber 3.2. CPU tersusun atas beberapa komponen, yaitu :

a.       Arithmetic and Logic Unit (ALU), bertugas membentuk fungsi – fungsi pengolahan data komputer. ALU sering disebut mesin bahasa (machine language) karena bagian ini mengerjakan instruksi – instruksi bahasa mesin yang diberikan padanya. Seperti istilahnya, ALU terdiri dari dua bagian, yaitu unit arithmetika dan unit logika boolean, yang masing – masing memiliki spesifikasi tugas tersendiri.

b.      Control Unit, bertugas mengontrol operasi CPU dan secara keselurahan mengontrol komputer sehingga terjadi sinkronisasi kerja antar komponen dalam menjalankan fungsi – fungsi operasinya. Termasuk dalam tanggung jawab unit kontrol adalah mengambil instruksi – instruksi dari memori utama dan menentukan jenis instruksi tersebut.

c.       Registers, adalah media penyimpan internal CPU yang digunakan saat proses pengolahan data. Memori ini bersifat sementara, biasanya digunakan untuk menyimpan data saat diolah ataupun data untuk pengolahan selanjutnya.

d.      CPU Interconnections, adalah sistem koneksi dan bus yang menghubungkan komponen internal CPU, yaitu ALU, unit kontrol dan register – register dan juga dengan bus – bus eksternal CPU yang menghubungkan dengan sistem lainnya, seperti memori utama, piranti masukan/keluaran

Gambar Struktur Internal CPU


Fungsi CPU

Fungsi CPU adalah penjalankan program – program yang disimpan dalam memori utama dengan cara mengambil instruksi – instruksi, menguji instruksi tersebut dan mengeksekusinya satu persatu sesuai alur perintah.

Untuk memahami fungsi CPU dan caranya berinteraksi dengan komponen lain, perlu kita tinjau lebih jauh proses eksekusi program. Pandangan paling sederhana proses eksekusi program adalah dengan mengambil pengolahan instruksi yang terdiri dari dua langkah, yaitu : operasi pembacaan instruksi (fetch) dan operasi pelaksanaan instruksi (execute). Siklus instruksi yang terdiri dari siklus fetch dan siklus eksekusi diperlihatkan pada gambar 3.3 berikut.

Siklus Fetch – Eksekusi

Pada setiap siklus instruksi, CPU awalnya akan membaca instruksi dari memori. Terdapat register dalam CPU yang berfungsi mengawasi dan menghitung instruksi selanjutnya, yang disebut Program Counter (PC). PC akan menambah satu hitungannya setiap kali CPU membaca instruksi.

Instruksi – instruksi yang dibaca akan dibuat dalam register instruksi (IR). Instruksi – instruksi ini dalam bentuk kode – kode binner yang dapat diinterpretasikan oleh CPU kemudian dilakukan aksi yang diperlukan. Aksi – aksi ini dikelompokkan menjadi empat katagori, yaitu :

a.       CPU – Memori, perpindahan data dari CPU ke memori dan sebaliknya.

b.      CPU –I/O, perpindahan data dari CPU ke modul I/O dan sebaliknya.

c.       Pengolahan Data, CPU membentuk sejumlah operasi aritmatika dan logika terhadap data.

d.      Kontrol, merupakan instruksi untuk pengontrolan fungsi atau kerja. Misalnya instruksi

pengubahan urusan eksekusi.

Perlu diketahui bahwa siklus eksekusi untuk suatu instruksi dapat melibatkan lebih dari sebuah referensi ke memori. Disamping itu juga, suatu instruksi dapat menentukan suatu operasi I/O. Perhatikan gambar 3.4 yang merupakan detail siklus operasi pada gambar 3.3, yaitu :

  • Instruction Addess Calculation (IAC), yaitu mengkalkulasi atau menentukan alamat instruksi berikutnya yang akan dieksekusi. Biasanya melibatkan penambahan bilangan tetap ke alamat instruksi sebelumnya. Misalnya, bila panjang setiap instruksi 16 bit padahal memori memiliki panjang 8 bit, maka tambahkan 2 ke alamat sebelumnya.
  • Instruction Fetch (IF), yaitu membaca atau pengambil instruksi dari lokasi memorinya ke CPU.
  • Instruction Operation Decoding (IOD), yaitu menganalisa instruksi untuk menentukan jenis

operasi yang akan dibentuk dan operand yang akan digunakan.

  • Operand Address Calculation (OAC), yaitu menentukan alamat operand, hal ini dilakukan apabila melibatkan referensi operand pada memori.
  • Operand Fetch (OF), adalah mengambil operand dari memori atau dari modul I/O.
  • Data Operation (DO), yaitu membentuk operasi yang diperintahkan dalam instruksi.
  • Operand store (OS), yaitu menyimpan hasil eksekusi ke dalam memori.

Fungsi Interrupt

Fungsi interupsi adalah mekanisme penghentian atau pengalihan pengolahan instruksi dalam CPU kepada routine interupsi. Hampir semua modul (memori dan I/O) memiliki mekanisme yang dapat menginterupsi kerja CPU.

Tujuan interupsi secara umum untuk menejemen pengeksekusian routine instruksi agar efektif dan efisien antar CPU dan modul – modul I/O maupun memori. Setiap komponen komputer dapat menjalankan tugasnya secara bersamaan, tetapi kendali terletak pada CPU disamping itu kecepatan eksekusi masing – masing modul berbeda sehingga dengan adanya fungsi interupsi ini dapat sebagai sinkronisasi kerja antar modul. Macam – macam kelas sinyal interupsi :

  • Program, yaitu interupsi yang dibangkitkan dengan beberapa kondisi yang terjadi pada hasil eksekusi program. Contohnya: arimatika overflow, pembagian nol, oparasi ilegal.
  • Timer, adalah interupsi yang dibangkitkan pewaktuan dalam prosesor. Sinyal ini memungkinkan sistem operasi menjalankan fungsi tertentu secara reguler.
  • I/ O, sinyal interupsi yang dibangkitkan oleh modul I/O sehubungan pemberitahuan kondisi error dan penyelesaian suatu operasi.
  • Hardware failure, adalah interupsi yang dibangkitkan oleh kegagalan daya atau kesalahan paritas memori.

Dengan adanya mekanisme interupsi, prosesor dapat digunakan untuk mengeksekusi instruksi – instruksi lain. Saat suatu modul telah selesai menjalankan tugasnya dan siap menerima tugas berikutnya maka modul ini akan mengirimkan permintaan interupsi ke prosesor. Kemudian prosesor akan menghentikan eksekusi yang dijalankannya untuk menghandel routine interupsi. Setelah program interupsi selesai maka prosesor akan melanjutkan eksekusi programnya kembali. Saat sinyal interupsi diterima prosesor ada dua kemungkinan tindakan, yaitu interupsi diterima/ditangguhkan dan interupsi ditolak. Apabila interupsi ditangguhkan, prosesor akan melakukan hal – hal dibawah ini :

1. Prosesor menangguhkan eksekusi program yang dijalankan dan menyimpan konteksnya. Tindakan ini adalah menyimpan alamat instruksi berikutnya yang akan dieksekusi dan data lain yang relevan.

2. Prosesor menyetel program counter (PC) ke alamat awal routine interrupt handler.

Untuk sistem operasi yang kompleks sangat dimungkinkan adanya interupsi ganda (multiple interrupt). Misalnya suatu komputer akan menerima permintaan interupsi saat proses pencetakan dengan printer selesai, disamping itu dimungkinkan dari saluran komunikasi akan mengirimkan permintaan interupsi setiap kali data tiba. Dalam hal ini prosesor harus menangani interupsi ganda.

Dapat diambil dua buah pendekatan untuk menangani interupsi ganda ini. Pertama adalah menolak atau tidak mengizinkan interupsi lain saat suatu interupsi ditangani prosesor. Kemudian setelah prosesor selesai menangani suatu interupsi maka interupsi lain baru di tangani. Pendekatan ini disebut pengolahan interupsi berurutan / sekuensial. Pendekatan ini cukup baik dan sederhana karena interupsi ditangani dalam ututan yang cukup ketat. Kelemahan pendekatan ini adalah metode ini tidak memperhitungkan prioritas interupsi. Pendekatan ini diperlihatkan pada gambar 3.6a.

Pendekatan kedua adalah dengan mendefinisikan prioritas bagi interupsi dani nt errupt

handler mengizinkan interupsi berprioritas lebih tinggi ditangani terlebih dahulu. Pedekatan ini

disebut pengolahan interupsi bersarang.

Sebagai contoh untuk mendekatan bersarang, misalnya suatu sistem memiliki tiga perangkat I/O: printer, disk, dan saluran komunikasi, masing – masing prioritasnya 2, 4 dan 5. Pada awal sistem melakukan pencetakan dengan printer, saat itu terdapat pengiriman data pada saluran komunikasi sehingga modul komunikasi meminta interupsi. Proses selanjutnya adalah pengalihan eksekusi interupsi mudul komunikasi, sedangkan interupsi printer ditangguhkan. Saat pengeksekusian modul komunikasi terjadi interupsi disk, namun karena prioritasnya lebih rendah maka interupsi disk ditangguhkan. Setelah interupsi modul komunikasi selesai akan dilanjutkan interupsi yang memiliki prioritas lebih tinggi, yaitu disk. Bila interupsi disk selesai dilanjutkan eksekusi interupsi printer. Selanjutnya dilanjutkan eksekusi program utama.

Elemen-elemen isntruksi mesin

Elemen instruksi mesin terdiri dari :

  • Operation code : memspesifikasikan operasi yang akan dilakukan
  • Source Operand Reference : operasi dapat mencakup satu atau lebih operand sumber
  • Result Reference : operasi dapat membuat input bagi operasi
  • Next instruction reference : elemen ini memberitahukan CPU posisi instruksi berikutnya yang harus diambil setelah eksekusi instruksi

REPRESENTAI INSTRUKSI

Instruksi komputer dipresentasikan oleh sekumpulan bit. Instruksi dibagi ke dalam beberapa field. Field diisi oleh elemen instruksi yang membawa informasi bagi CPU. Layout instruksi dikenal dengan layout instruksi. Format instruksi dapat digambarkan sebagai berikut ini:

  • Kode operasi direpresentasikan dengan singkatan-singkatan yang disebut dengan mnemonic.
  • Mnemonic mengidentifikasikan suatu operasi bagi CPU
  • Contoh mnemonic adalah ADD, DIV, SUB , LOAD

Contoh representasi mnemonic

ADD X,Y artinya tambahkan nilai pada lokasi Y ke isi register X dan simpan hasilnya di X. Kumpulan set insturksi dapat digolongkan menurut jenisnya yaitu  :

  • Pengolahan data (data processing)

Meliputi opeerasi aritamatika dan logika

  • Perpindahan data (movend data)

Berisi instruksi perpindahan data antar register maupun modul I/O. untuk dapat dioleh oleh CPU makan ada instruksi yang bertugas memindah data operand.

  • Penyimpanan Data (data storage)

Berisi instruksi penyimpanan data ke memory. Instruksi ini sangat penting untuk komputasi, karena untuk melakukan proses selanjutnya diperlukan penyimpanan data, minimal ditampilkan dalam monitor

  • Kontrol aliran program (program flow control)

Berisi instruksi pengontrolan operasi dan percabangan instruksi ini berguna untuk pengontrolan status operasi percabangan lainnya.

Bahasa Mesin

Setiap jenis CPU (Central Processing Unit) atau dikenal juga sebagai mikroprosesor, hanya dapat mengerti atau menterjemahkan setiap bahasa mesin yang dimilikinya. Artinya setiap CPU telah dilengkapi perangkat intruksi (instructions set) yang dimilikinya. Menyusun program dengan perangkat instruksi pada CPU tertentu disebut dengan program bahasa mesin (machine language). Instruksi-instruksi dalam bahasa mesin adalah bilangan-bilangan yang merupakan kode mesin disimpan dalam memori. Setiap instruksi akan memiliki kode numerik yang unik disebut sebagai kode operasi (operation code) atau disingkat sebagai opcode. Instruksi pada Prosesor 80×86 memiliki variasi ukuran. Opcode selalu berada pada awal setiap instruksi. Beberapa instruksi juga diikuti dengan data (seperti konstanta atau alamat) digunakan oleh instruksi.

Bahasa mesin sangat sulit diprogram secara langsung.  Menterjemahkan  maksud/arti dari instruksi yang berupa kode numerik bagi manusia sangat membosankan untuk dihapalkan atau dimengerti maksudnya. Sebagai contoh, instruksi katakan untuk menambah isi dari register EAX dan EBX dan hasilnya disimpan kembali dalam register EAX dikodekan oleh kode heksa: 03 CE.

Program bahasa mesin yang merupakan kumpulan kode operasi disimpan dalammemori CPU untuk selanjutnya dieksekusi satu persatu sehingga membentuk program secara utuh.

Bahasa Assembly

Tidak seperti halnya bahasa mesin yang merupakan kumpulan kode operasi yang berupa kode numerik yaitu kode heksa, yang sangat sulit untuk diingat atau dimengerti. Penulisan program bahasa assembly disimpan sebagai teks seperti halnya bahasa pemrograman aras tinggi. Setiap instruksi assembly kenyataannya mewakili satu instruksi bahasa mesin. Sebagai contoh, instruksi penjumlahan yang telah diuraikan sebelumnya akan mewakili bahasa assembly berikut ini:

add     eax, ebx

Instruksi ini akan lebih bisa dimengerti daripada kode mesin. Instruksi add adalah sebuah mnemonic untuk instruksi penjumlahan. Bentuk secara umum dari sebuah instruksi assembly adalah:

mnemonic     operand(s)

Assembler adalah sebuah program yang membaca file teks dari instruksi assembly dan dikonversi menjadi kode mesin. Kompiler adalah program juga melakukan pengkonversian namun untuk bahasa tingkat tinggi. Assembler lebih sederhana daripada kompiler. Setiap perintah bahasa assembly secara langsung mewakili satu instruksi mesin. Perintah bahasa tingkat tinggi lebih komplek dan memerlukan banyak instruksi mesin. Perbedaan penting lainnya antara assembly dan bahasa tingkat tinggi adalah, bahwa setiap perbedaan jenis CPU akan memiliki instruksi mesin tersendiri juga akan memiliki bahasa assembly tersendiri pula. Porting (maksudnya: peng-adaptasi-an) program assembly ke berbagai jenis arsitektur komputer sangatlah sulit jika dibandingkan dengan bahasa pemrograman beraras tinggi (high level language). Dalam pembahasan selanjutnya digunakan Netwide Assembler atau disingkat NASM. NASM tersedia secara gratis di internet. Yang sering digunakan adalah Microsoft’s Assembler (MASM) atau Borland’s Assembler (TASM). Terdapat perbedaan sintak untuk MASM/TASM dan NASM.

Operand sebuah Instruksi

Instruksi bahasa mesin memiliki sejumlah variasi dan jenis operand; akan tetapi, secara umum, setiap instruksi itu sendiri akan memiliki sejumlah operand yang telah ditetapkan (0 sampai 3).

Jenis-jenis operand yang ada adalah sebagai berikut:

Register
Operand ini mengarah secara langsung ke isi dari register-register CPU.

Memori
Operand ini mengarah ke data dari isi memori. Alamat dari data dalam memori dapat berupa konstan yang dikodekan dalam instruksi atau dihitung melalui sebuah nilai dalam register-register. Alamat biasanya offset dari awal sebuah segmen.

Seketika (Immidiate)

Operand ini merupakan nilai yang tetap yang diperlihatkan dalam instruksi itu sendiri, disimpan dalam instruksi itu sendiri (dalam segmen kode), tidak dalam segmen data.

Implikasi (Implied)

Operand ini tidak ditunjukkan secara ekplisit. Sebagai contoh, instruksi menaikkan (increment) adalah menaikkan satu isi dari sebuah register atau memori. Ini salah satu dari implikasi (implied).

Instruksi Dasar

Sebagian besar instruksi dasar adalah instruksi MOV. Instruksi ini memindahkan data dari salah satu lokasi ke lokasi lainnya, seperti operator assignment dalam bahasa pemrograman beraras tinggi.

Terdiri dari dua operand:

mov     dest, src

Data yang dispesifikasikan oleh src disalin ke dest. Satu pembatasan adalah bahwa keduanya tidak diperbolehkan operand memori, artinya tidak dapat memindahkan data dari memori ke memori.

Hal ini ini ke luar ciri-ciri dari assembly. Sedikit banyak terdapat aturan yang harus diikuti tentang bagaimana cara variasi  instruksi digunakan. Operand harus memiliki ukuran yang sama. Nilai  register AX  tidak dapat disimpan dalam register BL. Ukuran dari register AX adalah pasangan register sebesar 32bit, sedangkan BL ukurannya 16bit untuk mikroprosesor 80486.

Sebagai contoh:

mov eax, 3 ; store 3 into EAX register (3 is immediate operand)
mov bx, ax ; store the value of AX into the BX register

Tanda semikolon ‘;’ merupakan tanda awal untuk penulisan komentar.

Instruksi ADD digunakan untuk operasi penjumlahan integer:

add eax, 4 ; eax = eax + 4

add al, ah ; al = al + ah

Instruksi SUB merupakan instruksi pembagian secara integer:

sub bx, 10 ; bx = bx – 10
sub ebx, edi ; ebx = ebx – edi

Instruksi INC dan DEC adalah instruksi penaikan (increment) atau penurunan (decrement) dengan nilai satu. Ini adalah salah satu dari operan secara implisit, kode mesin untuk INC dan DEC adalah kecil ukurannya dibanding dengan instruksi ADD dan SUB.

inc ecx ; ecx++
dec dl ; dl–

Pengarahan (Directive)

Directive merupakan sebuah artifak assembler bukan CPU. Secara umum digunakan untuk menginstruksikan assembler untuk melakukan sesuatu atau menginformasikan tentang sesuatu ke assembler. Directive tidak diubah kedalam kode mesin.

Penggunaan umum dari directive adalah:

  • Mendefinisikan konstanta
  • Mendefinisikan memori untuk penyimpanan data
  • Kelompok memori kedalam segmen
  • Melampirkan kode sumber (source code) secara kondisional (conditionally include)
  • Melampirkan file lainnya

Pelolosan kode NASM melalui sebuah perintah (command) preprosesor (preprocessor) seperti C. Begitu pula, pengarahan preprosesor (directive preprocessor) dimulai dengan % dibandingkan # dalam C.

Pengarahan EQU

Pengarahan EQU dapat digunakan untuk mendefinisikan sebuah simbol. Simbol adalah nama dari konstanta yang dapat digunakan dalam program assembly.

Formatnya adalah:

simbol equ nilai

Nilai dari simbol tidak dapat didefinisikan secara berulang (didefinisikan kembali).

Pengarahan %define

Pengarahan ini adalah sama dengan pengarahan #define dalam C. Ini secara umum digunakan untuk mendefinisikan mkro konstan seperti dalam C.

%define     SIZE 100
mov        eax, SIZE

Kode di atas mendefinisikan sebuah makro dengan nama SIZE sebagai konstanta 100 dan ditunjukkan penggunaannya dalam instruksi. Makro sangat fleksibel daripada simbol dalam dua cara. Makro dapat didefinisikan kembali dan bisa lebih dari sekedar bilangan konstan.

Pengarahan Data

Pengarahan data digunakan dalam segmen data untuk mendefinisikan ruang memori. Terdapat dua cara menyiapkan ruang memori. Cara pertama, hanya mendefinisikan ruang untuk data; cara kedua mendefinisikan ruang dan nilai awal. Metode pertama menggunakan satu dari pengarahan RESX. X diganti dengan huruf sebagai ukuran dari obyek (atau beberapa obyek) yang akan disimpan. Berikut ini ditunjukkan beberapa kemungkinan nilai itu.

UNIT HURUF
byte B
word W
double word D
quad word Q
ten bytes T

Metode kedua (mendefinisikan sebuah nilai awal) menggunakan satu dari pengarahan DX. Huruf X adalah sama dengan pengarahan RESX. Hal ini sangat umum untuk menandai lokasi memori dengan label. Label merupakan salah satu cara mudah untuk mengarahkan lokasi memori dalam kode.

Berikut ini terdapat beberapa contoh:

LABEL INSTRUKSI KOMENTAR
L1 db     0 ; byte dengan label L1 diinisialisasi dengan nilai 0
L2 dw    1000 ; word dengan label L2 ddiinisialisasi dengan nilai 1000
L3 db     110101b ; byte diinisialisasi dengan biner 110101 (53 dalam desimal)
L4 db     12h ; byte diinisialisasi dengan heksa 12 (18 dalam desimal)
L5 db     17o ; byte diinisialisasi dengan oktal 17 (15 dalam desimal)
L6 dd     1A92h ; double word ddiinisialisasi dengan heksa 1A92
L7 resb  1 ; menyiapkan ruang 1 byte tidak diinisialisasi
L8 db     “A” ; byte diinisialisasi oleh kode ASCII untuk A (65)

Tanda “…” dan ‘…’ adalah sama perlakuannya. Konsekwensinya data yang didefinisikan disimpan secara berurutan dalam memori.  Dengan demikian L2 disimpan secara seketika sesuada L1 dalam memori. urutan dari memori dapat didefinisikan juga.

LABEL INSTRUKSI KOMENTAR
L9 db 0, 1, 2, 3 ; mendefinisikan ruang 4 byte dinisialisasi dengan nilai 0, 1, 2, 3
L10 db “w”, “o”, “r”, ’d’, 0 ; mendefinisikan urut-urutan karakter dalam memori yaitu ASCII w, o, r, d dan diakhiri dengan konstanta 0
L11 db ’word’, 0 ; mendefinisikan urut-urutan karakter dalam memori yaitu ASCII word dan diakhir dengan konstanta 0

Untuk urutan yang sangat besar, pengarahan TIMES dalam NASM seringkali digunakan. Pengarahan ini mengulang sejumlah operand spesifik, sebagai contoh:

LABEL INSTRUKSI KOMENTAR
L12 times 100 db 0 ; sama dengan db 0 sebanyak 100 kali
L13 resw 100 ; menyediakan ruang memori untuk 100 word

Ingat bahwa label dapat digunakan untuk mengarahkan ke data dalam kode. Terdapat dua cara bahwa sebuah label dapat digunakan. Jika label akan digunakan, label akan diinterprestasikan sebagai alamat (atau offset) dari data. Jika label diletakkan dalam kurung kotak ([…]), akan diinterprestasikan sebagai data pada alamat yang ditunjukkan oleh label. Dalam bentuk yang lain, salah satu yang harus diingat bahwa sebuah label adalah sebagai pointer data pada alamat tertentu dan kurung kotak direferensikan sebagai pointer seperti halnya araterisk (*) dalam C. (MASM/TASM memiliki perbedaan konvensi). Dalam mode 32bit, pengalamatannya adalah 32bit.

Berikut ini terdapat beberapa contoh:

NO INSTRUKSI KOMENTAR
1 mov al, [L1] ; salin byte memori dengan alamat yang ditunjukkan oleh L1 ke register AL
2 mov eax, L1 ; register EAX = alamat byte ditunjukkan oleh L1
3 mov [L1], ah ; salin AH ke byte memori dengan alamat oleh L1
4 mov eax, [L6] ; salin double word memori dengan alamat oleh L6 ke register EAX
5 add eax, [L6] ; EAX = EAX + double word memori dengan alamat oleh L6
6 add [L6], eax ; double word memori dengan alamat oleh L6 += EAX
7 mov al, [L6] ; salin byte pertama dari double word memori dengan alamat oleh L6 ke AL

Label yang digunakan dalam contoh di atas merupakan label yang diberikan dalam contoh sebelumnya. Baris 7 dari contoh di atas menunjukkan sebuah properti yang penting untuk NASM. Assembler tidak dapat menangkap dari jenis data yang ditunjukkan oleh label tersebut. Ini tergantung pada programmer untuk membuat suatu kepastian bahwa penggunaan sebuah label harus benar. Selanjutnya hal ini secara umum untuk menyimpan alamat dari sebuah data dalam register dan menggunakan register seperti halnya pointer dalam variabel C. Lagi, tidak ada pengecekan yang dilakukan bahwa sebuah pointer digunakan secara benar. Cara ini, assembly akan lebih banyak menghasilkan error daripada C.

Instruksi berikutnya adalah:

mov [L6], 1     ; simpan (store) 1 byte ke memori yang ditunjukkan oleh label L6

Pernyataan tersebut menghasilkan sebuah operasi dengan ukuran yang tidak salah (error), mengapa ?. Sebab assembler tidak mengetahui apa yang akan disimpan (store) sebagai 1 byte, word atau double word. Untuk memperbaiki ini, tambahkan sebuah spesifikasi ukuran:

mov dword [L6], 1     ; simpan (store) 1 byte ke memori yang ditunjukkan oleh label L6

Hal ini akan mengatakan ke assembler untuk menyimpan 1 byte ke double word yang dimulai dengan alamat yang ditunjukkan oleh label L6. Spesifikasi ukuran lainnya adalah:  BYTE, WORD, QWORD and TWORD.

Input and Output

Input dan output merupakan aktifitas yang sangat bergantung dengan sistem. Hal ini merupakan antarmuka denga perangkat keras sistem. Bahasa tingkat tinggi, seperti C, dilengkapi dengan pustaka (library) standar berupa rutin-rutin program yang dapat diperoleh secara sederhana, programming membentuk antarmuka I/O. Bahasa assembly tidak memiliki library standar. C harus secara langsung mengakses perangkat keras (melalui operasi pengijinan dalam mode protect) atau menggunakan rutin beraras rendah yang diperoleh dalam sistem operasi.

Sangat umum rutin assembly di-antarmuka-kan dengan C. Salah satu keuntungannya bahwa kode assembly dapat digunakan sebagai library standar C untuk rutin I/O. Selanjutnya, salah satu yang harus diketahui adalah aturan untuk meloloskan informasi rutin dengan informasi yang digunakan C. Aturan ini sangat komplek untuk dijelaskan disini (akan dijelaskan pada pembahasan berikutnya). Untuk menyederhanakan I/O, digunakan rutin yang siap dipakai untuk menyembunyikan aturan-aturan C yang komplek dan akan diperoleh cara antarmuka yang sangat sederhana.

NAMA RUTIN FUNGSI RUTIN
print_int tampilkan ke layat nilai integer yang disimpan dalam register EAX
print_char tampilkan ke layar karekter dalam bentuk nilai ASCII yang disimpan dalam register AL
print_string tampilkan ke layar berupa string dengan alamat yang disimpan dalam register EAX. String harus berupa Ctype string (diakhiri dengan null).
print_nl tampilkan ke layar karakter baris baru (new line)
read_int baca sebuah nilai integer dari keyboard dan disimpan kedalam register EAX
read_char baca karakter tunggal dari keyboard dan disimpan dalam bentuk kode ASCII kedalam register EAX.

Seluruh rutin menyediakan nilai dari seluruh register, kecuali rutin read. Rutin ini memodifikasi nilai yang ada dalam register EAX. Untuk menggunakan rutin ini, harus menyertakan file rutin dalam program dengan pengarahan preprosesor %include yang akan menginformasikan ke assemble mengenai penggunaan file rutin tersebut.

Berikut ini harus ditambahkan ke program assembly anda sebelum menggunakan rutin:

%include “asm_io.inc”

Untuk menggunakan salah satu rutin print,  terlebih dahulu muati register EAX dengan nilai yang benar dan gunakan instruksi CALL untuk mengakses rutin. Instruksi CALL adalah sama dengan sebuah pemanggilan fungsi dalam bahasa pemrograman beraras tinggi. Selanjutnya akan melompat mengeksekusi ke bagian kode yang lainnya, tetapi akan kembali ke asalnya sesudah rutin selesai dieksekusi.

Arsitektur RISC & CISC

Pengertian RISC

RISC singkatan dari Reduced Instruction Set Computer. Merupakan bagian dari arsitektur mikroprosessor, berbentuk kecil dan berfungsi untuk negeset istruksi dalam komunikasi diantara arsitektur yang lainnya. Arsitektur RISC memiliki beberapa karakteristik diantaranya :

Siklus mesin ditentukan oleh waktu yang digunakan untuk mengambil dua buah operand dari register, melakukan operasi ALU, dan menyimpan hasil operasinya kedalam register, dengan demikian instruksi mesin RISC tidak boleh lebih kompleks dan harus dapat mengeksekusi secepat mikroinstruksi pada mesin-mesin CISC. Dengan menggunakan instruksi sederhana atau instruksi satu siklus hanya dibutuhkan satu mikrokode atau tidak sama sekali, instruksi mesin dapat dihardwired. Instruksi seperti itu akan dieksekusi lebih cepat dibanding yang sejenis pada yang lain karena tidak perlu mengakses penyimapanan kontrol mikroprogram saat eksekusi instruksi berlangsung.

Operasi berbentuk dari register-ke register yang hanya terdiri dari operasi load dan store yang mengakses memori . Fitur rancangan ini menyederhanakan set instruksi sehingga menyederhanakan pula unit control. Keuntungan lainnya memungkinkan optimasi pemakaian register sehingga operand yang sering diakses akan tetap ada di penyimpan berkecepatan tinggi. Penekanan pada operasi register ke register merupakan hal yang unik bagi perancangan RISC.

Penggunaan mode pengalamatan sederhana, hampir sama dengan instruksi menggunakan pengalamatan register,. Beberapa mode tambahan seperti pergeseran dan pe-relatif dapat dimasukkan selain itu banyak mode kompleks dapat disintesis pada perangkat lunak dibanding yang sederhana, selain dapat menyederhanakan sel instruksi dan unit kontrol.

Penggunaan format-format instruksi sederhana, panjang instruksinya tetap dan disesuaikan dengan panjang word. Fitur ini memiliki beberapa kelebihan karena dengan menggunakan field yang tetap pendekodean opcode dan  pengaksesan operand register dapat dilakukan secara bersama-sama.

Ciri-ciri

  • Instruksi berukuran tunggal
  • Ukuran yang umum adalah 4 byte
  • Jumlah pengalamatan data sedikit, biasanya kurang dari 5 buah.
  • Tidak terdapat pengalamatan tak langsung yang mengharuskan melakukan sebuah akses memori agar memperoleh alamat operand lainnya dalam memori.
  • Tidak terdapat operasi yang menggabungkan operasi load/store dengan operasi aritmatika, seperti penambahan ke memori dan penambahan dari memori.
  • Tidak terdapat lebih dari satu operand beralamat memori per instruksi
  • Tidak mendukung perataan sembarang bagi data untuk operasi load/ store.
  • Jumlah maksimum pemakaian memori manajemen bagi suatu alamat data adalah sebuah instruksi .
  • Jumlah bit bagi integer register spesifier sama dengan 5 atau lebih, artinya sedikitnya 32 buah register integer dapat direferensikan sekaligus secara eksplisit.
  • Jumlah bit floating point register spesifier sama dengan 4 atau lebih, artinya sedikitnya 16 register floating point dapat direferensikan sekaligus secara eksplisit.

Pengertian CISC

Complex instruction-set computing atau Complex Instruction-Set Computer (CISC) “Kumpulan instruksi komputasi kompleks”) adalah sebuah arsitektur dari set instruksi dimana setiap instruksi akan menjalankan beberapa operasi tingkat rendah, seperti pengambilan dari memory, operasi aritmetika, dan penyimpanan ke dalam memory, semuanya sekaligus hanya di dalam sebuah instruksi. Karakteristik CISC dapat dikatakan bertolak-belakang dengan RISC.

Karakteristik sarat informasi memberikan keuntungan di mana ukuran program-program yang dihasilkan akan menjadi relatif lebih kecil, dan penggunaan memory akan semakin berkurang. Karena CISC inilah biaya pembuatan komputer pada saat itu (tahun 1960) menjadi jauh lebih hemat

Dimaksudkan untuk meminimumkan jumlah perintah yang diperlukan untuk mengerjakan pekerjaan yang diberikan. (Jumlah perintah sedikit tetapi rumit) Konsep CISC menjadikan mesin mudah untuk diprogram dalam bahasa rakitan.

Ciri-ciri

  • Jumlah instruksi banyak
  • Banyak terdapat perintah bahasa mesin
  • Instruksi lebih kompleks

KELEBIHAN dan KEKURANGAN

Teknologi RISC relatif masih baru oleh karena itu tidak ada perdebatan dalam menggunakan RISC ataupun CISC, karena tekhnologi terus berkembang dan arsitektur berada dalam sebuah spektrum, bukannya berada dalam dua kategori yang jelas maka penilaian yang tegas akan sangat kecil kemungkinan untuk terjadi.

Kelebihan

Berkaitan dengan penyederhanaan kompiler, dimana tugas pembuat kompiler untuk menghasilkan rangkaian instruksi mesin bagi semua pernyataan HLL. Instruksi mesin yang kompleks seringkali sulit digunakan karena kompiler harus menemukan kasus-kasus yang sesuai dengan konsepnya. Pekerjaan mengoptimalkan kode yang dihasilkan untuk meminimalkan ukuran kode, mengurangi hitungan eksekusi instruksi, dan meningkatkan pipelining jauh lebih mudah apabila menggunakan RISC dibanding menggunakan CISC.

Arsitektur RISC yang mendasari PowerPC memiliki kecenderungan lebih menekankan pada referensi register dibanding referensi memori, dan referensi register memerlukan bit yang lebih sedikit sehingga memiliki akses eksekusi instruksi lebih cepat.

Kecenderungan operasi register ke register akan lebih menyederhanakan set instruksi dan menyederhanakan unit kontrol serta pengoptimasian register akan menyebabkan operand-operand yang sering diakses akan tetap berada dipenyimpan berkecepatan tinggi.

Penggunaan mode pengalamatan dan format instruksi yang lebih sederhana.

Kekurangan

Program yang dihasilkan dalam bahasa simbolik akan lebih panjang (instruksinya lebih banyak). Program berukuran lebih besar sehingga membutuhkan memori yang lebih banyak, ini tentunya kurang menghemat sumber daya.

Program yang berukuran lebih besar akan menyebabkan menurunnya kinerja, yaitu instruksi yang lebih banyak artinya akan lebih banyak byte-byte instruksi yang harus diambil.

Pada lingkungan paging akan menyebabkan kemungkinan terjadinya page fault lebih besar.

PENGERTIAN PIPELINE

Pipeline adalah suatu cara yang digunakan untuk melakukan sejumlah kerja secara bersama tetapi dalam tahap yang berbeda yang dialirkan secara kontinou pada unit pemrosesor. Dengan ccara ini, maka unit pemrosesan selalu bekerja.

Teknik pipeline ini dapat diterapkan pada berbagai tingkatan dalam sistemkomputer. Bisa pada level yang tinggi, misalnya program aplikasi, sampai pada tingkat yang rendah, seperti pada instruksi yang dijaankan oleh microprocessor.

Pada microprocessor yang tidak menggunakan pipeline, satu instruksi dilakukan sampai selesai, baru instruksi berikutnya dapat dilaksanakan. Sedangkan dalam microprocessor yang menggunakan teknik pipeline, ketika satu instruksi sedangkan diproses, maka instruksi yang berikutnya juga dapat diproses dalam waktu yang bersamaan. Tetapi, instruksi yang diproses secara bersamaan ini, ada dalam tahap proses yang berbeda. Jadi, ada sejumlah tahapan yang akan dilewati oleh sebuah instruksi.

Dengan penerapan pipeline ini pada microprocessor akan didapatkan peningkatan dalam unjuk kerja microprocessor. Hal ini terjadi karena beberapa instruksi dapat dilakukan secara parallel dalam waktu yang bersamaan. Secara kasarnya diharapkan akan didapatkan peningkatan sebesar K kali dibandingkan dengan microprocessor yang tidak menggunakan pipeline, apabila tahapan yang ada dalam satu kali pemrosesan instruksi adalah K tahap.

Karena beberapa instruksi diproses secara bersamaan ada kemungkinan instruksi tersebut sama-sama memerlukan resource yang sama, sehingga diperlukan adanya pengaturan yang tepat agar proses tetap berjalan dengan benar. Sedangkan ketergantungan terhadap data, bisa muncul, misalnya instruksi yang berurutan memerlukan data dari instruksi yang sebelumnya. Kasus Jump, juga perlu perhatian, karena ketika sebuah instruksi meminta untuk melompat ke suatu lokasi memori tertentu, akan terjadi perubahan program counter, sedangkan instruksi yang sedang berada dalam salah satu tahap proses yang berikutnya mungkin tidak mengharapkan terjadinya perubahan program counter.

Teknik pipeline yang diterapkan pada microprocessor, dapat dikatakan sebuah arsitektur khusus. Ada perbedaan khusus antara model microprocessor yang tidak menggunakan arsitektur pipeline dengan microprocessor yang menerapkan teknik ini.
Pada microprocessor yang tidak menggunakan pipeline, satu instruksi dilakukan sampai selesai, baru instruksi berikutnya dapat dilaksanakan. Sedangkan dalam microprocessoryang menggunakan teknik pipeline, ketika satu instruksi sedangkan diproses, maka instruksi yang berikutnya juga dapat diproses dalam waktu yang bersamaan. Tetapi, instruksi yang diproses secara bersamaan ini, ada dalam tahap proses yang berbeda.

Jadi, ada sejumlah tahapan yang akan dilewati oleh sebuah instruksi.
Misalnya sebuah microprocessor menyelesaikan sebuah instruksi dalam 4 langkah. Ketika instruksi pertama masuk ke langkah 2, maka instruksi berikutnya diambil untuk diproses pada langkah 1 instruksi tersebut. Begitu seterusnya, ketika instruksi pertama masuk ke langkah 3, instruksi kedua masuk ke langkah 2 dan instruksi ketiga masuk ke langkah 1.

Teknik pipeline ini menyebabkan ada sejumlah hal yang harus diperhatikan sehingga ketika diterapkan dapat berjalan dengan baik. Tiga kesulitan yang sering dihadapi ketika menggunakan teknik pipeline ini adalah :

Terjadinya penggunaan resource yang bersamaan, Ketergantungan terhadap data, Pengaturan Jump ke suatu lokasi memori.
Karena beberapa instruksi diproses secara bersamaan ada kemungkinan instruksi tersebut sama-sama memerlukan resource yang sama, sehingga diperlukan adanya pengaturan yang tepat agar proses tetap berjalan dengan benar. Sedangkan ketergantungan terhadap data, bisa muncul, misalnya instruksi yang berurutan memerlukan data dari instruksi yang sebelumnya.

Intruksi pipeline

Tahapan pipeline

ž  Mengambil instruksi dan membuffferkannya

ž  Ketika tahapn kedua bebas tahapan pertama mengirimkan instruksi yang dibufferkan tersebut

ž  Pada saat tahapan kedua sedang mengeksekusi instruksi ,tahapan pertama memanfaatkan siklus memori yang tidak dipakai untuk mengambil dan membuffferkan instruksi berikutnya .

Instuksi pipeline.

Karena untuk setiap tahap pengerjaan instruksi, komponen yang bekerja berbeda, maka dimungkinkan untuk mengisi kekosongan kerja di komponen tersebut. Sebagai contoh :

Instruksi  1: ADD  AX, AX Instruksi 2: ADD EX, CX

Setelah CU menjemput instruksi 1 dari memori (IF), CU akan menerjemahkan instruksi tersebut(ID). Pada menerjemahkan instruksi  1 tersebut, komponen IF tidak bekerja. Adanya teknologi pipeline menyebabkan IF akan menjemput instruksi 2 pada saat ID menerjemahkan instruksi 1. Demikian seterusnya pada saat CU menjalankan instruksi 1 (EX), instruksi 2 diterjemahkan (ID).

Contoh pengerjaan instruksi tanpa pipeline

t = 1 2 3 4 5 6 7 8 9 10
ADD AX,AX IF DE IF DE EX
ADD BX,CX IF DE IF DE EX

Disini instruksi baru akan dijemput jika instruksi sebelumnya telah selesai dilaksanakan.

Contoh pengerjaan instruksi dengan pipeline

t = 1 2 3 4 5 6 7 8 9 10
ADD AX,AX IF DE IF DE EX
ADD BX,CX IF DE IF DE EX
ADD DX,DX IF DE IF DE EX

Disini instruksi baru akan dijemput setelah tahap IF menganggur (t2).

Dengan adanya pipeline dua instruksi selesai dilaksanakan padadetik 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, 14 dari 15T menjadi hanya 7T.

Untuk kasus pipeline sendiri, 2 instruksi dapat dikerjakan dalam 6T(CPI = 3) dan instruksi dapat dikerjakan dalam 7T (CPT = 2,3) dan untuk 4 instruksi dapat dikerjakan dalam  8T (CPI =2). Ini berarti utnuk 100 instruksi akan dapat dikerjakan dalam 104T (CPI = 1,04). Pada kondisi  ideal CPI akan harga 1. Selain arsitektur pipeline juga ada arsitektur superpipeline dan arsitektur superscalar

Tinggalkan komentar

Belum ada komentar.

Comments RSS TrackBack Identifier URI

Tinggalkan komentar