14
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

Pengertian Bahasa Assembly

Embed Size (px)

Citation preview

Page 1: Pengertian Bahasa Assembly

PENGERTIAN BAHASA ASSEMBLYBahasa 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 ukuran2. Lebih efisien/hemat memori 3. Lebih cepat dieksekusi Kesulitan Bahasa Assembly:1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak3. 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 KeteranganEQU Pendefinisian konstanta DB Pendefinisian data dengan ukuran satuan 1 byte 

Page 2: Pengertian Bahasa Assembly

DW Pendefinisian data dengan ukuran satuan 1 word DBIT Pendefinisian data dengan ukuran satuan 1 bitDS 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 dataDATA Pendefinisian internal direct dataIDATA 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 CarryAJMP Absolute Jump ANL AND Logic CJNE Compare and Jump if Not Equal CLR Clear CPL Complement DA Decimal Adjust DEC Decrement DIV DivideDJNZ Decrement and Jump if Not Zero INC IncrementJB 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 MultiplyNOP 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.

Page 3: Pengertian Bahasa Assembly

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 lain-

lain.

3.      Operand

            Operand ditulis setelah mnemonic, bisa berupa alamat atau data yang

digunakan instruksi yang bersangkutan.

          Contoh :

          MOV                      A, #20h         ; A dan #20h adalah operand

          LAGI:

          JNB                        LAGI            ; LAGI adalah operand

4.      Komentar

           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 :

Page 4: Pengertian Bahasa Assembly

a.   Instruksi Aritmatik

               Instruksi aritmatik selalu melibatkan akumulator dan ada juga beberapa

instruksi yang melibatkan register lain.

Berikut ini contoh instruksi–instruksi arimatika yaitu:

Tabel 2.4 Instruksi-instruksi Aritmatik

Instruksi Keterangan Contoh

ADD A,RnMenambah isi register Rn dengan isi akumulator lalu disimpan di akumulator

ADD A,R1

ADD A, directMenambah isi direct dengan akumulator, hasilnya disimpan di akumulator

ADD A, 30H

ADD A, #dataMenambahkan immediate data ke akumulator

ADD A, #20H

ADD A, @RnMenambahkan isi dari alamat yang ditunjuk Rn dengan akumulator

ADD A, @R1

ADDC A, #dataMenambahkan immediate data ke akumulator dengan carry

ADDC A, #20H

SUBB A, Rn Kurangkan isi register Rn dari akumulator SUBB A, R1INC A Tambah isi akumulator dengan 1 INC ADEC A Kurangkan isi akumulator denga 1 DEC A

MUL ABKalikan isi A dengan isi B, low-byte disimpan pada akumulator, dan high byte pada B

MUL AB

DIV ABBagi isi A dengan isi B. Akumulator menerima hasil integer pembagian dan B menerima integer sisanya.

DIV AB

b.      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 Keterangan Contoh

MOV A, Rn Memindahkan isi register Rn ke akumulator

MOV A, R0

MOV A,direct Memindahkan isi direct byte ke MOV A, 30h

Page 5: Pengertian Bahasa Assembly

akumulatorMOV A , #data Mengisi akumulator dengan nilai data MOV A,#20hMOV A, @Rn Mengisi akumulator dengan isi dari

alamat yang ditunjuk oleh RnMOV A, @R0

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         ; isi akumulator dengan bilangan 30 heksadesimal

2.      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        ; isi akumulator dengan bilangan 20

heksadesimal

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)

Page 6: Pengertian Bahasa 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

Page 7: Pengertian Bahasa Assembly

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

Page 8: Pengertian Bahasa Assembly

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 programORG 100h ;Mengatur awal dari programTData : JMP ProsesT_ASCII DB 13,10,’Ini adalah tombol ASCII : $’T_Extended DB 13,10,’Ini adalah tombol Extended $’Proses : ;Deklarasi ProsesMOV AH,0 ; Servis Input satu karakter dan memasukan nilai 0 ke AHINT 16h ; MenjalankanPUSH AX ; Menyimpan hasil dari pembacaan pada stackCMP AL,00 ; Percabangan apakah ini karakter extended ?JE Extended ; Jika Betul !, Lompat ke ExtendedASCII: ;Deklarasi ASCIILEA DX,T_ASCII ; Mengambil alamat T_ASCIIMOV AH,09 ; Memasukan nilai 09 ke AHINT 21h ; Cetak kalimat !POP AX ; Mengambil kembali nilai AX pada stackMOV DL,AL ; Mengambil kode ASCII yang ditekan, Menduplikasikan isi register AL ke DLMOV AH,2 ; Memasukan Nilai 2 ke AHINT 21h ; Cetak karakter !CMP AL,’Q’ ; Apakah yang ditekan huruf ‘Q’ ?

Page 9: Pengertian Bahasa Assembly

JE exit ; Jika Betul !, lompat ke ExitCMP AL,’q’ ; Apakah yang ditekan huruf ‘q’ ?JE exit ; Jika betul !, lompat ke ExitJMP Proses ; Lompat ke ProsesExtended: ;Deklarasi ExtendedLEA DX,T_Extended ; Mengambil alamat T_ExtendedMOV AH,09 ; Memasukan nilai 09 ke AHINT 21h ; Cetak dan menampilkan kalimat !JMP Proses ; Lompat ke Prosesexit: 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

.codeorg 100hmulai :             mov ah, 02h             mov dl, 'B'             mov cx, 8lagi :             int 21h             inc al

Page 10: Pengertian Bahasa Assembly

             inc cxloop 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

.codeorg 100hmulai :             mov ah, 02h             mov dl, 'B'             mov cx, 8lagi :             int 21h             inc al             inc cxloop lagi            int 20hend 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.codeorg 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 20hend mulai

Atau bisa di lihat hasilnya sebagai beriktu dalam gambar.

Page 11: Pengertian Bahasa Assembly

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.codeorg 100hmulai:    vkal db 'STMIK WIDYA UTAMA$'ulang:

Page 12: Pengertian Bahasa Assembly

    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 :