Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

1 IKI10230 Pengantar Organisasi Komputer Kuliah no. A2: Bahasa Rakitan AVR Data Transfer Instructions 7 Maret 2003 Bobby Nazief Qonita.

Presentasi serupa


Presentasi berjudul: "1 IKI10230 Pengantar Organisasi Komputer Kuliah no. A2: Bahasa Rakitan AVR Data Transfer Instructions 7 Maret 2003 Bobby Nazief Qonita."— Transcript presentasi:

1 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. A2: Bahasa Rakitan AVR Data Transfer Instructions 7 Maret 2003 Bobby Nazief Qonita Shahab bahan kuliah: Sumber: 1. AVR AT90S8515 Data Sheet. 2. Materi kuliah CS152, th. 1997, UCB.

2 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 make common case: simple and fast

3 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 4 Arsitektur AVR AT90S8515

5 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 6 AVR Registers (2/3) PC SP

7 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 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 OPd 4 16 OP d 4 16 r 9 OPRr/Rd LSBs P 5 n 10 OP 16 q 5 n 10 OP 16 k 11 OP 16 I II III IV V VI

9 9 Set Instruksi AVR: Rangkuman

10 10 Contoh Program AVR Assembly: ;asumsi register Z menunjuk ke var. i ;register Y, menunjuk ke var. j ---- ld R1, Z ; R1 berisi var. i ld R2, Y ; R2 berisi var. Y cpi i, 0 ; compare i dengan 0 breq TEST ; if Z flag set then branch TEST add R1,R2 ; i = i + j jmpEXIT ; unconditional jump; skip TEST:ldi R1, 50; i = 50 EXIT: …………

11 11 Instruksi: Data Transfer

12 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 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 Displacement LDD Rd, Y+q6; Rd  M[Y + q6] STD Y+q6, Rr ; M[Y + q6]  Rr

14 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 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 16 Example: Load Indirect LD R1, X 178 R27 16 bit pointer R26 X-register 178 Alamat memori R Instruksi ini akan mengambil pointer pada X-register dan load isi dari memori yang ditunjuk oleh pointer tersebut

17 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 18 Example: Store Indirect st X, R1 ; (X) = R1 299 R27 16 bit pointer R26 X-register 299 Alamat memori R Instruksi ini akan mengambil pointer pada X-register dan store nilai R1 ke lokasi memori yang ditunjuk oleh pointer tersebut

19 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 20 Contoh Program Load - Store ldi R16,1;memasukkan angka 1 ke dalam R16 stX,R16;menyimpan angka tsb ke dalam memori yg ;ditunjuk oleh X clrR16;hapus isi R16 ldR16,X;mengembalikan isi R16 dengan mengambilnya ;dari memori yg ditunjuk oleh X

21 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 22 Load Program Memory (2/2) LDIZH,high(DATA*2) LDIZL,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 23 Contoh Program LPM (1/3) MYCODE:.DB "AB“;data berisi string “AB” = 2 bytes rjmp main main: ldi ZH,high(MYCODE*2) ldiZL,low(MYCODE*2) lpm;memindah byte pertama data ke R0 movR16,R0;simpan ke R16, maka isi R16 adalah 0x41, yaitu ;nilai ASCII dari huruf A (65) adiwZL,1;increment ke byte berikutnya lpm;memindah byte kedua data ke R0 movR17,R0;simpan ke R17, maka isi R17 adalah 0x42, yaitu ;nilai ASCII dari huruf B (66) ;Z menunjuk ke memori ;yang berisi data

24 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) ldiZL,low(MYCODE*2) lpm;memindah byte pertama data ke R0 movR16,R0;simpan ke R16, maka isi R16 adalah 0x0A, yaitu ;nilai hex dari angka 10 adiwZL,1;increment ke byte berikutnya lpm;memindah byte kedua data ke R0 movR17,R0;simpan ke R17, maka isi R17 adalah 0x14, yaitu ;nilai hex dari angka 20 ;Z menunjuk ke memori ;yang berisi data

25 25 Contoh Program LPM (3/3) °Jika register X yang digunakan ldi XH,high(MYCODE*2) ldi XL,low(MYCODE*2) movZH,XH movZL,XL lpm movR16,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 26 Referensi °AVR Assembler User Guide °http://www.avr-asm-tutorial.nethttp://www.avr-asm-tutorial.net °AVR AT90S8515 Data Sheets


Download ppt "1 IKI10230 Pengantar Organisasi Komputer Kuliah no. A2: Bahasa Rakitan AVR Data Transfer Instructions 7 Maret 2003 Bobby Nazief Qonita."

Presentasi serupa


Iklan oleh Google