Upload
ojal
View
49
Download
0
Embed Size (px)
DESCRIPTION
IKI10230 Pengantar Organisasi Komputer Kuliah no. A2: Bahasa Rakitan AVR Data Transfer Instructions. Sumber : 1. AVR AT90S8515 Data Sheet. 2. Materi kuliah CS152, th. 1997, UCB. 7 Maret 2003 Bobby Nazief ([email protected]) Qonita Shahab ([email protected]) - PowerPoint PPT Presentation
Citation preview
1
IKI10230Pengantar Organisasi Komputer
Kuliah no. A2: Bahasa Rakitan AVRData Transfer Instructions
7 Maret 2003
Bobby Nazief ([email protected])Qonita Shahab ([email protected])
bahan kuliah: http://www.cs.ui.ac.id/~iki10230/
Sumber:1. AVR AT90S8515 Data Sheet.2. Materi kuliah CS152, th. 1997, UCB.
2
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
17
Top 10 80x86 Instructions
Rank Instruction Integer Average Percent total executed
1 load 22%
2 conditional branch 20%
3 compare 16%
4 store 12%
5 add 8%
6 and 6%
7 sub 5%
8 move register-register 4%
9 call 1%
10 return 1%
Total 96%
Simple instructions dominate instruction frequency
make common case: simple and fast
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, 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
• Akses langsung ke register di PC kita?
4
Arsitektur AVR AT90S8515
5
AVR Registers (1/3)
° Register AVR disebut “general purpose”• Semua register tersambung langsung ke ALU dua
register dapat diakses dengan satu instruksi dalam satu clock cycle
• Semua register seragam sebagai variabel operand
• Data akses dari dan ke memori dilakukan melalui register dengan 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 byte)
• Terdapat 32 Register
• Konvensi penamaan: R0 …. R31 (supaya mudah di-ingat/ kode)
6
AVR Registers (2/3)
PC
SP
7
AVR Registers (3/3)
“pointer registers”
•addressing 16 bit untuk menunjuk ke lokasi di SRAM (X,Y,Z) atau di program memory (Z)
8
Set Instruksi AVR° 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
OP d
416
OP d
416
r
9
OP Rr/Rd
2031
16 LSBs
P
5
n
10
OP
16
q
5
n
10
OP
16
k
11
OP
16
I
II
III
IV
V
VI
9
Set Instruksi AVR: Rangkuman
10
Contoh Program
AVR Assembly: ;asumsi register Z menunjuk ke var. i;register Y, menunjuk ke var. j
----
ld R1, Z ; R1 berisi var. ild R2, Y ; R2 berisi var. Ycpi i, 0 ; compare i dengan 0breq TEST ; if Z flag set then branch
TESTadd R1,R2 ; i = i + jjmp EXIT ; unconditional jump; skip
TEST: ldi R1, 50 ; i = 50
EXIT: …………
11
Instruksi: Data Transfer
12
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”)
13
Effective Address pada Instruksi AVR
° Tanpa Effective Address:
Register:MOV Rd, Rr ; Rd Rr
Immediate:LDI Rd, K8 ; Rd K8, 16 <= d <= 31
° Dengan Effective Address:
Absolute/Direct:LDS Rd, k ; Rd M[k]
Indirect:LD Rd, X ; Rd M[X]
LD Rd, X+ ; Rd M[X], X X + 1
LD Rd, -X ; X X – 1, Rd M[X]
Index/Indirect with DisplacementLDD Rd, Y+q6 ; Rd M[Y + q6]
STD Y+q6, Rr ; M[Y + q6] Rr
14
Data Transfer: Memory to Register
° 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”.
15
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)
16
Example: Load Indirect
LD R1, X
178
R27
16 bit pointer
R26
X-register 178
Alamat memori
R1
1200
Instruksi ini akan mengambil pointer pada X-register dan load isi dari memori yang ditunjuk oleh pointer tersebut
17
Data Transfer: Register to Memory
° Kita ingin menyimpan nilai dari register ke memori: instruksi Store
° Instruksi Store identik dengan sintaks instruksi Load
° Nama Instruksi AVR:
• st (singkatan Store), dengan argumen pertama pointer register (X, Y, Z) dan argumen kedua register (data) yang akan disimpan (Rr)
st X, R1 ; (X) = Rr
Contoh di atas diasumsikan data berada pada R1, dan lokasi memori yang akan disimpan ditunjuk oleh pointer register X
18
Example: Store Indirect
st X, R1 ; (X) = R1
299
R27
16 bit pointer
R26
X-register 299
Alamat memori
R1
1900
Instruksi ini akan mengambil pointer pada X-register dan store nilaiR1 ke lokasi memori yang ditunjuk oleh pointer tersebut
19
Load Immediates ° “Immediates” adalah konstan (bilangan)
• Lihat definisi: Hamacher (bab 2.4: Addressing modes)
° Penggunaan konstan sangat diperlukan dalam penulisan program
• Misalkan inisialisasi variabel dengan nilai konstan 0;
° Diperlukan instruksi khusus untuk konstan tersebut:
• ldi (Load Immediates) mengisi register dengan suatu konstan:
ldi Rd, K ; AVR: Rd = K• Load konstan “K” (0 s/d 255) ke register Rd
• Contoh:
ldi R16, 25 ; load R16 dengan bil. desimal 25
20
Contoh Program Load - Storeldi R16,1 ;memasukkan angka 1 ke dalam R16
st X,R16 ;menyimpan angka tsb ke dalam memori yg ;ditunjuk oleh X
clr R16 ;hapus isi R16
ld R16,X ;mengembalikan isi R16 dengan mengambilnya ;dari memori yg ditunjuk oleh X
21
Load Program Memory (1/2)° Load Program Memory (LPM) diperlukan untuk
mengakses data yang dialokasikan di awal program (dengan directive .DB)
° Misalnya: menyimpan sebuah string untuk kemudian diakses dalam eksekusi program
° Pengaksesan data tersebut: ‘ditunjuk’ oleh pointer, yaitu register X, Y, Z
° Tetapi fungsi LPM hanya mengambil data yang ditunjuk oleh register Z, langkah-langkahnya:
• program ‘menunjuk’ data tersebut dengan menggunakan register Z
• LPM mengambil data itu dan meletakkannya di R0
• program membaca isi R0 berisi data tersebut
22
Load Program Memory (2/2)
LDI ZH,high(DATA*2)
LDI ZL,low(DATA*2)
LPM ;data yg ditunjuk oleh Z disimpan di R0
;R0 sekarang berisi byte pertama dari DATA
ADIW ZL,1 ;melangkah 1 word ke address berikut
LPM ;data yg ditunjuk oleh Z disimpan di R0
;R0 sekarang berisi byte kedua dari DATA
;ADIW dst sebanyak jumlah byte DATA
• Asumsi DATA berisi angka 100
• Bisakah hal di bawah ini dilakukan?:
LDI ZH,high(100)
LDI ZL,low(100)
;Z menunjuk ke memori ;yang berisi data
23
Contoh Program LPM (1/3)MYCODE: .DB "AB“ ;data berisi string “AB” = 2 bytes
rjmp main
main:
ldi ZH,high(MYCODE*2)
ldi ZL,low(MYCODE*2)
lpm ;memindah byte pertama data ke R0
mov R16,R0 ;simpan ke R16, maka isi R16 adalah 0x41, yaitu ;nilai ASCII dari huruf A (65)
adiw ZL,1 ;increment ke byte berikutnya
lpm ;memindah byte kedua data ke R0
mov R17,R0 ;simpan ke R17, maka isi R17 adalah 0x42, yaitu ;nilai ASCII dari huruf B (66)
;Z menunjuk ke memori ;yang berisi data
24
Contoh Program LPM (2/3)MYCODE: .DB 10, 20 ;data berisi 2 bytes, tiap bytes
;berisi angka (max: 8 bit = 255)
rjmp main
main:
ldi ZH,high(MYCODE*2)
ldi ZL,low(MYCODE*2)
lpm ;memindah byte pertama data ke R0
mov R16,R0 ;simpan ke R16, maka isi R16 adalah 0x0A, yaitu ;nilai hex dari angka 10
adiw ZL,1 ;increment ke byte berikutnya
lpm ;memindah byte kedua data ke R0
mov R17,R0 ;simpan ke R17, maka isi R17 adalah 0x14, yaitu ;nilai hex dari angka 20
;Z menunjuk ke memori ;yang berisi data
25
Contoh Program LPM (3/3)° Jika register X yang digunakan
ldi XH,high(MYCODE*2)
ldi XL,low(MYCODE*2)
mov ZH,XH
mov ZL,XL
lpm
mov R16,R0
;X menunjuk ke memori ;yang berisi data
;data harus di-copy ke Z;supaya bisa di-load
• Jika data dalam .DB jumlah byte-nya tidak genap, apa yang terjadi? (hint: memory addressing)
• Mengapa harus dilakukan hal di bawah ini? (hint: word)
LDI ZH,high(DATA*2)
LDI ZL,low(DATA*2)
26
Referensi° AVR Assembler User Guide
° http://www.avr-asm-tutorial.net
° AVR AT90S8515 Data Sheets