Selasa, 21 Desember 2010

Bahasa Assembly

BAHASA ASSEMBLY

Instruksi mesin dinyatakan dengan pola 0 dan l. Pola semacam itu sangat sulit untuk dijelaskan pada saat membahas atau menyiapkan program. Oleh karena itu, kita menggunakan nama simbolik untuk menyatakan pola tersebut. Sejauh ini kita telah menggunakan kata-kata biasa seperti Move, Add, Increment, dan Branch, untuk instruksi operasi yang menyatakan pola kode biner yang sesuai. Pada saat menulis program untuk komputer tertentu, katakata tersebut biasanya diganti dengan akronim yang disebut mnemonic, seperti MOV, ADD, INC, dan BR Serupa dengan kita menggunakan notasi R3 untuk mengacu pada register 3, dan LOC untuk mengacu pada lokasi memori. Set lengkap nama simbolik semacam dan aturan penggunaannya

membentuk bahasa pemrograman, yang biasanya disebut sebagai bahasa assembly. Set aturan untuk menggunakan mnemonic dalam spesifikasi instruksi dan program lengkap disebut syntax bahasa.

Program yang ditulis dalam bahasa assembly dapat secara otomatis ditranslasikan ke rangkaian instruksi mesin oleh suatu program yang disebut assembler. Program assembler adalah salah satu kumpulan program yang merupakan bagian dari software sistem. Assembler, seperti halnya program yang lain, disimpan sebagai rangkaian instruksi mesin dalam memori komputer. Program user biasanya dimasukkan ke dalam komputer melalui keyboard dan disimpan dalam memori atau disk magnetik. Pada titik ini, program user hanyalah kumpulan baris karakter alfanumerik. Pada saat program assembler dieksekusi, program tersebut membaca program user, menganalisanya, dan kemudian menghasilkan program bahasa mesin yang diinginkan. Bahasa mesin tersebut berisi pola 0 dan 1 yang menetapkan instruksi yang akan dieksekusi oleh komputer tersebut. Program user dalam format teks alfanumerik aslinya disebut source program, dan program bahasa mesin yang diassemble disebut object program.

Bahasa assembly untuk suatu komputer mungkin case sensitive atau mungkin

tidak, sehingga, komputer tersebut bisa membedakan antara huruf kapital dan huruf

kecil atau tidak dapat. Kita akan menggunakan huruf kapital mark menunjukkan semua nama dan label dalam contoh kita untuk dapat meningkatkan kemudahan pembacaan teks. Misalnya, kita akan menuliskan instruksi Move sebagai berikut MOVE R0, SUM MOVE mnemonic menyatakan pola biner, atau OP code, untuk operasi yang dilakukan oleh instruksi tersebut. Assembler mentranslasi rnnemonic ini menjadi OP code biner yang dipahatni komputer. Mnemonic OP code diikuti oleh setidaknya satu karakter spasi kosong. Kemudian informasi yang menyatakan operand ditetapkan. Dalam contoh kita, source operand berada dalam register R0. Informasi ini diikuti oleh spesifikasi destination operand, dipisah dari source operand dengan koma, tanpa jeda kosong.

Destination operand berada dalam lokasi memori yang alamat binernya dinyatakan dengan nama SUM. Karena terdapat beberapa mode pengalamatan yang dapat digunakan untuk menetapkan lokasi operand, maka bahasa assembly barns mengindikasikan mode mana yang digunakan. Misalnya, nilai numerik atau nama yang digunakannya, seperti SUM pada instruksi sebelumnya, dapat digunakan untuk menunjukkan mode Absolute. Sehingga instruksi ADD #5, R3 menambahkan bilangan 5 ke isi register R3 dan meletakkan hasilnya kembali ke register R3. tanda sharp bukanlah cara satu satunya untuk menunjukkan mode pengalamatan Immediate. Dalam beberapa bahasa assembly, mode pengalamatan yang dimaksud dinyatakan dalam mnemonic OPcode.

Dalam hal ini, suatu instruksi memiliki mnonemonic OPcode yang berbeda untuk mode peugalamatan yang berbeda. Misalnya, iustruksi Add sebelumnya dapat ditulis sebagai berikut ADDI 5, R3 Akhiran I dalam mnemonic ADDI menyatakan bahwa source operand dinyatakan dalam mode pengalamatan Immediate. Pengalamatan Indirect biasanya dinyatakan dengan meletakkan tanda kurung di sekitar nama atau simbol yang menunjukkan pointer ke operand. Misalnya, jika nomor 5 ditempatkan dalam lokasi memori yang alamatnya disimpan dalam register R2, maka aksi yang diinginkan dapat ditetapkan sebagai berikut MOVE #5, (R2) atau mungkin MOVE 5, (R2)

OPERASI ARITMATIKA

8.1. OPERASI PERNAMBAHAN

8.1.1. ADD

Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC serta INC. Perintah ADD digunakan dengan syntax :

ADD Tujuan,Asal

Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi Tujuan:=Tujuan + Asal. Sebagai contohnya :

MOV AH,15h ; AH:=15h

MOV AL,4 ; AL:=4

ADD AH,AL ; AH:=AH+AL, jadi AH=19h

Perlu anda perhatikan bahwa pada perintah ADD ini antara Tujuan dan Asal harus mempunyai daya tampung yang sama, misalnya register AH(8 bit) dan AL(8bit), AX(16 bit) dan BX(16 bit). Mungkin ada yang bertanya-tanya, apa yang akan terjadi bila Tujuan tempat hasil penjumlahan disimpan tidak mencukupi seperti pertambahan 1234h dengan F221h.

1234 h Biner --> 0001 0010 0011 0100

F221 h Biner --> 1111 0010 0010 0001

---------- + --------------------- +

10455 h 1 0000 0100 0101 0101

Pada pertambahan diatas dapat dilihat bahwa pertambahan bilangan 1234 dengan F221 akan menghasilkan nilai 10455. Supaya lebih jelas dapat anda lihat pada pertambahan binernya dihasilkan bit ke 17, padahal register terdiri atas 16 bit saja. Operasi pertambahan yang demikian akan menjadikan carry flag menjadi satu

8.2. OPERASI PENGURANGAN

8.2.1. SUB

Untuk Operasi pengurangan dapat digunakan perintah SUB dengan syntax:

SUB Tujuan,Asal

Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. Hasil yang didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi

Tujuan:=Tujuan-Asal.

Contoh :

MOV AX,15 ; AX:=15

MOV BX,12 ; BX:=12

SUB AX,BX ; AX:=15-12=3

SUB AX,AX ; AX=0

Untuk menolkan suatu register bisa anda kurangkan dengan dirinya sendiri seperti SUB AX,AX.

8.2.2. SBB

Seperti pada operasi penambahan, maka pada operasi pengurangan dengan bilangan yang besar(lebih dari 16 bit), bisa anda gunakan perintah SUB disertai dengan SBB(Substract With Carry). Perintah SBB digunakan dengan syntax:

SBB Tujuan,Asal

Perintah SBB akan mengurangkan nilai Tujuan dengan Asal dengan cara yang sama seperti perintah SUB, kemudian hasil yang didapat dikurangi lagi dengan Carry Flag(Tujuan:=Tujuan-Asal-CF).

OPERASI PERKALIAN

Untuk perkalian bisa digunakan perintah MUL dengan syntax:

MUL Sumber

Sumber disini dapat berupa suatu register 8 bit(Mis:BL,BH,..), register 16 bit(Mis: BX,DX,..) atau suatu varibel. Ada 2 kemungkinan yang akan terjadi pada perintah MUL ini sesuai dengan jenis perkalian 8 bit atau 16 bit. Bila Sumber merupakan 8 bit seperti MUL BH maka komputer akan mengambil nilai yang terdapat pada BH dan nilai pada AL untuk dikalikan. Hasil yang didapat akan selalu disimpan pada register AX. Bila sumber merupakan 16 bit

seperti MUL BX maka komputer akan mengambil nilai yang terdapat pada BX dan nilai pada AX untuk dikalikan. Hasil yang didapat akan disimpan pada register DX dan AX(DX:AX), jadi register DX menyimpan Word tingginya dan AX menyimpan Word rendahnya.

PEMBAGIAN

Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi pembagian digunakan perintah DIV dengan syntax:

DIV Sumber

Bila sumber merupakan operand 8 bit seperti DIV BH, maka komputer akan mengambil nilai pada register AX dan membaginya dengan nilai BH. Hasil pembagian 8 bit ini akan disimpan pada register AL dan sisa dari pembagian akan disimpan pada register AH. Bila sumber merupakan operand 16 bit seperti DIV BX, maka komputer akan mengambil nilai yang terdapat pada register DX:AX dan membaginya dengan nilai BX. Hasil pembagian 16 bit ini akan disimpan pada register AX dan sisa dari pembagian akan disimpan pada register DX

OPERASI STRING

Suatu String dalam Bahasa Pascal dapat dioperasikan dengan berbagai macam tujuan. Pascal menyediakan berbagai prosedur standar dan fungsi stanfar untuk opersai string.

Prosedur Standar Fungsi Standar

  1. DELETE 1. CONCAT
  2. INSERT 2. COPY
  3. STR 3. POS
  4. VAL 4. LENGHT

Dalam Operasinya String hanya mempunyai sebuah operator, yaitu operator ‘+’. Bila operator ini digunakan untuk dua buah elemen string, maka akan menjadi penggabungan dua buah string menjadi satu.

Panjang Maksimal suatu string yang diijinkan oleh Pascal adalah 255 karakter

Procedure Standart pada String

1. DELETE (Procedure)

ð menghapus substring dari suatu string, dimulai dari posisi i, sebanyak n à String

BU :

DELETE ( string, i, n)

Cat. Jika jumlah I lebih besar dari jumlah karakter dalam string, maka tidak ada karakter yang terhapus

2 INSERT ð insert (menyisipkan) substring (string1) dalam suatu string (string2), pada posisi I à String

BU :

INSERT (string1, string2, i)

Cat. Apabila hasil penyisipan menjadi String yang panjangnya lebih dari 255 karakter, maka yang dianggap signifikan hanya sampai 255 karakter saja.

3 STR ð mengubah bentuk numerik (x) menjadi nilai string (s)

BU :

STR (x [ : n [ :m ] ], string)

Nilai ‘n’ menunjukkan format panjang dari nilai utuh dan nilai ‘m’ menunjukkan format panjang desimal (nilai dibelakang koma)

4 VAL ð mengubah nilai suatu argumen string menjadi nilai numerik

BU :

Val(Var_string_angka,Var_nilai,kode)

posisi salah

Cat. Var_string_angka berisi data string yang berupa angka

Var_nilai berisi data hasil konversi.

Jika terjadi kesalahan data maka akan posisi kesalahan disimpan pada

Kode

Fungsi Standar pada Operasi String

  1. CONCAT ð menggabungkan dua string secara berurut

BU :

ConCat(S1,S2[,S3,…, Sn])

Cat. Fungsi standar ini mempunyai operasi yang sama dengan operator string ‘+’, yaitu merangkai beberapa nilai string

2 COPY ð mengambil bagian string (substring) dari suatu string, dimulai dari posisi i, sebanyak n à String

BU :

COPY (String, i, n )

3 POS ð Mencari posisi letak dari suatu substring yang ada dalam suatu string à Interger

BU :

POS (subString, string)

Cat : Jika SubString yang dicari terdiri dari beberapa karakter, maka dalam pencariannya akan mencari deretan karakter yang sesuai.

2. LENGTH ð memberikan nilai panjang atau jumlah karakter dari suatu string à integer




C/: VAR s : string[20];

i : word;

BEGIN

. s := ‘program pascal’;

i := LENGTH(s);

WriteLn(‘Panjang string : ’, ‘‘‘‘,s, ‘‘‘‘ ,‘ adalah ‘, I, ‘ karakter’); END.

Panjang string “program pascal” adalah 14 karakter

Kamis, 18 Maret 2010

Processor

Apabila komputer diibaratkan sebagai tubuh manusia, maka mikroprosesor

(prosesor) adalah otaknya. Kecepatan sebuah komputer sebagian besar
bergantung kepada kecepatan prosesor yang terpasang didalamnya. Makin
cepat prosesor yang digunakan oleh sebuah PC, makin kencang PC tersebut
bekerja. Salah satu faktor penentu kecepatan sebuah prosesor adalah jumlah transistor
yang berada didalamnya. Pada komputer tempo doeloe seperti ENIAC, transistor
yang digunakan berupa tabung-tabung hampa udara, sedangkan transistor pada
komputer masa kini berupa rangkaian silikon yang tersusun sebagai sebuah IC
(Integrated Circuit) yang berada dalam keping sebuah prosesor. Menariknya,
keping IC ini cuma berukuran tidak lebih dari satu inchi persegi (kira-kira
seukuran kuku ibu jari), tapi dapat menampung sampai jutaan transistor. Jumlah
transistor dalam keping sebuah prosesor terus meningkat dari waktu ke waktu
seiring dengan kemajuan dalam bidang desain dan fabrikasi prosesor. Dalam
sebuah prosesor 8088 (PC-XT) dengan clock speed 5 MHz yang diperkenalkan
pada 1979, tertampung hingga 29.000 transistor dengan ukuran 3 mikron (sebagai
bayangan, rambut manusia tebalnya 100 mikron). Peningkatan yang signifikan
terjadi pada pada era prosesor 80286 (PC-AT) menjadi 134.000 transistor dengan
ukuran 1,5 mikron yang bekerja pada clock speed 6 MHz. Berikutnya, pada era
prosesor 80486, jumlah transistor meningkat lagi menjadi 1.200.000 dengan ukuran
1 mikron. Prosesor ini bekerja dengan clock speed 25 MHz. Era Pentium yang dimulai
oleh Intel tahun 1993 melipatgandakan jumlah transistor menjadi 3.100.000 dengan
ukuran 0.8 mikron pada 60 MHz. Jumlah ini meningkat gila-gilaan pada generasi
prosesor keluaran Intel selanjutnya hingga pada keluarga prosesor Pentium 4, Intel
berhasil menjejalkan 42.000.000 transistor seukuran 0,18 mikron kedalam keping
chip yang luasnya masih cuma segitu-segitu saja. Jumlah transistor sedemikian
mendongkrak clock speed prosesor tersebut hingga diatas 1.5 GHz. Ada hubungan
antara clock speed sebuah prosesor dengan jumlah instruksi yang bisa ditangani setiap
detiknya (diukur dalam satuan MIPS, Million Instruction Per Second), dimana clock
speed dalam sebuah prosesor berkaitan dengan fungsi pemrosesan dan waktu tunda
(delay) dalam sebuah chip. Demikian pula, ada hubungan antara MIPS dengan jumlah
transistor yang ada dalam keping prosesor. Sebagai contoh, prosesor 8088 dengan clock
speed 5 MHz hanya dapat mengeksekusi 0,33 MIPS (sekitar 1 instruksi setiap 15 clock
cycle). Karena desain multiplier pada tipe prosesor ini, maka dibutuhkan rata-rata 80
cycles hanya untuk melakukan fungsi perkalian (multiplication) pada 16 bit. Dengan lebih
banyak transistor, dimungkinkan lebih banyak kapasitas multiplier dalam satu cycle speed.
Saat ini, prosesor modern telah dapat mengeksekusi rata-rata 2 instruksi setiap clock cycle
pada 64 bit. Lebih banyak transistor juga memungkinkan berkembangnya teknologi
pipelining. Dalam arsitektur pipeline, beberapa instruksi dapat dijalankan dalam waktu yang
bersamaan. Dengan demikian, biarpun setiap instruksi dapat membutuhkan 5 clock cycle,
setiap instruksi dapat dieksekusi secara simultan dalam tingkatan (stage) yang berbeda
sehingga seolah-olah prosesor dapat menyelesaikan satu instruksi setiap satu clock cycle.


Prosesor RISC dan CISC

Faktor selanjutnya yang juga berpengaruh terhadap kinerja sebuah prosesor adalah Instruksi.
Bahkan prosesor yang paling sederhana sekalipun memiliki set instruksinya sendiri. Kumpulan
instruksi tersebut diimplementasikan dalam sebuah pola bit (bit adalah satuan penyimpanan data terkecil yang hanya terdiri dari pola “0” dan “1”) yang masing-masing memiliki arti dan fungsinya sendiri-sendiri saat dijalankan oleh instruction register. Karena komputer diprogram oleh seorang programmer manusia yang tentu punya keterbatasan untuk mengingat pola-pola bit yang panjang, maka pola tersebut direpresentasikan dalam sekumpulan kata kunci (disebut sebagai “word”) yang mudah diingat. Kumpulan instruksi berbentuk kata kunci ini disebut bahasa Assembly (Assembly language). Selanjutnya, sebuah program yang disebut assembler dapat menterjemahkan kata-kata kunci tersebut menjadi pola bit dan menempatkannya dalam memori komputer untuk kemudian dijalankan oleh prosesor.
Berdasarkan set perintah didalamnya, prosesor dapat dibedakan menjadi 2 tipe, yaitu RISC (Reduced Instruction Set Computer) dan CISC (Complex Instruction Set Computer). Prosesor bertipe RISC dirancang untuk memiliki sedikit set instruksi, yaitu hanya instruksi-instruksi dasar yang dibutuhkan saja. Dengan sedikit instruksi, maka prosesor dapat bekerja dalam kecepatan yang lebih tinggi (menangani lebih banyak instruksi dalam satu waktu). Kita sudah belajar bahwa semakin banyak transistor, semakin banyak instruksi yang dapat diolah oleh sebuh prosesor. Sayangnya, makin banyak set instruksi membuat kerja prosesor semakin kompleks yang malahan mengurangi kecepatannya.
Konsep RISC pertama kali digagas oleh John Cocke, peneliti dari IBM di Yorktown, New York pada tahun 1974 saat ia membuktikan bahwa sekitar 20% instruksi pada sebuah prosesor ternyata menangani sekitar 80% dari keseluruhan kerjanya. Komputer pertama yang menggunakan konsep RISC adalah IBM PC/XT pada era 1980-an. Istilah RISC sendiri pertama kali dipopulerkan oleh David Patterson, pengajar pada University of California di Berkely. RISC memberikan banyak keuntungan dalam desain sebuah prosor berkaitan dengan sasaran perancangan sebuah prosesor yaitu: seberapa baik sebuah instruksi dapat dipetakan dalam clock speed tertentu; seberapa “sederhana” sebuah arsitektur sistem yang dibutuhkan; dan berapa banyak yang dapat dikerjakan sebuah prosesor sebelum diserahkan pada bantuan software.
Dewasa ini, konsep RISC digunakan pada proseor untuk komputer-komputer high-end, misalnya keluarga prosesor Sun SPARC buatan Sun Microsystems dan prosesor Power PC yang digunakan oleh workstation IBM RISC System/6000. Berbeda dengan konsep RISC, prosesor dengan konsep CISC memiliki set instruksi yang jauh lebih kompleks. Konsep CISC lebih menekankan untuk menyediakan kapisatas yang dibutuhkan dengan cara yang lebih efisien. Banyaknya instruksi yang tersedia memudahkan para programmer untuk mengembangkan aplikasi untuk plattform CISC. Prosesor yang digunakan dalam komputer pribadi masa kini, Intel Pentium misalnya, umumnya berbasis CISC.
Lantas mana yang lebih baik, CISC atau RISC? Di atas kertas, dari segi kecepatan memang RISC lebih unggul, namun dari segi kinerja sesungguhnya belum tentu! Kenapa? Karena keluarga prosesor RISC hanya menyediakan instruksi untuk fungsi-fungsi dasar, maka untuk fungsi-fungsi lanjutan yang lebih kompleks, akan diambil alih oleh software, sementara untuk fungsi yang sama, prosesor berbasis CISC dapat memanfaatkan instruksinya sendiri. Padahal kita tahu bahwa instruksi berbasis prosesor lebih cepat dijalankan ketimbang instruksi berbasis software, walhasil diperoleh akumulasi kecepatan untuk prosesor CISC.
Arsitektur berbasis CISC juga memungkinkan para perancang prosesor untuk menambahkan set instruksi tambahan untuk keperluan tertentu disamping set instruksi standar yang sudah ada, misalnya set instruksi MMX (Multimedia Extension) yang ditambahkan pada prosesor buatan Intel, dan 3Dnow! pada prosesor keluaran AMD. Karena itulah maka keluarga prosesor CISC lebih banyak digunakan dalam komputer pribadi dimana aplikasinya lebih luas, sementara keluarga prosesor RISC hanya digunakan pada workstation yang biasanya memiliki lingkup aplikasi yang lebih sempit.

Penanganan Instruksi

Berdasarkan instruksi yang masuk, maka prosesor akan melakukan tiga hal dasar. Pertama, Menggunakan ALU (Arithmetic/Logic Unit), sebuah prosesor dapat melakukan operasi matematika sederhana seperti penjumlahan, pengurangan, perkalian, dan pembagian. Prosesor modern mengandung sejumlah besar fungsi-fungsi floating point untuk menjalankan fungsi matematika yang lebih kompleks. Fungsi kedua, prosesor dapat memindahkan data dari satu lokasi memori ke lokasi memori lainnya, dan yang ketiga, prosesor juga dapat mengambil keputusan dan berpindah ke set instruksi yang baru berdasarkan keputusan tersebut.
Sebenarnya dalam hal memproses sebuah instruksi, prosesor melakukan berbagai hal yang sangat rumit dan kompleks, namun semuanya bermuara kepada ketiga aktifitas dasar tersebut. Untuk itu, sebuah prosesor akan terdiri dari bagian-bagian pokok sebagai berikut:
Address bus (selebar 8, 16, 32, atau 64 bit) yang mengirimkan sebuah alamat ke memori Data bus (selebar 8, 16, 32 atau 64 bit) yang dapat mengirimkan data ke memori atau menerima data dari memori Line RD (read) dan WR (write) untuk memberitahukan memori apakah ia perlu mengeset atau mendapatkan sebuah alamat lokasi pada memori Clock line yang mengatur sekuens clock pulse pada prosesor Reset line yang bertugas mereset counter pada program ke nol (atau berapapun) dan memulai eksekusi perintah dari awal. Dari sini kita dapat sedikit memahami spesifikasi sebuah prosesor yang sering ditulis di iklan-iklan itu. Misalnya, prosesor Pentium 4 yang bekerja pada 1,5 GHz menunjukkan bahwa clock line pada prosesor tipe Pentium 4 diset pada kecepatan 1,5 GHz (1536 MHz), sedangkan prosesor tersebut memiliki 32 bit data dan 64 bit address bus.


Industri Mikroprosesor

Industri mikroprosesor saat ini hanya menjadi monopoli segelintir perusahaan kelas dunia, masing-masing dengan spesialisasinya sendiri-sendiri. Khusus untuk pangsa komputer pribadi (PC), masih menjadi rebutan dua perusahaan raksasa, Intel dan AMD (Advanced Micro Devices). Pernah tercatat pemain lain dalam industri ini seperti Cyrix dan IBM, namun pangsanya kurang signifikan.
Intel masih mengembangkan aneka varian dari prosesor Pentium, termasuk generasi terbarunya, Pentium 4 sementara AMD masih terus mengembangkan produk prosesor Athlon dan Duron. Secara teknis, prosesor buatan kedua perusahaan ini cukup kompatibel dengan kebanyakan perangkat lunak masa kini, jadi bagi user yang ingin memilih untuk menggunakan satu diantara keduanya, akan lebih mempertimbangkan faktor harga dan performanya.
Sementara itu, sebagai alternatif ada PowerPC yang dikembangkan oleh IBM, dan processor G4 untuk Apple Macintosh, sedangkan untuk pengguna kelas high-end (untuk mainframe, misalnya) bisa memilih keluarga UltraSPARC dari SUN Microsystems atau keluarga AS/400 dari IBM.