1 IKI10230 Pengantar Organisasi Komputer Kuliah no. A8: Bahasa Rakitan AVR Latihan 23 Mei 2003 Bobby Nazief ([email protected]) Qonita Shahab ([email protected]) bahan kuliah: http://www.cs.ui.ac.id/~iki10230/ Sumber : 1. AVR AT90S8515 Data Sheet. 2. Materi kuliah COMP1300/2300 UQ
21
Embed
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 ([email protected]) Qonita Shahab ([email protected]) bahan kuliah: http://www.cs.ui.ac.id/~iki10230/. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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 stackswap:
push r5 ;only r5 used, no othersmov r5,r3mov r3,r4mov r4,r5pop r5ret ;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 stackswap:
push r3 ; stores r3 value on stackmov r3,r4 ; puts r4 value into r3pop r4 ; puts original r3 val into r4ret ;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 stackswap:
eor r3,r4eor r4,r3eor r3,r4ret ;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 dataout PORTC,temp ;output the datareti ;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 valuein temp,PINB ;read port B ... ; ...do some arithmetics operationout PORTC,temp ;output the datapop 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
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.