Anda di halaman 1dari 12

PENGERTIAN BAHASA ASSEMBLY Bahasa pemrograman generasi kedua adalah bahasa assembly.

Bahasa rakitan (bahasa Inggris: assembly language) adalah bahasa pemrograman komputer tingkat rendah. Bahasa assembly merupakan notasi untuk bahasa mesin yang dapat dibaca oleh manusia dan berbeda-beda tergantung dari arsitektur komputer yang digunakan. Berbeda dengan bahasa pemrograman tingkat tinggi, bahasa assembly atau 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.(dna) Pemrograman AT89S51 bahasa Assembly Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang pertama adalah bahasa pemrograman tingkat tinggi (high level language) dan jenis yang kedua adalah bahasa pemrograman tingkat rendah (low level language). 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 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. Daftar Assembly Directive Assembly Directive Keterangan EQU Pendefinisian konstanta DB Pendefinisian data dengan ukuran satuan 1 byte

DW Pendefinisian data dengan ukuran satuan 1 word DBIT Pendefinisian data dengan ukuran satuan 1 bit DS Pemesanan tempat penyimpanan data di RAM ORG Inisialisasi alamat mulai program END Penanda akhir program CSEG Penanda penempatan di code segment XSEG Penanda penempatan di external data segment DSEG Penanda penempatan di internal direct data segment ISEG Penanda penempatan di internal indirect data segment BSEG Penanda penempatan di bit data segment CODE Penanda mulai pendefinisian program XDATA Pendefinisian external data DATA Pendefinisian internal direct data IDATA Pendefinisian internal indirect data BIT Pendefinisian data bit #INCLUDE Mengikutsertakan file program lain Daftar Instruksi Instruksi Keterangan Singkatan ACALL Absolute Call ADD Add ADDC Add with Carry AJMP Absolute Jump ANL AND Logic CJNE Compare and Jump if Not Equal CLR Clear CPL Complement DA Decimal Adjust DEC Decrement DIV Divide DJNZ Decrement and Jump if Not Zero INC Increment JB Jump if Bit Set JBC Jump if Bit Set and Clear Bit JC Jump if Carry Set JMP Jump to Address JNB Jump if Not Bit Set JNC Jump if Carry Not Set JNZ Jump if Accumulator Not Zero JZ Jump if Accumulator Zero LCALL Long Call LJMP Long Jump MOV Move from Memory MOVC Move from Code Memory MOVX Move from Extended Memory MUL Multiply NOP No Operation ORL OR Logic POP Pop Value From Stack PUSH Push Value Onto Stack RET Return From Subroutine RETI Return From Interrupt RL Rotate Left RLC Rotate Left through Carry RR Rotate Right RRC Rotate Right through Carry SETB Set Bit SJMP Short Jump SUBB Subtract With Borrow SWAP Swap Nibbles XCH Exchange Bytes XCHD Exchange Digits XRL Exclusive OR Logic

Baris-baris program yang mengandung instruksi mesin atau pengarah assembler harus mengikuti aturan program assembler ASM51. Masing-masing baris atas beberapa field yang dipisahkan dengan spasi atau tabulasi adalah bagian label, bagian mnemonic, bagian operand yang bisa lebih dari satu bagian komentar dan diakhiri dengan END.

2.1 Bagian Bagian Dari Program Assembler Berikut ini adalah bagian bagian dari rogram assembler yaitu: 1. Label Label merupakan suatu simbol yang didefinisikan sendiri oleh pembuat program untuk menandai lokasi memori pada area program. Simbol dan label adalah dua hal yang berbeda. Simbol tidak menggunakan titik dua, sedangkan label harus diakhiri dengan titik dua. Contoh : PAR EQU 500 ; PAR Menunjukan suatu simbol ; dari nilai 500 MULAI: MOV A, #0FFh ; pada label; Mulai nilai 0FFh ; dipindahkan ke Akumulator

Dalam satu baris hanya ada satu label, pada umumnya Assembler membatasi jumlah karakter yang bisa digunakan hingga 31 karakter. 2. Mnenonik

Mnemonic instruksi atau pengarah Assembler dimasukan dalam Mnemonic field yang mengikuti label mnemonic. Mnemonic instruksi misalnya ADD, MOV, INC dan lain-lain.Sedangkan pengarah Assembler misalnya ORG, EQU, DB dan lainlain. 3. Operand Operand ditulis setelah mnemonic, bisa berupa alamat atau data yang digunakan instruksi yang bersangkutan. Contoh : MOV LAGI: JNB 4. Komentar A, #20h LAGI ; A dan #20h adalah operand ; LAGI adalah operand

Komentar harus diawali dengan titik koma. Sub rutin dari bagian besar program yang mengerjakan suatu operasi biasanya diawali dengan blok komentar yang menjelaskan fungsi sub rutin atau bagian besar program tersebut. 5. End Petunjuk END merupakan kode perintah terakhir yang menunjukan batas akhir dari proses Assembly. Instruksi yang sering digunakan dalam pembuatan program yaitu :

a. Instruksi Aritmatik Instruksi aritmatik selalu melibatkan akumulator dan ada juga beberapa instruksi yang melibatkan register lain. Berikut ini contoh instruksiinstruksi arimatika yaitu: Tabel 2.4 Instruksi-instruksi Aritmatik Instruksi ADD A,Rn ADD A, direct ADD A, #data ADD A, @Rn ADDC A, #data SUBB A, Rn INC A DEC A MUL AB DIV AB b. Keterangan Menambah isi register Rn dengan isi akumulator lalu disimpan di akumulator Menambah isi direct dengan akumulator, hasilnya disimpan di akumulator Menambahkan immediate data ke akumulator Menambahkan isi dari alamat yang ditunjuk Rn dengan akumulator Menambahkan immediate data ke akumulator dengan carry Kurangkan isi register Rn dari akumulator Tambah isi akumulator dengan 1 Kurangkan isi akumulator denga 1 Kalikan isi A dengan isi B, low-byte disimpan pada akumulator, dan high byte pada B Bagi isi A dengan isi B. Akumulator menerima hasil integer pembagian dan B menerima integer sisanya. Contoh ADD A,R1 ADD A, 30H ADD A, #20H ADD A, @R1 ADDC A, #20H SUBB A, R1 INC A DEC A MUL AB DIV AB

Instruksi Logika Instruksi Logika ini dipakai untuk melakukan operasi logika, yaitu operasi AND (instruksi ANL), operasi OR (instruksi ORL), operasi Exclusive-OR (instruksi XRL), operasi clear (instruksi CLR), instruksi komplemen (instruksi CPL), operasi penggeseran kanan atau kiri (instruksi RR, RRC, RL dan RLC) serta operasi penukaran data (instruksi SWAP). Data yang dipakai dalam operasi ini biasanya berupa data yang berada dalam akumulator atau data yang berada dalam memori data. c. Instruksi Pemindahan Data Instruksi instruksi pemindahan data adalah : Tabel 2.5 Instruksi instruksi Perpindahan Data Instuksi MOV A, Rn MOV A,direct Keterangan Memindahkan isi register Rn ke akumulator Memindahkan isi direct byte ke Contoh MOV A, R0 MOV A, 30h

MOV A , #data MOV A, @Rn

akumulator Mengisi akumulator dengan nilai data MOV A,#20h Mengisi akumulator dengan isi dari MOV A, @R0 alamat yang ditunjuk oleh Rn

2.2 Mode Mode Pengalamatan 1. Mode Pengalamatan Langsung Dalam pengalamat langsung nilai yang akan disimpan dalam suatu memori diperoleh secara langsung dengan mengambil dari lokasi memori yang lain. Contoh : MOV A,30H 2. ; isi akumulator dengan bilangan 30 heksadesimal

Mode Pengalamatan Tak Langsung

Dalam pengalamatan tak langsung, instruksi menentukan suatu register yang digunakan untuk menyimpan alamat operan Contoh : ADD A,R ; Tambahkan isi RAM yang lokasinya ditunjukan oleh register R1 ke akumulator. DEC @R1 ; Kurangi satu isi RAM yang alamatnya ditunjukan oleh register R1.

3.

Mode Pengalamatan Segera

Cara ini menggunakan konstanta. Data konstanta merupakan data yang menyatu dengan instruksi, contoh intruksi diatas mempunyai arti bahwa data konstantanya, yaitu 20H, (sebagai data konstanta harus diawali dengan # dan tanda H untuk menyatakn format bilangan heksadesimal) disalin ke Akumulator (A). Contoh : MOV A,#20H heksadesimal ; isi akumulator dengan bilangan 20

4. Mode Pengalamatan Data Pengalamatan data terjadi pada sebuah perintah ketika nilai operasi merupakan alamat data yang akan diisi atau yang akan dipindahkan. Contoh : MOV P1,A ; isi P1 dari nilai akumulator.

5. Mode Pengalamatan Bit Pengalamatan bit adalah penunjukkan menggunakan simbol titik (.) yang menunjuk alamat lokasi bit, baik dalam RAM internal atau perangkat keras. Contoh : SETB P1.7 ; set bit port 1.7 high ( pot 1.7 diberi nilai logika 1)

.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 PENGERTIAN BAHASA ASSEMBLY .MODEL SMALL ;memberitahu assembler berapa memori yang akan dipakai .CODE ; Mendeklarasikan bahwa bagian dibawah ini adalah instruksi program ORG 100h ;Mengatur awal dari program TData : JMP Proses T_ASCII DB 13,10,Ini adalah tombol ASCII : $ T_Extended DB 13,10,Ini adalah tombol Extended $ Proses : ;Deklarasi Proses MOV AH,0 ; Servis Input satu karakter dan memasukan nilai 0 ke AH INT 16h ; Menjalankan PUSH AX ; Menyimpan hasil dari pembacaan pada stack CMP AL,00 ; Percabangan apakah ini karakter extended ? JE Extended ; Jika Betul !, Lompat ke Extended ASCII: ;Deklarasi ASCII LEA DX,T_ASCII ; Mengambil alamat T_ASCII MOV AH,09 ; Memasukan nilai 09 ke AH INT 21h ; Cetak kalimat ! POP AX ; Mengambil kembali nilai AX pada stack MOV DL,AL ; Mengambil kode ASCII yang ditekan, Menduplikasikan isi register AL ke DL MOV AH,2 ; Memasukan Nilai 2 ke AH INT 21h ; Cetak karakter ! CMP AL,Q ; Apakah yang ditekan huruf Q ?

JE exit ; Jika Betul !, lompat ke Exit CMP AL,q ; Apakah yang ditekan huruf q ? JE exit ; Jika betul !, lompat ke Exit JMP Proses ; Lompat ke Proses Extended: ;Deklarasi Extended LEA DX,T_Extended ; Mengambil alamat T_Extended MOV AH,09 ; Memasukan nilai 09 ke AH INT 21h ; Cetak dan menampilkan kalimat ! JMP Proses ; Lompat ke Proses exit: INT 20h ; Pengembalian Nilai ke DOS ! END TData ; Program Selesai !

Soal No. 3 : Berikan contoh kode program yang didalamnya berisikan perulangan :

Jawab : .model small .code org 100h mulai : jmp ulang vkal db 'my name is dede$' ulang : mov dl, vkal[bx] mov ah, 02h int 21h inc bx mov ax, bx cmp ax,14 je exit jmp ulang exit : int 20h end mulai Soal No. 4 : Contoh kode program dibawah ini, terdapat 1 register yang tidak sesuai penggunaannya. Koreksilah ! .model small .code org 100h mulai : mov ah, 02h mov dl, 'B' mov cx, 8 lagi : int 21h inc al inc cx loop lagi

int 20h Jawab : Jika kode program diatas kita jalankan, maka akan ada pesan error "unexpected end of file encountered" hal ini disebabkan pada kode diatas tidak terdapak kode penutup intruksi yaitu "end". jadi seharusnya kode diatas adalah sebagai berikut :

.model small .code org 100h mulai : mov ah, 02h mov dl, 'B' mov cx, 8 lagi : int 21h inc al inc cx loop lagi int 20h end mulai

Soal No. 5 : Bangunlah sebuah sowftware dengan bahasa assembly yang dapat menampilkan karakter beratribut M-A dengan foreground merah background hitam. Jawab : Untuk format Script/Codinya yaitu sebagai berikut : .model small .code org 100h mulai: mov ah,09h mov bl,00000100b mov cx, 13 ulang: int 10h inc bl mov ah, 02h mov dl,'M' mov cx, 13 lagi: inc bl int 21h dec dl loop lagi int 20h end mulai Atau bisa di lihat hasilnya sebagai beriktu dalam gambar.

Soal No. 6 : .
Bangunlah sebuah software dengan bahasa assembly yang dapat menampilkan kalimat, jika menemukan huruf tertentu maka pencetakan selesai.Program looping jika menemukan huruf "D" pada kalimat "STMIK WIDYA UTAMA" maka akan mencetak huruf "D" FLOWCHATNYA

Jawab : untuk codinya adalah sebagai berikut : .model small .code org 100h mulai: vkal db 'STMIK WIDYA UTAMA$' ulang:

mov DL, vkal[12] mov ah,02h int 21h int 20h mov ax,bx cmp ax,11 je exit inc bx jmp ulang exit: int 20h end mulai Hasil dari pengcodingan yang sudah di save dan di tampilkan hasilnya yaitu sebagai berikut :