Upload
salman-muhammad
View
433
Download
2
Embed Size (px)
Citation preview
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
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.
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 :
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
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)
.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 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’ ?
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
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.
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:
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 :