1 / 21

IKI10230 Pengantar Organisasi Komputer Kuliah no. A8: Bahasa Rakitan AVR Latihan

IKI10230 Pengantar Organisasi Komputer Kuliah no. A8: Bahasa Rakitan AVR Latihan. Sumber : 1. AVR AT90S8515 Data Sheet. 2. Materi kuliah COMP1300/2300 UQ. 23 Mei 2003 Bobby Nazief (nazief@cs.ui.ac.id) Qonita Shahab (niet@cs.ui.ac.id) bahan kuliah: http://www.cs.ui.ac.id/~iki10230/.

orinda
Download Presentation

IKI10230 Pengantar Organisasi Komputer Kuliah no. A8: Bahasa Rakitan AVR Latihan

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. A8: Bahasa Rakitan AVRLatihan Sumber:1. AVR AT90S8515 Data Sheet.2. Materi kuliah COMP1300/2300 UQ 23 Mei 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. Warming Up (1/3) • Tuliskan instruksi AVR yang melakukan hal-hal di bawah ini: • increment register 5 • inc r5 • load nilai 24 ke dalam register 17 • ldi r17, 24 • atau • ldi r17, $18 (notasi hexadecimal) • logical AND register 23 dan register 5, kemudian menyimpan hasilnya di register 5 • and r5, r23

  3. Warming Up (2/3) • set bit-bit dalam register 18 menjadi 1 semua • ldi r18, 255 • atau • ser r18 • set bit-bit dalam register 18 menjadi 0 semua • ldi r18,0 • atau • clr r18 • negasikan register 10 • neg r10

  4. Warming Up (3/3) • invert isi register 10 • com r10 • pindahkan (copy) isi register 3 ke register 4 • mov r4, r3 • set direction utk IO pada port B menjadi output • ser r16 • out DDRB, r16 • baca isi IO port C untuk disimpan di register 20 • in r20, PINC • tulis isi register 21 ke IO port B • out PORTB, r21

  5. Data Transfer, Arithmetics, Branch

  6. Soal 1 • Jika isi register 17 lebih besar daripada 75 (decimal), tukarlah isi register 3 & register 4 (jika sebaliknya, do nothing) .def temp r16 ldi temp, 75 cp temp, r17 brlt swap rjmp continue ; otherwise, do nothing swap: mov temp, r3 mov r3, r4 mov r4, temp continue: … ; program would continue here

  7. Soal 1: contoh jawaban lain .def temp r16 cpi r17,75 brlt continue ; use brlo for unsigned breq continue ; if we get here, r17 > 75 ; code to swap r3 and r4 follows mov temp, r3 mov r3, r4 mov r4, temp continue: … ;program would continue here What about brge?

  8. Soal 2 • Tentukan apakah nilai yang disimpan dalam memory dengan alamat 100 adalah nilai ASCII untuk huruf A (65) .def temp r16 ldi XH, high(100) ; could say clr XH ldi XL, low(100) ; could say ldi XL, 100 ld temp, X ; read memory cpi temp, 65 ; compare with 65 breq matchesA ; equal – go somewhere matchesA: ;nyatakan bahwa memang benar isinya huruf A

  9. Soal 3 • Clear (set menjadi 0) isi memory dengan alamat 128 s.d. 191. .def temp r16 ldi XH, high(128) ; could say clr XH ldi XL, low(128) ; could say ldi XL, 128 clr temp ; store 0 in temp loop: st X+, temp ; write temp(0) out ; now need to check if loop is finished cpi XL, 192 brne loop … ; continue here when finished

  10. Stacks, Subroutines

  11. Soal 1 (a) • Buatlah sebuah procedure (subroutine) yg melakukan pertukaran isi register r3 dan r4. Tidak boleh ada isi register apapun yg diubah-ubah, kecuali r5. Tulis kodenya dengan menunjukkan pemanggilan subroutine-nya. main: rcall swap ;use push & pop of stack swap: push r5 ;only r5 used, no others mov r5,r3 mov r3,r4 mov r4,r5 pop r5 ret ;it’s a procedure/subroutine, then return

  12. Soal 1 (b) • Bagaimana jika benar-benar tidak ada register lain yang boleh digunakan (r5 juga tidak boleh)? main: rcall swap ;use push & pop of stack swap: push r3 ; stores r3 value on stack mov r3,r4 ; puts r4 value into r3 pop r4 ; puts original r3 val into r4 ret ;it’s a procedure/subroutine, then return

  13. Soal 1 (b): contoh jawaban lain • Untuk menukarkan isi dari dua register, kita dapat menggunakan 3 kali instruksi eor (exclusive OR). main: rcall swap ;use push & pop of stack swap: eor r3,r4 eor r4,r3 eor r3,r4 ret ;it’s a procedure/subroutine, then return

  14. I/O, Interrupts

  15. Soal 1 (a) • Buatlah sebuah ISR (interrupt service routine) yang membaca isi PORTB dan mengeluarkan nilai PORTB itu ke PORTC. Interrupt ini bekerja pada INT1. .def temp = r16 EXT_INT1: in temp,PINB ;read the data out PORTC,temp ;output the data reti ;return from int

  16. Soal 1 (b) • Bagaimana jika dalam ISR ingin juga dilakukan sebuah operasi arithmetic yang kemungkinan menghasilkan Carry atau Zero flag? Hint: di dalam status register juga ada interrupt flag! .def temp = r16 EXT_INT1: in temp,SREG ;get the status reg. push temp ;save the sreg value in temp,PINB ;read port B ... ; ...do some arithmetics operation out PORTC,temp ;output the data pop temp ;retrieve sreg value out SREG,temp ;restore the sreg reti ;return from interrupt

  17. Miscellaneous

  18. Macro • Buatlah sebuah macro yg menukar isi r3 dan r4. • .macro swap34 • push r3 ; Save old r3 • mov r3, r4 ; Copy old r4 to r3 • pop r4 ; Old r3 to r4 • .endmacro • Bagaimana pemanggilannya di dalam program? ldi r16, $33 mov r3, r16 ; Give distinct value ldi r16, $44 mov r4, r16 ; Similarly r4 swap34 ; Call the macro

  19. Delay • Berapakah lama delay dalam potongan program di bawah ini? DELAY: ldi R18, 255 LOOP3: ldi R19, 255 LOOP4: dec R19 brne LOOP4 dec R18 brne LOOP3 256 * 256 = 65536. 1 instruksi = 0.25 microsecond (utk 1 MHz) 65536/4 = 16384 microsecond = 16.384 milisecond

  20. Persiapan UAS: Tugas 5 • Buatlah sebuah procedure (big subroutine) yang menghitung powers of 2 (pangkat 2) secara rekursif. Prosedur ini dapat menerima argumen di r0 (nilai 0 s.d. 7) dan memberikan jawaban (2*r0) di register r1. • Buat versi loop dari pertanyaan di atas. • Buatlah sebuah procedure yang mengkalkulasi n’th Fibonacci fib(n) secara rekursif, dimana fib(n) = fib(n-1) + fib(n-2) dan fib(1) = fib(2) = 1 (urutannya: 1,1,2,3,5,8,13,21,34,…). Argumen n diakses di register r0 dan hasilnya disimpan di register r1. Asumsi: hasil kalkulasi maksimal tidak melebihi 255.

  21. Selamat belajar 

More Related