Monday, November 9, 2009

bahasa assembly

BAHASA ASSEMBLY

PENGERTIAN

Bahasa rakitan (bahasa Inggris: assembly language) adalah bahasa pemrograman komputer tingkat rendah. Bahasa rakitan merupakan notasi untuk bahasa mesin yang dapat dibaca oleh manusia dan berbeda-beda tergantung dari arsitektur komputer yang digunakan. Bahasa mesin adalah pola bit-bit (serangkaian nomor-nomor biner) tertentu yang merupakan kode operasi mesin. Bahasa mesin dibuat lebih mudah dibaca dan ditulis dengan cara mengganti pola bit-bit menjadi julukan-julukan yang disebut mnemonics.

Berbeda dengan bahasa pemrograman tingkat tinggi, bahasa rakitan biasanya memiliki hubungan 1-1 dengan instruksi bahasa mesin. Misalnya, tiap julukan (mnemonic) yang ditulis di program dengan bahasa rakitan akan diterjemahkan menjadi tepat satu kode operasi yang dapat dimengerti langsung oleh komputer. Pada bahasa tingkat tinggi, satu perintah dapat diterjemahkan menjadi beberapa kode operasi dalam bahasa mesin. Proses pengubahan bahasa rakitan ke bahasa mesin dilakukan oleh assembler, dan proses balikannya dilakukan oleh disassembler. Setiap arsitektur komputer memiliki bahasa mesin yang berbeda-beda sehingga bahasa rakitannya pun berbeda-beda.

Berikut merupakan contoh bahasa rakitan:

mov al, 0x61

yang berarti pindahkan (mov = move) nilai heksadesimal 61 (= 97 dalam desimal) ke register prosesor bernama "al". Adalah lebih mudah mengingat ini dari bahasa mesin:

10110000 01100001

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, kata-kata 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 OPcode 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 satusatunya 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)

INSTRUKSI BAHASA ASSEMBLY

Secara fisik, kerja dari sebuah komputer dapat dijelaskan sebagai siklus pembacaan instruksi yang tersimpan di dalam memori. komputer menentukan alamat dari memori program yang akan dibaca, dan melakukan proses baca data di memori. Data yang dibaca diinterprestasikan sebagai instruksi. Alamat instruksi disimpan oleh komputer di register, yang dikenal sebagai program counter. Instruksi ini misalnya program aritmatika yang melibatkan 2 register. Dalam bahasa Assembly mempunyai 3 tipe intruksi dasar yaitu : mnemonic, operan1 dan 2 serta kometar

Mnemonic atau opcode ialah kode yang akan melakukan aksi terhadap operand . Operand ialah data yang diproses oleh opcode. Sebuah opcode bisa membutuhkan 1 ,2 atau lebih operand, kadang juga tidak perlu operand. Sedangkan komentar dapat kita berikan dengan menggunakan tanda titik koma (;). Berikut contoh jumlah operand yang berbeda beda dalam suatu assembly.

CJNE R0,#22H, Tasmi ;dibutuhkan 3 buah operand

MOVX @DPTR, A ;dibutuhkan 2 buah operand

RR A ;1 buah operand

NOP ; tidak memerlukan operand

Semua instruksi tersebut dapat dibagi menjadi lima kelompok menurut fungsinya, yaitu:

􀂾 Instruksi Pemindahan Data

􀂾 Instruksi Aritmatika

􀂾 Instruksi Logika dan Manipulasi Bit

􀂾 Instruksi Percabangan

􀂾 Instruksi Stack, I/O, dan Kontrol.