Set-Intruksi, Teknik Pemrograman & compiler
Muhammad Aviv Burhanudin
13230004@bsi.ac.id
ABSTRACT
Didalam resume ini akan membahas set-intruksi, teknik pemrograman dan com–
piler pada arsitektur RISC AVR 8-bit dan khususnya untuk mikrokontroler ATtiny85.
1. Pengantar
Teknologi mikrokontroler telah berkem–
bang pesat dalam beberapa dekade terakhir, dan
salah satu contoh yang paling populer adalah
mikrokontroler ATtiny85 yang menggunakan
arsitektur RISC AVR 8−bit. Dalam resume ini,
kita akan membahas secara lebih lanjut tentang
set-intruksi, teknik pemrograman, dan compiler
yang digunakan pada arsitektur RISC AVR
8−bit,
   khususnya    pada    mikrokontroler
ATtiny85.
Dengan memahami konsep-konsep ini, kita
dapat lebih mudah mengembangkan aplikasi yang
efektif    dan    efisien    pada    mikrokontroler
ATtiny85.
Oleh karena itu, resume ini bertujuan untuk
memberikan    gambaran    umum    tentang    set-
intruksi, teknik pemrograman, dan compiler pada
arsitektur RISC AVR 8−bit dan mikrokontroler
ATtiny85, sehingga dapat membantu para
pengembang dan programmer dalam mengem–
bangkan aplikasi yang lebih baik.
2. Instruction Set
Secara singkat Instruction Set atau Set-
Instruksi adalah kumpulan instruksi yang dapat
dijalankan oleh prosesor, terdapat juga sebuah
Instruction Set Architecture (ISA) yaitu arsitek–
tur RISC AVR 8−bit yang mendefinisikan
bagaimana instruksi-instruksi tersebut dijalankan.
Pada Instruction Set terdapat dua jenis dalam
desain instruksi set, yaitu RISC    (Reduced
Instruction Set Computers) dan CISC (Complex
Instruction Set Computers).
2.1. RISC
RISC didasarkan pada premis bahwa kin–
erja yang lebih tinggi dapat dicapai jika setiap
instruksi memenuhi satu kata dalam memori, dan
semua operand yang diperlukan untuk men–
jalankan operasi aritmatika atau logika yang
ditentukan oleh instruksi sudah ada di register
prosesor. Pendekatan ini memungkinkan imple–
mentasi unit pengolahan yang dapat melakukan
operasi yang berbeda dalam mode "pipelined"
untuk mengurangi waktu eksekusi total program.
Batasan bahwa setiap instruksi harus memenuhi
satu kata mengurangi kompleksitas dan jumlah
jenis instruksi yang dapat dimasukkan dalam
instruksi set komputer.
2.2. CISC
CISC menggunakan instruksi yang lebih
kompleks yang dapat memenuhi lebih dari satu
kata dalam memori dan dapat menentukan operasi
yang lebih rumit. Pendekatan ini lebih umum
digunakan sebelum munculnya pendekatan RISC
pada tahun 1970-an. Meskipun penggunaan
instruksi kompleks tidak secara khusus diidenti–
fikasi dengan label tertentu, komputer yang berba–
sis pada ide ini kemudian disebut Complex
Instruction Set Computers.
2.3. Instruction Set pada ATtiny85
Pada ATtiny85 terdapat 5 pengelom–
pokan Set-instruksi yaitu
1     Arithmetic and Logic Instruction
Instruksi instruksi yang terdapat pada
kelompok ini merupakan instruksi
untuk    menghitung    dan    logika,
– 2 –
beberapa contoh instruksi adalah:
ADD, SUB, AND, OR, NEG, INC,
DEC.
2     Branch Instruction
Pada    Instruksi Percabangan    kita
dapat    menggunakan    percabangan
kondisi seperti IF dan ELSE pada
Bahasa tinggat atas seperti C, berikut
beberapa    instruksi    percabangan:
RJMP, IJMF, RCALL, ICALL,
RET, CP, BREQ, BRNE.
3     Bit and Bit-test Instruction
Instruksi-instruksi    ini    digunakan
untuk menseting bit, contohnya men–
set apakah sebuah PORT merupakan
input atau output, berikut beberapa
instruksi: SBI, CBI, LSL, LSR,
SWAP, SEC, CLC, SEI.
4     Data Transfer Instruction
Pada bagian ini terdapat instruksi-
instruksi yang    digunakan    untuk
memindahkan atau menyalin sebuah
value ke tempat yang baru, berikut
beberapa instruksi: MOV, MOVW,
LDI, LD, IN, OUT, PUSH, POP.
5     MCU Control Instruction
Di bagian ini terdapat instruksi yang
digunakan     untuk     mengontrol
mikrokontroler, berikut instruksinya:
NOP, SLEEP, WDR, BREAK.
3. Teknik Pemrograman
Dalam pemrograman mikrokontroler teknik
pemrograman hanyalah 2 yaitu Imperatif dan
OOP (Pemrograman berbasis objek), dalam pem–
rograman mikrokontroler bahasa yang dipakai
adalah C, C++ dan Assemby.
Pada bahasa Assembly kode yang ditulis
untuk suatu mikrokontroler tidaklah kompaatibel
dengan mikrokontroler lain, dan pada bahasa
Assembly dibatasi oleh seberapa banyak instruksi
yang dapat dilakukan.
Pada bahasa C & C++, hal ini juga berlaku
seperti Assembly namun memporting kode ke
mikrokontroler lain    lebih    mudah    dibanding
Assembly.
3.1. Program blink pada Bahasa C
Sebuah program "Hello world" tetapi untuk
mikrokontroler adalah program blink, dimana kita
memperogram mikrokontroler untuk melyalakan
dan mematikan LED yang terhubung pada PB0.
#include <avr/io.h>
#include <util/delay.h>
#define BLINK_DELAY_MS 1000
int main (void)
{
DDRB |= _BV(DDB0);
while(1) {
PORTB |= _BV(PORTB0);
_delay_ms(BLINK_DELAY_MS);
PORTB &= ~_BV(PORTB0);
_delay_ms(BLINK_DELAY_MS);
}
}
3.2. Disassembled Blink
Hasil kompilasi program dapat di konversi
kembali ke bahasa Assembly dengan menggu–
nakan    avr−objdump,    melalui    debugger
avr−gdb, dan bisa melalui godbolt, berikut
ini adalah Bahasa assembly yang berasal dari pro–
gram blink sebelumnya, dengan perintah kompi–
lasi
avr−gcc −Os −mmcu=attiny85
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
main:
sbi 0x17,0
sbi 0x18,0
ldi r18,lo8(199999)
ldi r24,hi8(199999)
ldi r25,hlo8(199999)
1:       subi r18,1
sbci r24,0
sbci r25,0
brne 1b
rjmp .
nop
cbi 0x18,0
ldi r18,lo8(199999)
ldi r24,hi8(199999)
ldi r25,hlo8(199999)
1:       subi r18,1
sbci r24,0
sbci r25,0
brne 1b
rjmp .
nop
rjmp .L2
– 3 –
4. Compiler
Compiler bertugas menkonversi kode sum–
ber suatu bahasa ke bahasa lain, dalam mikrokon–
troler compiler yang sering digunakan dan juga
memiliki komunitas yang baik adalah avr−gcc,
setelah menkompilasi contoh program    blink
sebelumnya maka akan ada file baru yang memi–
liki ekstensi .elf, .elf tidak dapat langsung
digunakan, sebelum dapat di download atau di
upload ke dalam mikrokontroler format diubah
terlebih dahulu ke dalam format intel hex dengan
ekstensi .hex.
Untuk mempermudah pemrograman dapat
menggunakan    avr−libc,    sebuah    standar
library    seperti libc pada komputer namun
dikhususkan untuk mikrokontroler, avr−libc
ini terdapat deklarasi seperti PORTB, DDRB dan
fungsi-fungsi yang berguna untuk menunjang
pemrograman untuk mikrokontroler.
Development tools yang biasa digunakan
untuk mikrokontroler adalah Makefile, compiler,
downloader dan uploader, downloader & uploader
menggunakan program avr−dude.
Agar dapat mendownload kode ke dalam
mikrokontroler, diperlukan mikrokontroler lain
yang bertugas mengirimkan kode ke mikrokontr–
ler tujuan.
4.1. Perintah untuk membuat elf file
MCU        = attiny85
F_CPU       = 8000000UL
CFLAGS      = −Os −mmcu=$(MCU)
avr−gcc −DF_CPU=$(F_CPU)
$(CFLAGS)
−c −o main.o main.c
avr−gcc −mmcu=$(MCU) main.o
−o main.o
References
[1]    Bryce Wiedenbeck CS 31: Chapter 2
Instruction Set Architecture
Swarthmore
College Computer Science Department