Post on 19-Jan-2021
11/18/2010
1
PERTEMUAN
BAHASA PEMOGRAMAN ASSEMBLER
Bahasa merupakan media komunikasi.Manusia dapat berintegrasi dengan baik jika jika memahami apa yang diinginkan oleh orang lain.
Pada dasarnya bahasa yang di gunakan dapat di kelompokan berdasarkan tahapan atau tingkat
1. Tingkat rendah yang digukan anak-anak2. Tingkat menengah berupa bahasa kebanyakan
atau pergaulanatau pergaulan3. Bahasa tingkat tinggi seperti pada buku-buku
ilmiah
11/18/2010
2
Demikian juga pada peralatan yang berbasiskan mikroprosesor atau mikrokontroler akan dapat menjalankan suatu pekerjaan jika ada perintah (instruksi) yang sesuai.
Format bahasa pemograman:Sama seperti mikroprosesor agar CPU didalam mikrokontroler dapat mengerjakan suatu pekerjaan maka diperlukan program dalam bentuk perintah-perintah (instruksi)
Perintah-perintah tersebut di tulis dalam bentuk:1. Bahasa mesin (bahasa tingkat rendah)2. Bahasa Asembler/Asembly (bahasa tingkat menengah)3. Basic, pascal dsb (bahasa tingkat tinggi)
Bahasa Assembly (Assembler)Bahasa yang di gunakan oleh programer untuk membuat program sehingga dapat diproses oleh mikrokontroler.Bahasa asembler merupakan sandi yang merupakan singkatan kata dari kata kata dalam bahasa inggrissingkatan kata dari kata-kata dalam bahasa inggris, contoh:
Mov dari MoveINC dari Increment
SJMP dari Short Jump, dll
Singkatan-singkatan tersebut di kenal dengan mnemonicSingkatan singkatan tersebut di kenal dengan mnemonic . Agar program yang di buat oleh seorang programer dengan bahasa assembler dapat dijalankan oleh mikrokontroler.Maka didalam mikrokontroler sandi tersebut ditermahakan menjadi kode mesin kemudian baru dapat diproses.
11/18/2010
3
Bahasa Assembly adalah bahasa pemrograman tingkat Menengah. Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis danpernyataan 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.Jika dalam penulisan program menggunkan bahasa assemler atau bahasa tingkat tinggi maka di butuhkan software yang dikenal dengan Compiler untuk mentermahkan bahasa yang di mengerti manusia menjadi bahasa mesin
1. Ketika di-compile lebih kecil ukuran
Kelebihan Bahasa Assembly
p2. 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
11/18/2010
4
Gambar level bahasa pemograman
Mnemonic & Opcode
Mnemonic adalah simbol-simbol instruksi/perintah seperti:Mov, CPL, RR, SJMP dan lain-lain.
CPL A ; komplementkan isi reg A, kodenya F4hMOV A, 40h ; isi reg A dgn isi memori lokasi 40h, kodenya E5h 40hMOV 41, #30h ; isi memori lokasi 41h dgn konstanta 30h kodenya 75h
41h 30h
Opcode (operation code) merupakan kode dari simbol instruksi, contoh:
Dari contoh instruksi diatas F4h adalah opcodeDari contoh instruksi diatas F4h adalah opcode dari register A .
Opcode bisa diikuti atau tidak oleh satu atau dua operand.Opcode menentukan operasi yang akan dilakukan sedangkan operand menentukan jenis data ,variable atau instruksi berikutnya dalam sebuah program.
11/18/2010
5
Bahasa assembly atau assembler pada dasarnya adalah susunan mnemonic yang dapat menjalankan suatu fungsi.
Seperti sudah di bahas dalam pertemuan sebelumnya bahasa assembler memudahkansebelumnya bahasa assembler memudahkan penulisan program .
Didalam Mikrokontroler setiap mnemonic diterjemahkan dulu kedalam bahasa mesin sebelum di eksekusi.
Op-Code Mnemonic KeteranganF4 CPL A F4h merupakan Opcode operasi komplement aF4 CPL A F4h merupakan Opcode operasi komplement a
tanpa operandE540 MOV A, 40h E5h operasi untuk register A dengan memory
internal dengan alamat tertera dalam operand (40h)753130 MOV 41, #30h 75h merupakan opcode dengan operand 41h dan
30h.
Mode Penggalamatan
Dari tabel diatas perintah MOV di ikuti oleh opcode yang
Mode penggalamatan berdasarkan orientasi alokasi memory
p p y gberbeda, karena jenis penggalamatannya berbeda. Perbedaan ini di kenal sebagai ragam penggalamatan atau mode pengalamatan.
11/18/2010
6
essing
Menggunakan register untuk menyimpan dan memanipulasi data,
Menggunakan register R0 s/d R7 yang diseleksiRe
gister Add
re
Ukuran sumber dan tujuan register yang digunakan harus sama,
R
Tidak diijinkan perpindahan data antar register.
Direct Addressing atau penggalamatan langsung hanya dapat dilakukan di internal memory mikrokontroler (tidak
Direct Addressing
p y (dapat mengakses memory luar).Penggalamatan langsung menggunakan:
AccumulatorRegisterdan Port
Contoh Penggalamatan langsung:
11/18/2010
7
t Add
ressing
Biasanya digunakan untuk mengakses RAM di lokasimemori mulai 30H sampai 7FH.
Dapat mengakses 128 bytes RAM.
Lokasi bank register diakses dengan nama registernya.
Direct
Bertolak belakang dengan mode pengalamatan segera(immediate)(immediate)
Tidak menggunakan “#” dalam operasi data.
Indirect Addressing atau penggalamatan tidak langsung diberi simbol @ (at).
Indirect Addressing
Pengertiannya disana tempat data yang harus di baca terlebih dahulu.
Contoh Penggalamatan tidak langsung:
Mov A, @R7 Baca dulu isi register R7, misalnya isinya 30h. Selanjutnya isi register A dengan data yang ada di alamat 30h.
11/18/2010
8
Immediate Addressing atau penggalamatan segera Penggalamatan pada operasi-operasi dengan konstanta
Immediate Addressing
yang sudah menyatu dengan op-code program. penggalamatan segera ditandai dengan simbol #
Contoh Penggalamatan segera:
Mov A, # 200 Isi A dengan 200d.
e Add
ressing
Data menjadi bagian program yang direpresentasikandengan tanda kres, “#”,
Mengandung informasi ke semua alamat, termasuk register DPTR 16-bit.
DPTR dapat diakses dengan 2 register 8 bit yakni DPH
Immed
iate
DPTR dapat diakses dengan 2 register 8 bit, yakni DPH untuk HIGH byte dan DPL untuk LOW
11/18/2010
9
tAdd
ressing
CONTOH:
Indirect Buat program untuk menyalin nilai 55H ke dalam lokasi
memori 40H dan 41H RAM, dengan menggunakan:
a) Direct addressing
b) Indirect addressing tanpa pengulangan (loop),
c) Indirect addressing Dengan pengulangan (loop).
tAdd
ressing Solusi:
Indirect
11/18/2010
10
tAdd
ressing Keuntungannya: mode ini mengakses secara mudah data
dinamis seperti halnya data statis pada mode pengalamatan langsung (direct addressing).
Pengulangan (looping) tidak diperkenankan pada direct addressing mode .
Indirect
Contoh:
Buat program untuk menghapus data di 16 lokasi RAM, dimulai dari alamat 60H.
Solusi:
tAdd
ressing Contoh:
Buat program untuk mengcopy 10 bytes data dari 35H ke60H.
Solusi:
Indirect
11/18/2010
11
iAritm
atika
Add
SubtractDecimal adjust
Instruks
IncrementDivide
adjust
DecrementMultiply
Instrusi AritmatikaPerintah-perintah perhitungan yang digunakan dalam bahasa Assemler dapat di lihat pada tabel di bawah
No Mnemonic Keterangan
1 ADD A, (Source) Isi A= A + (Source)
2 ADDC A, (Source) Isi A= A + (Source) + Carry
3 SUBB A, (Source) Isi A= A - (Source) - Carry
4 INC A Isi A= A + 1
5 INC (Source) Isi (Source) = (Source) -1
6 DEC A Isi A= A - 1
7 DEC (Source) Isi (Source) = (Source) -1
8 INC DPTR Isi DPTR = DPTR + 1
9 MUL AB Isi AB= A x B
10 DIV AB A = A :B ; B = sisa A :B
11 DA A Decimal Adjust
11/18/2010
12
Sumber ( source ) adalah operand dengan beragam penggalamatan; register, direct, indirect dan immediate.
Penjumlahan
Dibawah ini beberapa contoh intruksi Aritmatika:
ADD A, 0CH ; a diisi dengan a+ isi memori lokasi 0CH; ( pengalamatan langsung )
ADD A,@R1 ; a diisi dengan a+isi dari memori yang alamatnya ; disimpan di R1 ( penggalamatan taklangsung )
ADD A,R4 ; a diisi dengan a+isi dari R4 (pengalamatan register)ADD A,# 145 ; a diisi dengan a+145 ( penggalamatan segera )
Umumnya instruksi-instruksi aritmatika dieksekusi dalam 1µs kecuali instruksi INC DPTR yang memerlukan waktu 2µs dan intruksi DIV membutuhkan waktu 4µs.
Subtract
SUBB A, byte subtract with borrow
Contoh:
SUBB A, #04Fh ; A A – 4F – C
Notice that there is no subtraction WITHOUT borrow Therefore ifNotice that there is no subtraction WITHOUT borrow. Therefore, ifa subtraction without borrow is desired, it is necessary to clear the Cflag.
11/18/2010
13
Instruksi Increment dan Decriment berfungsi untukmenaikan dan menurunkan data yang tersimpan di dalam memori internal tanpa melalui accumulator
Increment dan Decriment
memori internal tanpa melalui accumulator.
INC A increment accumulatorINC byte increment byte in memoryINC DPTR increment data pointerDEC A decrement accumulatorDEC byte decrement byte
Untuk perkalian memakai instruksi MUL AB mengalikan accumulator dengan data yang ada pada register B dan
Perkalian
Pembagian
menempatkan hasil perkalian sebanyak 16 bit pada register A dan register B . Register A berisikan lo-byte dan Register B berisikan hi-byte, tetapi jika hasil perkalian lebih besar dari 256 (00FFH) maka bit 0V set, sedangkan bit CY selalu akan diclearkan ( ‘0’ ).
Mempergunakan instruksi DIV AB membagi isiaccumulator dengan data di dalam register B dan
meletakan hasil sebanyak 8bit pada accumulator dan sisa pembagian sebanyak 8 bit pada register B.
11/18/2010
14
Pemakaian instruksi DA A digunakan untuk operasi aritmatika BCD. Perintah-perintah ADD dan ADDC diikuti dengan sebuah perintah DA A agar didapatkan hasil
MOV A, 29h ; Isi A dengan data 29hADD A+1 ; isi A = 2Ah (dalam BCD kita mengharapkan hasilnya = 30h)
Agar hasilnya = 30h tambahkan perintah DA ADA A ; isi A= 30h
dengan sebuah perintah DA A agar didapatkan hasil dalam format BCD.
Contoh:
Instrusi LogikaInstruksi logika pada AT8951 merupakan operasi boolean (bit ) yang terdiri dari operasi AND, OR, EXOR dan NOT antar bit dalam sebuah register Tabel dibawah ini berisikanantar bit dalam sebuah register. Tabel dibawah ini berisikan bentuk-bentuk instruksi mikrokontroler 89C51.
Mnemonic Diskripsi
ANL <dest>,<source> <dest>=<dest> AND <source>
ORL <dest>,<source> <dest>=<dest> OR <source>
XRL <dest>,<source> <dest>=<dest> XOR <source>
CLR A Kosongkan A
CPL A Komplemenkan A
RL A Geser byte A kekanan
RLC A Geser byte A kekanan via C
RR A Geser byte A kekiri
RRC A Geser byte A kekkiri via c
SWAP A Tukar nibble dari a
11/18/2010
15
Bitwise Logic
ANL – AND Examples:
0000111110101100ANL
ORL – OR
XRL – eXclusive OR
CPL – Complement0000111110101100ORL
00001111
00001100
10101111
0000111110101100XRL
10101100CPL
10100011
01010011
RotatePerintah Rotate identik dengan Shift register dimana bit-bit dalam byte di geser ke kiri atau kekanan dengan ata tanpa carr
Mnemonic KeteranganRL Rotate Left = Putar 1 Bit data kekiriRR R Ri h P 1 Bi d k k
dengan atau tanpa carry.
Perintah-perintah Rotate dalam bahasa assembler adalah:
RR Rotate Right = Putar 1 Bit data kekanan
RLC Rotate Left Carry = Putar 1 Bit data kekiri melalui Carry
RRC Rotate Right Carry = Putar 1 Bit data kekanan melalui Carry
11/18/2010
16
Proses Rotate di dalam Accumulator
Rotate
• Rotate instructions operate only on a
rl a
mov a, #0xF0 ; a 11110000rl a ; a 11100001
11/18/2010
17
Rotate through Carry
Crrc a
mov a, #0A9h ; a A9add a #14h ; a BD (10111101) C 0
C
add a, #14h ; a BD (10111101), C 0
rrc a ; a 01011110, C 1
Swap
swap a
mov a, #72h
swap a ; a 27h
11/18/2010
18
Bit Logic Operations
Some logic operations can be used with single bit operandsoperands
CLR CCLR bitCPL CCPL bitCPL bitSETB C
Tabel pencabangan programMnemonic Keterangan
AACALL addr11 Jalankan subrutin di addr11LCALL add 16 Jalankan subrutin di addr16RET Kembali dari subrutinRETI Kembali dari service interupsiAJMP addr11 Lompat kealamat addr11SJMP add 16 Lompat kealamat addr16JMP @A + DPTR Lompat kealamat A+DPTRJZ rel Lompat ke rel jika A= 0DJNZ rel Lompat ke rel jika A ≠ 0p jCJNE <dest-byte>,<scr-byte>,rel
Bila ,dest> ≠ <source> lompat sejauh rel
CJNE A,#data,rel Bila A ≠ data lompat sejauh relDJNZ direct,rel Direct = Direct-1, bila ≠ 0 lompat sejauh relNOP No operation atau tidak ada operasi
11/18/2010
19
SubrutinSub rutin adalah potongan program yang terdapat pada memori program yang sering digunakan. Pada mikrokontroler 89C51 subrutin dapat dipanggil dengan instruksi:
ACALLLCALL
ACALL dapat memanggil 2K (11 line), sedangkan LCALL d t il i 64 K
Jika program menjalankan intruksi ACALL dan LCALL maka memori stack di gunakan untuk menyimpan data-data alamat yang ditinggalkan. Untuk kembali ke program utama setelah menjalankan subrutin maka digunakan intruksi RET.
LCALL dapat memanggil sampai 64 K
Subroutines
Main:
call to the subroutine
Main: ...acall sublabel......
sublabel:...... the subroutine
ret
11/18/2010
20
Why Subroutines?
• Subroutines allow us to have "structured" bl lassembly language programs.
• This is useful for breaking a large design into manageable parts.
• It saves code space when subroutines can be called many times in the same programcalled many times in the same program.
Unconditional Jumps
• SJMP <rel addr> ; Short jump, relative address is 8 bit 2’s complement number so jump can be up toaddress is 8‐bit 2’s complement number, so jump can be up to 127 locations forward, or 128 locations back.
• LJMP <address 16> ; Long jump
• AJMP <address 11> ; Absolute jump to anywhere within 2K block of program memory
• JMP @A + DPTR ; Long indexed jump
11/18/2010
21
Infinite Loops
Start: mov C, p3.7mov p1.6, Csjmp Start
Microcontroller application programs are almost always infinite loops!
Re‐locatable Code
cseg at 8000h
Memory specific (NOT Re-locatable)
mov C, p1.6mov p3.7, Cljmp 8000h
end
cseg at 8000hStart: mov C, p1.6
Re-locatable
Start: mov C, p1.6mov p3.7, Csjmp Start
end
11/18/2010
22
Conditional jumpsMnemonic Description
JZ <rel addr> Jump if a = 0JNZ <rel addr> Jump if a != 0JC <rel addr> Jump if C = 1JNC <rel addr> Jump if C != 1JB <bit>, <rel addr> Jump if bit = 1JNB <bit> < l dd > J if bi ! 1JNB <bit>,<rel addr> Jump if bit != 1JBC <bit>, <rel addr> Jump if bit =1, clear bitCJNE A, direct, <rel addr>
Compare A and memory, jump if not equal
More Conditional JumpsMnemonic Description
CJNE A, #data <rel addr> Compare A and data, jump if not equalnot equal
CJNE Rn, #data <rel addr> Compare Rn and data, jump if not equal
CJNE @Rn, #data <rel addr> Compare Rn and memory, jump if not equal
DJNZ Rn, <rel addr> Decrement Rn and then jump if not zero
DJNZ direct, <rel addr> Decrement memory and then jump if not zero
11/18/2010
23
Conditional Jumps for Branchingif condition is true
goto labelcondition
false
else
goto next instruction
jz led_offsetb Cmov P1.6, Cif a = 0 is true
true
label
sjmp skipoverclr Cmov P1.6, Cmov A, P0
led_off:
skipover:
send a 0 to LED
else
send a 1 to LED
Pencabangan bersyarat
Pencabangan bersyarat artinya lompat kealamat tertentu jika persyaratannya dipenuhi.jika persyaratannya dipenuhi.
Instruksi yang di gunakan adalah CJNE<dest-byte>, <src-byte>,rel. pengertiannya compare destination byte and source byte, jump if not equal along rel (aktif)
Contoh:
Mulai:Mulai:CJNE A,#040h, Label1 ; Bandingkan A dengan 40h, jika tidak sama lompat
ke label1CJNE A,P2, Label1 ; Bandikan A dengan P2, jika tidak sama lompat
ke label1Label1
_____________
11/18/2010
24
Perintah DJNZ (Decriment Jump if not Zero) pengertiannya adalah data di register di kurang satu jika hasilnya nol kembali ke ke program utama.Instruksi DJNZ di gunakan untuk counter atau pencacahInstruksi DJNZ di gunakan untuk counter atau pencacah.
Contoh:
Mulai:MOV Ro, #2h ; isi R0 dengan 2hMOV R1,# 20H ; isi R1 dengan 20h
Putar:MOV R1, #BBh ; isi memori R1 dengan BBhINC R1 R1 R1+1INC R1 ; R1=R1+1DJNZ R0,Putar ; R0=R0-1 ≠0, kembali putarEnd ;selesai
No Operation
Perintah NOP memerintahkan mikrokontroler 89C51 untuk menunda menjalankan program.menunda menjalankan program.Perintah NOP membutuhkan waktu 1 μs, sehingga perintah ini dapat di gunakan untuk delay.