1 / 11

IKI10230 Pengantar Organisasi Komputer Kuliah no. A5: Bahasa Rakitan AVR Stacks & SubRoutine Calls

IKI10230 Pengantar Organisasi Komputer Kuliah no. A5: Bahasa Rakitan AVR Stacks & SubRoutine Calls. Sumber : 1. AVR AT90S8515 Data Sheet. 2. Materi kuliah CS152, th. 1997, UCB. 28 Maret 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id)

Télécharger la présentation

IKI10230 Pengantar Organisasi Komputer Kuliah no. A5: Bahasa Rakitan AVR Stacks & SubRoutine Calls

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. A5: Bahasa Rakitan AVRStacks & SubRoutine Calls Sumber:1. AVR AT90S8515 Data Sheet.2. Materi kuliah CS152, th. 1997, UCB. 28 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. Instruksi: Stacks & Subroutine Calls

  3. Apakah Stacks? • ‘Tumpukan balok-balok kayu’ • PUSH: ‘menambah satu balok pada tumpukan paling atas’ • POP: ‘mengambil balok yang paling atas’

  4. Stack AVR • Stack ditempatkan di memori data (SRAM) • Top-of-stack ditunjuk oleh Stack Pointer (SP), yang berukuran 16 bit dan terletak di ruang I/O (hanya dapat diakses dengan menggunakan instruksi I/O) • Sebelum digunakan, SP harus diinisialisasi terlebih dahulu dengan cara: .equ SPH = $3E .equ SPL = $3D .equ RAMEND = $25F ldi r16,low(RAMEND) outSPL,r16 ldi r16,high(RAMEND) outSPH,r16; SP points to RAMEND

  5. Stack AVR - Kegunaan • PUSH-POP: Jika tidak ada lagi tempat penyimpanan (register, memori) pada saat ada data baru yang perlu disimpan • Register sudah penuh • Tak ada tempat lain utk menyimpan data • Data tersebut akan digunakan lagi di bagian lain program • Jika masih ada tempat untuk menyimpan data, tidak perlu menggunakan PUSH/POP, karena akan memboroskan processor time • CALL-RET: Jika kita menggunakan subroutine • Setelah eksekusi subroutine, perlu kembali ke ‘si pemanggil’

  6. Push/Pop, Call/Ret • Push Rx • M[SP]  Rx • SP  SP – 1 • Rcall Addr • Push PChi • Push PClo • PC  Addr • Pop Rx • SP  SP + 1 • Rx  M[SP] • Ret • Pop PClo • Pop PChi • Contoh Segmen Program: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 … push r17 ; save r17 push XL ; save X push XH rcall MySubRoutine pop XH pop XL ; restore X pop r17 ; restore r16 … LIFO

  7. PUSH/POP • Misalnya ada suatu data hasil kalkulasi berulang, di mana sudah tidak ada register yang dapat menyimpannya • Cara kerja: • Data temporary yang berada dalam register di-PUSH ke dalam stack • Register ybs dapat digunakan utk menyimpan data lain • Jika data temporary diperlukan, dapat dilakukan POP untuk mengembalikan data ke register • Contoh: F = ((A*B) + C) * D • Hasil (A*B) ada di R16, nilai D ada di R17 • Isi R17 di-PUSH ke stack • Load isi R17 dengan C • Jumlahkan • Kembalikan (POP) nilai D ke R17 • Kalikan

  8. 2 5 ... ... ... Contoh Program PUSH/POP ldi TEMP,5 ;isi TEMP = 5 push TEMP ;isi stack paling atas = 5 ldi TEMP,2 ;isi TEMP = 2 push TEMP ;isi stack paling atas = 2 ldi TEMP,1 ;isi TEMP = 1 pop TEMP ;kembalikan nilai 2 ke TEMP pop TEMP ;kembalikan nilai 5 ke TEMP

  9. CALL/RET • Misalnya ada suatu loop yang perlu dikerjakan, lalu setelah loop diperlukan suatu data hasil dari pekerjaan dalam loop • Cara kerja: • Pada saat subroutine dipanggil (rcall), maka nilai program counter disimpan di dalam stack • Subroutine dikerjakan • Setelah selesai subroutine, untuk kembali ke lokasi tadi dilakuan pop nilai program counter dari stack • Bagaimana jika stack pointer tidak diinisialisasi terlebih dahulu? • Pointer menunjuk ke mana? • Bagaimana jika ada rcall dan ret?

  10. Contoh Program Call/Ret jobs: ldi TEMP,5 ;angka 5 untuk disimpan ldi COUNTER,5 ;jumlah lokasi ldi HASIL,0xA0 ;lokasi awal rcall loop ;melakukan pekerjaan ldi XL,0xB0 st X,HASIL ;menyimpan lokasi terakhir rjmp finish ;kemudian selesai loop: ;memasukkan angka 5 ke mov ZL,HASIL ;lokasi 0xA0 s.d. 0xA5 st Z,TEMP dec COUNTER inc HASIL cpi COUNTER,0 brne loop ret finish: rjmp finish ;selesai

  11. Referensi • AVR Assembler User Guide • http://www.avr-asm-tutorial.net

More Related