1 IKI10230 Pengantar Organisasi Komputer Kuliah no. A8: Bahasa Rakitan AVR Latihan 23 Mei 2003 Bobby Nazief Qonita Shahab bahan kuliah: Sumber: 1. AVR AT90S8515 Data Sheet. 2. Materi kuliah COMP1300/2300 UQ
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 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: ldiR18, 255 LOOP3: ldiR19, 255 LOOP4: decR19 brneLOOP4 decR18 brneLOOP3 256 * 256 = instruksi = 0.25 microsecond (utk 1 MHz) 65536/4 = microsecond = 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