IKI20210 Pengantar Organisasi Komputer Kuliah Minggu ke-3: Bahasa Rakitan AVR diadaptasikan dari materi kuliah CS61C/2000 & CS152/1997 2000/1997 UCB
18 September 2002 Bobby Nazief (
[email protected]) Johny Moningka (
[email protected])
bahan kuliah: http://www.cs.ui.ac.id/~iki20210/ 1
Agenda ° Review ° Why RISC (Atmel AVR)? ° Register ° Contoh Instruksi AVR: Arithmatika dan Data Transfer
°Resources: °Harmarcher : Computer Organizations (bab 2.3) °Atmel AVR homepage: http://www.atmel.com (products, AVR 8-bit RISC)
2
1
Why RISC? ° Reduced Instruction Set Computing (RISC) ° Hanya terbatas jenis/jumlah instruksi untuk operasi dasar • Arithmetic, load/store, branches and jumps • Instruksi umum dan sering digunakan: sederhana dan cepat Top 10 80x86 Instructions
Rank 1
In s t r u c t i o n load
Integer Average Percent total executed 22%
2
conditional branch
20%
3 4
compare store
16% 12%
5
add
8%
6
and
6%
7 8
sub move register- register
5% 4%
9
call
1%
10
return Total
1% 96%
Simple instructions dominate instruction frequency
make common case: simple and fast
17
3
Why AVR 8-bit RISC ° RISC: kinerja (performance) komputer meningkat • Pilihan teknologi rancangan prosesor modern (PowerPC, Sun Sparc, MIPS dll) • Fast with reduced complexity!
° Atmel AVR 8-bit RISC • Sederhana (bentuk minimalis dari RISC): mudah dipelajari ! • Target operasi: microcontroller (embedded systems) -
Berbagai aplikasi dan peralatan elektronis (ponsel, home appliances, mobil, Amulex 108 dll) Controller untuk pabrik, proses kimia, mesin dll. “Vast opportunity”: karir, wira-usaha dll. (more embedded computers than PCs!!!)
° Why not X86 (Intel, mikroprosesor paling populer) • Terlalu rumit (complex): operasi beragam dan sangat banyak variasinya
4
2
Review: Perspectives HLL ° Perintah HLL: c = a + b;
Stack
Accumulator
Register (reg-mem)
Register (load-store)
Push A
Load A
Load A,R1
Load A,R1
Push B
Add B
Add B,R1
Load B,R2
Add
Store C
Store R1,C
Add R1,R2,R3
Pop C
Store R3,C
HLL: a, b, dan c adalah variabel => kompilasi ketiga variabel berada di memori Assembly: A, B, dan C merupakan address operand 5
Registers: variabel operand ° Apa yang disebut dengan register? • Register: lokasi memori (kecil) pada prosesor (hardware) • Dapat menyimpan 1 word data
° Register adalah lokasi data operand di CPU • Sebagai variabel: dapat menyimpan data dan di manipulasi (operasi tambah, kurang dsb) • Sebagai variabel register tidak mempunyai tipe data (bandingkan dengan HLL) • Operasi (mis. Add) yang menentukan nilai data dari register tersebut
6
3
AVR Registers ° Register AVR disebut “general purpose” • Semua register seragam sebagai variabel operand • Data akses dari ke memori dilakukan melalui register instruksi load dan store • Semua register dapat digunakan untuk “load” data dari memori, tempat operasi dilakukan, dan “store” data ke memori
° Karakteristik register AVR: • Menyimpan 1 word adalah 8 bit (1 bytes) • Terdapat 32 Register • Konvensi penamaan: R0 …. R31 (supaya mudah di-ingat/ kode)
7
AVR Register (2/2)
PC SP 8
4
AVR Instruction-Sets ° Bahasa Rakitan: setiap “statement” disebut instruksi, merupakan eksekusi/operasi perintah instruksi mesin • Jadi setiap baris pada bahasa rakitan: berisi 1 (satu) perintah saja (bandingkan dengan HLL!)
° Instruksi dapat dikelompokkan sesuai dengan fungsi: -
Transfer Data (31) Aritmatika & Logika (22) Bit & Bit-Test (31) Pencabangan (Branch) (34)
° Instruksi diusahakan reguler (mengikuti format yang baku): hanya 6 jenis format 9
Arsitektur Set Instruksi Registers
° Kategori Instruksi •
Transfer Data (31)
•
Aritmatika & Logika (22)
•
Bit & Bit-Test (31)
•
Pencabangan (Branch) (34)
° Format Instruksi 16 16
II
4 d
9 OP
16
III
4 r
10 OP
d 5
n
31
IV
PC SP
OP
I
R0 - R31
OP 16 LSBs
16
10
P
OP
20 Rr/Rd
16 11 OP
5 n
q
V VI
k 10
5
Set Instruksi AVR
11
AVR: Assembly Languages ° Komputer (rangkaian dijital) hanya mengerti instruksi mesin ° Assembly code: representasi tekstual (mudah dibaca oleh manusia) dari instruksi mesin • Setiap instruksi mesin (instruction sets) terdapat korespondensi assembly code • Kode tersebut: simbol dari operasi instruksi mesin • Bahasa rakitan (assembly language): cara pemrograman menggunakan assembly code (terdapat banyak bantuan untuk memudahkan penulisan program).
° Assembler: sebuah program yang menerjemahkan assembly code ke instruksi mesin.
12
6
Example: AVR Arithmetic Instructions ° ADDITION (Penambahan) • Contoh: ADD • Instruksi perhitungan format 2 operand, dengan hasil (destinations) operasi disimpan pada argumen PERTAMA
Add Rd, Rr Tambahkan isi register Rd dan Rr, simpan hasilnya pada isi register Rd The arguments can ONLY be registers, no values, no constants
° SUBTRACTION (Pengurangan) • Contoh: SUB • Instruksi pengurangan format 2 operand, dengan hasil (destinations) operasi disimpan pada argumen PERTAMA
Sub Rd, Rr
13
Example: AVR Arithmetic Instructions ° Bagaimana jika instruksi HLL: a = b + c + d – e;
° Pecahkan dalam step instruksi dan gunakan register sementara (temporer) • .. Lakukan load isi register R1, R2, R3, R4 dengan nilai/lokasi memori b, c, d, e Add R1, R2
; R1 => temp = b + c
Add R1, R3
; R1 => temp = temp + d
Sub R1, R4
; R1 => a = temp – e
• Hasil perhitungan (nilai a) berada pada R1, store R1 ke lokasi a. • Tanda: ; (akhir dari baris instruksi, sisanya diabaikan sbg. ket.) 14
7
Assembly Operands: Memory ° Variabel HLL disimpan pada register; Bagaimana struktur data yang besar, mis. array? ° Remember: memory (salah satu komponen utama komputer) dapat menyimpan data yang besar ° Tapi instruksi arithmetik AVR hanya beroperasi pada register (sebagai operand), tidak dapat langsung pada memory ° Instruksi Data Transfer memindahkan/transfer data antara register dan memory: • Memory ke register (sering disebut “load”) • Register ke memory (sering disebut “store”)
15
Anatomy: 5 components of any Computer Registers are in the datapath of the processor; if operands are in memory, we must transfer Personal Computer
them to the processor to operate on them, And then transfer back to memory when done
Computer Processor
Memory
Input
Control (“brain”)
Datapath Registers
Devices
Store
Load
Output
These are “data transfer” instructions
16
8
Data Transfer: Memory to Reg ° Untuk melakukan transfer satu word data pada AVR, kita harus menentukan dua hal, yakni: • Register: tentukan register yang mana (dari R0 s/d R31) • Alamat Memori (memory address) => lokasi di memori
° Memori: • Dapat dilihat sebagai array satu dimensi, dan kita mendapatkan lokasi memori dengan melakukan indexing pada array tersebut => dikenal istilah pointer • Dengan model pointer (indexing) maka kita dapat mengakses lokasi tersebut berdasarkan posisi pointer tersebut • Misalkan menaikkan atau menurunkan pointer tersebut • Sering disebut “indirect”. 17
Example: Load Instruction ° AVR instruksi Load Indirect: 1
2,3
• dimana (1) nama operasi (mis. LD) (2) register yang akan menerima data (mis. R1) (3) register set menyimpan pointer ke memori (X, Y, Z)
° Contoh: • LD R1, X (load satu word ke R1 dari lokasi memori yang ditunjuk oleh register X)
18
9
AVR General Purpose Registers
PC SP 19
Example: Load Indirect LD R1, X X-register
R27
178
178
16 bit pointer
R26
1200 R1
Alamat memori Instruksi ini akan mengambil pointer pada X-register dan load nilai dari memori yang ditunjuk oleh pointer tersebut 20
10
Review: Group Question °
°
Pilih benar atau salah? 1.
1 Kbytes = 1000 bytes = 8000 bits.
2.
100111 (binary) = 93 (hex) (hex => hexadecimal, merupakan representasi basis 16)
3.
1 word AVR adalah 8 bytes
4.
AVR: ADD R7, R9 menyebabkan isi R9 tidak berubah
Pilih pernyataan yang benar: A: (1) benar, sisanya salah; B: (2) benar, sisanya salah; C: (3) benar, sisanya salah; D: (4) benar, sisanya salah; E: Tidak ada yang benar
°
Buat Grup dan Voting.
21
Ringkasan ° AVR 8-bit mikroprosesor • Sederhana: struktur dan instruksi mesin • 32 Register: R0 .. R31 • Menganut konsep mesin “load & store”
° Register: bagian “blok memori kecil” prosesor untuk manipulasi data/instruksi • Menyimpan data operand: analogi variabel HLL • AVR: lebar register 8 bit, dikenal 3 pasangan register teratas: X, Y, Z (bertindak sebagai pointer)
22
11