1 / 26

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

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 (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

ojal
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IKI10230Pengantar Organisasi KomputerKuliah no. A2: Bahasa Rakitan AVRData Transfer Instructions Sumber:1. AVR AT90S8515 Data Sheet.2. Materi kuliah CS152, th. 1997, UCB. 7 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id)Qonita Shahab (niet@cs.ui.ac.id) bahan kuliah: http://www.cs.ui.ac.id/~iki10230/

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

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

  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. 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 jmp 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 Displacement LDD 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. 178 Example: Load Indirect LD R1, X 16 bit pointer 178 X-register R26 R27 1200 R1 Alamat memori 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) = RrContoh di atas diasumsikan data berada pada R1, dan lokasi memori yang akan disimpan ditunjuk oleh pointer register X

  18. 299 Example: Store Indirect st X, R1 ; (X) = R1 16 bit pointer 299 X-register R26 R27 1900 R1 Alamat memori Instruksi ini akan mengambil pointer pada X-register dan store nilai R1 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 - Store ldi 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. ;Z menunjuk ke memori ;yang berisi data 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)

  23. ;Z menunjuk ke memori ;yang berisi data 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 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)

  24. ;Z menunjuk ke memori ;yang berisi data 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 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

  25. ;X menunjuk ke memori ;yang berisi data ;data harus di-copy ke Z ;supaya bisa di-load Contoh Program LPM (3/3) • Jika register X yang digunakan ldi XH,high(MYCODE*2) ldiXL,low(MYCODE*2) mov ZH,XH mov ZL,XL lpm mov R16,R0 • 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

More Related