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-anak
2. Tingkat menengah berupa bahasa kebanyakan atau pergaulan
atau pergaulan
3. Bahasa tingkat tinggi seperti pada buku-buku ilmiah
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 inggris singkatan kata dari kata-kata dalam bahasa inggris, contoh:
Mov dari Move
INC dari Increment
SJMP dari Short Jump, dll
Singkatan-singkatan tersebut di kenal dengan mnemonic Singkatan singkatan tersebut di kenal dengan mnemonic . Agar program yang di buat oleh seorang programer dengan
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 dan 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. Jika dalam penulisan program menggunkan bahasa assemler atau bahasa tingkat tinggi maka di butuhkan
software yang dikenal dengan Compileruntuk
mentermahkan bahasa yang di mengerti manusia menjadi bahasa mesin
1. Ketika di-compile lebih kecil ukuran Kelebihan Bahasa Assembly
p
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
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 F4h
MOV A, 40h ; isi reg A dgn isi memori lokasi 40h, kodenya E5h 40h MOV 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 opcode Dari contoh instruksi diatas F4h adalah opcode dari register A .
Bahasa assembly atau assembler pada dasarnya adalah susunan mnemonic yang dapat menjalankan suatu fungsi.
Seperti sudah di bahas dalam pertemuan sebelumnya bahasa assembler memudahkan sebelumnya bahasa assembler memudahkan penulisan program .
Didalam Mikrokontroler setiap mnemonic diterjemahkan dulu kedalam bahasa mesin sebelum di eksekusi.
Op-Code Mnemonic Keterangan
F4 CPL A F4h merupakan Opcode operasi komplement a F4 CPL A F4h merupakan Opcode operasi komplement a
tanpa operand
E540 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 g
berbeda, karena jenis penggalamatannya berbeda.
Perbedaan ini di kenal sebagai ragam penggalamatan atau mode pengalamatan.
e
ssing
¾Menggunakan register untuk menyimpan dan memanipulasi data,
Menggunakan register R0 s/d R7 yang diseleksi
R
egister
Addr
e
¾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: Accumulator
Register dan Port
t
Addressing
¾Biasanya digunakan untuk mengakses RAM di lokasi memori mulai 30H sampai 7FH.
¾Dapat mengakses 128 bytes RAM.
¾Lokasi bank register diakses dengan nama registernya.
Direc
t
¾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.
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
Addressing
¾Data menjadi bagian program yang direpresentasikan dengan tanda kres, “#”,
¾Mengandung informasi ke semua alamat, termasuk register DPTR 16-bit.
¾ DPTR dapat diakses dengan 2 register 8 bit yakni DPH
Immediat
e
¾ DPTR dapat diakses dengan 2 register 8 bit, yakni DPH untuk HIGH byte dan DPL untuk LOWt
Addressing
CONTOH:Indirec
t
¾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).
t
Addressing
Solusi:
Indirec
t
Addressing
¾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 .
Indirec
t
Contoh:
¾Buat program untuk menghapus data di 16 lokasi RAM, dimulai dari alamat 60H.
Solusi:
t
Addressing
Contoh:
¾Buat program untuk mengcopy 10 bytes data dari 35H ke 60H.
Solusi:
Indirec
iA
ritmatika
Add Subtract Decimal adjustInstruks
Increment Divide adjust Decrement Multiply 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
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 if Notice that there is no subtraction WITHOUT borrow. Therefore, if a subtraction without borrow is desired, it is necessary to clear the C flag.
Instruksi Increment dan Decriment berfungsi untuk
menaikan dan menurunkan data yang tersimpan di dalam memori internal tanpa melalui accumulator
Increment dan Decriment
memori internal tanpa melalui accumulator.
INC A increment accumulator INC byte increment byte in memory INC DPTR increment data pointer
DEC A decrement accumulator
DEC 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 isi accumulator dengan data di dalam register B dan
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 29h
ADD A+1 ; isi A = 2Ah (dalam BCD kita mengharapkan hasilnya = 30h) Agar hasilnya = 30h tambahkan perintah DA A
DA A ; isi A= 30h
dengan sebuah perintah DA A agar didapatkan hasil dalam format BCD.
Contoh:
Instrusi Logika
Instruksi logika pada AT8951 merupakan operasi boolean (bit ) yang terdiri dari operasi AND, OR, EXOR dan NOT antar bit dalam sebuah register Tabel dibawah ini berisikan antar 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
Bitwise Logic
ANL – AND
Examples: 00001111 10101100 ANLORL – OR
XRL – eXclusive OR
CPL – Complement
00001111 10101100 ORL 00001111 00001100 10101111 00001111 10101100 XRL 10101100 CPL 10100011 01010011 RotatePerintah Rotate identik dengan Shift register dimana bit-bit dalam byte di geser ke kiri atau kekanan dengan ata tanpa carr
Mnemonic Keterangan
RL Rotate Left = Putar 1 Bit data kekiri RR 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
Proses Rotate di dalam Accumulator
Rotate
•
Rotate instructions operate only on
a
rl a
mov a, #0xF0
; aÅ 11110000
rl a
; a
Å 11100001
Rotate through Carry
Crrc a
mov a, #0A9h ; a Å A9 add a #14h ; a Å BD (10111101) CÅ0 C add a, #14h ; a Å BD (10111101), CÅ0 rrc a ; a Å 01011110, CÅ1Swap
swap a
mov a, #72h
swap a
; a Å 27h
Bit Logic Operations
Some logic operations can be used with single bit
operands
operands
CLR C
CLR bit
CPL C
CPL bit
CPL bit
SETB C
Tabel pencabangan program
Mnemonic Keterangan
AACALL addr11 Jalankan subrutin di addr11 LCALL add 16 Jalankan subrutin di addr16 RET Kembali dari subrutin RETI Kembali dari service interupsi AJMP addr11 Lompat kealamat addr11 SJMP add 16 Lompat kealamat addr16 JMP @A + DPTR Lompat kealamat A+DPTR JZ rel Lompat ke rel jika A= 0 DJNZ rel Lompat ke rel jika A ≠ 0p j CJNE
<dest-byte>,<scr-byte>,rel
Subrutin
Sub rutin adalah potongan program yang terdapat pada memori program yang sering digunakan. Pada
mikrokontroler 89C51 subrutin dapat dipanggil dengan instruksi:
ACALL LCALL
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
Why Subroutines?
•
Subroutines allow us to have "structured"
bl l
assembly 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 program
called 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 to address 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 memoryInfinite Loops
Start: mov C, p3.7 mov p1.6, C sjmp Start
Microcontroller application programs are almost always infinite loops!
Re‐locatable Code
cseg at 8000hMemory specific (NOT Re-locatable)
mov C, p1.6 mov p3.7, C ljmp 8000h end cseg at 8000h Start: mov C, p1.6 Re-locatable Start: mov C, p1.6 mov p3.7, C sjmp Start end
Conditional jumps
Mnemonic
Description
JZ <rel addr>
Jump if a = 0
JNZ <rel addr>
Jump if a != 0
JC <rel addr>
Jump if C = 1
JNC <rel addr>
Jump if C != 1
JB <bit>, <rel addr>
Jump if bit = 1
JNB <bit> < l dd >
J
if bi ! 1
JNB <bit>,<rel addr>
Jump if bit != 1
JBC <bit>, <rel addr>
Jump if bit =1, clear bit
CJNE A, direct, <rel addr>
Compare A and memory,
jump if not equal
More Conditional Jumps
Mnemonic Description
CJNE A, #data <rel addr> Compare A and data, jump if
not equal not 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
Conditional Jumps for Branching
if condition is true goto label condition false else goto next instruction jz led_off setb C mov P1.6, C if a = 0 is true true label sjmp skipover clr C mov P1.6, C mov A, P0 led_off: skipover: send a 0 to LED else send a 1 to LED Pencabangan bersyaratPencabangan 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 label1
CJNE A,P2, Label1 ; Bandikan A dengan P2, jika tidak sama lompat ke label1
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 pencacah Instruksi DJNZ di gunakan untuk counter atau pencacah.
Contoh:
Mulai:
MOV Ro, #2h ; isi R0 dengan 2h
MOV R1,# 20H ; isi R1 dengan 20h
Putar:
MOV R1, #BBh ; isi memori R1 dengan BBh
INC R1 R1 R1+1
INC R1 ; R1=R1+1
DJNZ R0,Putar ; R0=R0-1 ≠0, kembali putar
End ;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.