26
1 IKI10230 Pengantar Organisasi Komputer Kuliah no. A2: Bahasa Rakitan AVR Data 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.

7 Maret 2003 Bobby Nazief ([email protected]) Qonita Shahab ([email protected])

  • 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

Page 1: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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.

Page 2: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 3: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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?

Page 4: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

4

Arsitektur AVR AT90S8515

Page 5: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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)

Page 6: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

6

AVR Registers (2/3)

PC

SP

Page 7: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

7

AVR Registers (3/3)

“pointer registers”

•addressing 16 bit untuk menunjuk ke lokasi di SRAM (X,Y,Z) atau di program memory (Z)

Page 8: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 9: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

9

Set Instruksi AVR: Rangkuman

Page 10: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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: …………

Page 11: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

11

Instruksi: Data Transfer

Page 12: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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”)

Page 13: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 14: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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”.

Page 15: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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)

Page 16: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 17: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 18: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 19: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 20: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 21: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 22: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 23: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 24: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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

Page 25: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

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)

Page 26: 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

26

Referensi° AVR Assembler User Guide

° http://www.avr-asm-tutorial.net

° AVR AT90S8515 Data Sheets