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

21
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

description

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

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

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

1

IKI10230Pengantar Organisasi Komputer

Kuliah no. A8: Bahasa Rakitan AVRLatihan

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

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

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

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

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

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

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

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

5

Data Transfer, Arithmetics, Branch

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

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

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

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?

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

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

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

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

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

10

Stacks, Subroutines

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

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

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

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

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

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

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

14

I/O, Interrupts

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

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

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

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

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

17

Miscellaneous

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

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

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

19

Delay° Berapakah lama delay dalam potongan program di

bawah ini?

DELAY:ldi R18, 255

LOOP3:ldi R19, 255

LOOP4:dec R19brne LOOP4

dec R18brne LOOP3

256 * 256 = 65536.1 instruksi = 0.25 microsecond (utk 1 MHz)65536/4 = 16384 microsecond = 16.384 milisecond

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

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.

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

21

Selamat belajar