BLOGGER TEMPLATES AND TWITTER BACKGROUNDS

Rabu, 01 Februari 2012

BAHASA ASSEMBLY

Bahasa rakitan atau lebih umum dikenal sebagai Assembly adalah bahasa pemrograman tingkat rendah yang digunakan dalam pemrograman komputer, mikroprosesor, pengendali mikro, dan perangkat lainnya yang dapat deprogram. Bahasa assembly merupakan notasi untuk bahasa mesin yang dapat dibaca oleh manusia dan berbeda-beda tergantung dari arsitektur komputer yang digunakan. Bahasa mesin itu sendiri adalah kumpulan kode biner yang merupakan instruksi yang bisa dijalankan oleh komputer. Sedangkan bahasa Assembler memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan penulisan program.

Program yang ditulis dengan bahasa Assembly terdiri dari label, kode mnemonic dan lain sebagainya, yang dinamakan sebagai program sumber Source Code yang belum bisa diterima oleh prosessor untuk dijalankan sebagai program, tapi harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner.

Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis dan dimengerti oleh manusia. Sedangkan bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana agar komputer dapat langsung mengintepretasikan pernyataan-pernyataan program.

Kelebihan Bahasa Assembly:
1. Ketika di-compile lebih kecil ukuran
2. Lebih efisien/hemat memori
3. Lebih cepat dieksekusi

Kesulitan Bahasa Assembly:
1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi.
2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis

Sangat banyak keuntungan yang kita dapatkan dari belajar bahasa ini, diantaranya kita bisa belajar untuk mengakses hardware secara langsung,disamping ukuran file hasil kompilasi juga kecil.

BAHASA ASSEMBLY MCS-51
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu:
1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program).
2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler) .

PENGGUNAAN SOFTWARE
Software untuk membantu memprogram mikrokontroler MCS-51 sudah banyak tersedia. Untuk mempermudah maka dapat dipilih software yang merupakan Integrated Development Environment (IDE) yaitu software yang merupakan editor sekaligus compiler. Bahkan juga ada yang sekaligus debugger dan simulator. Salah satunya yang digunakan pada training di PRASIMAX adalah Read51.

PERINTAH DASAR ASSEMBLER :
1.MOV
Perintah untuk mengisi, memindahkan, memperbaharui isi suatu register, variabel ataupun suatu lokasi memori.
Penulisan perintah:
MOV [operand A],[operand B]

Dengan ketentuan operand A merupakan register, variabel, lokasi memori dan ketentuan isi operand B berupa register, variabel, lokasi memori ataupun bilangan.
Operand B merupakan bilangan asal yang akan diisikan ke operand A, dengan kata lain operand A merupakan tujuan pengisian atau penduplikatan dari operand B.

Contoh:

MOV AH, AL
Operand A dari perintah diatas adalah register AH
Operand B dari perintah diatas adalah register AL
Hal yang dilakukan dari perintah diatas adalah menduplikatkan isi register AL ke register AH.

2.Int (Interrupt)
Subrotine yang dipanggil menggunakan perintah Int (interrupt) terdiri dari 2 jenis, yaitu:
1. Bios Interrupt yaitu Int yang disediakan oleh BIOS (Basic Input Output System). Interrupt yang termasuk dalam Interrupt BIOS adalah Int 0 hingga Int 1F hexa.
2. DOS Interrupt yaitu Int yang disediakan oleh DOS (Disk Operating System).

Interupt yang termasuk dalam Interrupt DOS adalah Interrupt diatas Int 1F hexa. Misal: Interrupt 20 hexa, Interrupt 21 hexa dll.




3.Q (Quit)
Bila kita mengetik Q dan menekan Enter, maka akan segera kembali ke DOS Prompt.

Contoh:

A>DEBUG
-Q
A>

4.H (Hexa)
Perintah yang melaksanakan penjumlahan dan pengurangan terhadap dua bilangan hexa.
Bentuk Umum Instruksi:
H operand1 operand2

Contoh:

-H 24 2014
4377 01F2

5.R (Register)
Perintah ini adalah untuk mengetahui isi masing-masing register pada saat mengetik R dan menekan Enter.

Contoh:

-R
A=0000 B=0000 C=0000 D=0000 SP=CE2E BP=0000 SI=0000 DI=0000
DS=0FD8 ES=0FD8 CS=0FD8 IP=0100 MV UP DI PL MZ MA PO NC
0FD8:0100 E603
OUT 03,AL

6.A (Assembler)
Perintah ini berguna untuk tempat menulis program Assembler.

Contoh:

-A 90
0fD8:90

Pada sebelah kiri bawah huruf A terdapat angka yang merupakan pernyataan segment dan offset dimana anda menempatkan program.

7.N (Name)
Perintah ini untuk memasukkan nama program setelah program dibuat.
Bentuk Umum Instruksi:
N [Drive]: [nama program]

Contoh:

-N B:asik.com

8.RCX (Register CX)
Perintah untuk mengetahui dan memperbaharui isi register CX yang merupakan tempat penampungan panjang program yang sedang aktif sebelum dijalankan (running).

Contoh:

-RCX
CX 0000

9.RIP (Register IP)
Peirntah yang memberitahu komputer untuk memulai proses program dari titik tertentu (selalu dimulai dari 100 hexa).

Contoh:
-RIP
IP 0100

10.W (Write)
Setelah selesai membuat program dan menentukan RCX dan RIP dari program yang dibuat, adalah menulis program itu dahulu sebelum memprosesnya.

Contoh:
-W
Writing 0008 bytes



11.G (Go)
Untuk memproses di dalam DEBUG ketik huruf G dan tekan Enter, maka program yang ditulis akan dijalankan.

Contoh:
-G
A

Program terminated normally

12.T (Trace)
Perintah ini untuk memproses sebaris program saja.

Contoh:
-T
AX=0200 BX=0000 CX=0008 DX=0000 SP=CE2E BP=0000 SI=0000 DI=0000
DS=0FD8 ES=0FD8 SS=0FD8 CS=0FD8 IP=0102 MV UP DI PL NZ NA PO NC
0FD8:0102 B241
MOV DI,41

13.U (Unassemble)
Fungsi ini sama dengan fungsi LIST pada BASIC, yaitu untuk melihat ptogram yang sedang aktif saat itu, maka yang ditampilkan adalah program sepanjang 21h.

Contoh:
-U
0FD8:0102 B241 MOV DI,41
0FD8:0104 CD21 INT 21
0FD8:0106 CD20 INT 20
0FD8:0108 D9B90300 FSTCW [BX+DI+0003]
0FD8:010C F3 REPZ
0FD8:010D A4 MOVSB
0FD8:010E B020 MOV AL,20
0FD8:0110 AA STOSB
0FD8:0111 C3 RET
0FD8:0112 3C80 CMP AL,80
0FD8:0114 7214 JB 012A
0FD8:0116 2C80 SUB AL,80
0FD8:0118 1E PUSH DS
0FD8:0119 53 PUSH DX
0FD8:011A BE1E9142 MOV DS:[4291]
0FD8:011E C51E040C LDS BX,[0C04]



== Representasi kode mesin ==

Bahasa rakitan menerjemahkan sebuah instruksi rakitan menjadi instruksi mesin, umumnya mekanisme penerjemahan ini bersifat 1-1, karenanya dapat disebutkan pula bahwa setiap instruksi dalam bahasa rakitan merupakan representasi dari instruksi kode mesin.
Sebagai contoh, berikut adalah instruksi yang digunakan pada prosesor [[x86]] untuk memindahkan nilai 97 sebesar 8-bit ke dalam register prosesor ''AL''. Kode biner atas instruksi pemindahan adalah 10110 diikuti dengan 3-bit pengenal atas register yang akan digunakan. Pengenal atas register ''AL'' dalam hal ini adalah 000. Kemudian, nilai 97 dalam kode biner adalah 01100001, sehingga kode mesin yang digunakan untuk memindahkannya adalah sebagai berikut:

{{cite book|title=Intel Architecture Software Developer’s Manual, Volume 2: Instruction Set Reference|year=1999|publisher=INTEL CORPORATION |pages=442 and 35|url=http://download.intel.com/design/PentiumII/manuals/24319102.PDF|accessdate=18 November 2010}}
10110000 01100001

Kode biner ini dapat diubah agar lebih mudah dibaca manusia dengan mengkonversikannya dalam bilangan heksadesimal sebagai berikut:
B0 61
Pada instruksi diatas, B0 berarti: 'Pindahkan nilai berikut ke register ''AL''', dan 61 adalah representasi bilangan heksadesimal untuk nilai 01100001, atau 97 dalam bilangan desimal. Bahasa rakitan untuk prosesor [[Intel]] menyediakan simbol mnemonic MOV (yang merupakan singkatan dari ''move'') untuk instruksi serupa sehingga kode mesin sebelumnya dapat ditulis dalam bahasa rakitan sebagai berikut:

MOV AL, 61h ; Isi register AL dengan nilai 97 (61h)

Bahasa rakitan memungkinkan programmer menambahkan komentar atas setiap instruksi yang ditulis untuk mempermudah pembacaan dan lebih mudah pemahaman.





Berikut adalah Contoh - Contoh Sederhana Bahasa Pemrograman Assembly


.MODEL SMALL
.CODE
ORG 100H

AWAL:
MOV CL,30H
JMP PROSES
KAL0 DB 'Ketikkan satu kalimat:$'
KAL1 DB 13,10,'Kalimat yang diinput adalah:$'
KAL2 DB 13,10,'Cetak dari belakang:$',13,10
KAL3 DB 13,10,'panjang string adalah:$'
KALX DB 13,10,'$'
KAL4 DB 13,10,'Jumlah Huruf Vokal:$'
KAL5 DB 13,10,'Jumlah Huruf Konsonan:$'
KATA DB 20,?,20 DUP (?)


VOKAL: INC CL
JMP PLUS



PROSES:
;============= CETAK STRING ================

MOV AH,09H
MOV DX,OFFSET KAL0
INT 21H


;============= INPUT STRING ================

MOV AH,0AH
LEA DX,KATA
INT 21H

;============= CETAK STRING ================

MOV AH,09H
MOV DX,OFFSET KAL1
INT 21H

;============ CETAK VARIABEL STRING DG MODEL COMPARASI ==========

MOV BX,OFFSET KATA+2


CETAK:
MOV DL,[BX]
CMP DL,0DH
JE BELAKANG

MOV AH,02H
INT 21H

CMP DL,'a'
JE VOKAL
CMP DL,'i'
JE VOKAL
CMP DL,'u'
JE VOKAL
CMP DL,'e'
JE VOKAL
CMP DL,'o'
JE VOKAL
CMP DL,'A'
JE VOKAL
CMP DL,'I'
JE VOKAL
CMP DL,'U'
JE VOKAL
CMP DL,'E'
JE VOKAL
CMP DL,'O'
JE VOKAL

PLUS:INC BX
JMP CETAK

;============= CETAK KATA DARI BELAKANG ==================

BELAKANG:MOV AH,09H
MOV DX,OFFSET KAL2
INT 21H
MOV AH,09H
MOV DX,OFFSET KALX
INT 21H

CETAK1:
MOV DL,[BX]
CMP DL,KATA+1
JE VOKAL1

MOV AH,02H
INT 21H
DEC BX
JMP CETAK1


;============ CETAK JUMLAH VOKAL ================

VOKAL1:
MOV AH,09H
MOV DX,OFFSET KAL4
INT 21H

MOV DL,CL
;ADD DL,30H
MOV AH,02H
INT 21H


;============ CETAK JUMLAH KONSONAN ===============

KONSONAN:
MOV AH,09H
MOV DX,OFFSET KAL5
INT 21H

MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
SUB DL,CL
ADD DL,30H
MOV AH,02H
INT 21H


;============= CETAK PANJANG STRING ================

AKHIR:
MOV AH,09H
MOV DX,OFFSET KAL3
INT 21H

MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
MOV AH,02H
INT 21H

SELESAI:
INT 20H

END AWAL

0 komentar: