iki10230 pengantar organisasi komputer kuliah no. a8: bahasa rakitan avr latihan

of 21 /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

Author: orinda

Post on 23-Jan-2016

80 views

Category:

Documents


0 download

Embed Size (px)

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

Pengantar Organisasi KomputerLatihan
*
increment register 5
ldi r17, 24
ldi r17, $18 (notasi hexadecimal)
logical AND register 23 dan register 5, kemudian menyimpan hasilnya di register 5
and r5, r23
ldi r18, 255
ldi r18,0
mov r4, r3
ser r16
baca isi IO port C untuk disimpan di register 20
in r20, PINC
out PORTB, r21
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
swap:
.def temp r16
breq continue
; code to swap r3 and r4 follows
mov temp, r3
mov r3, r4
mov r4, temp
Soal 2
Tentukan apakah nilai yang disimpan dalam memory dengan alamat 100 adalah nilai ASCII untuk huruf A (65)
.def temp r16
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:
*
Soal 3
Clear (set menjadi 0) isi memory dengan alamat 128 s.d. 191.
.def temp r16
ldi XL, low(128) ; could say ldi XL, 128
clr temp ; store 0 in temp
loop:
; now need to check if loop is finished
cpi XL, 192
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:
swap:
mov r5,r3
mov r3,r4
mov r4,r5
pop r5
*
Soal 1 (b)
Bagaimana jika benar-benar tidak ada register lain yang boleh digunakan (r5 juga tidak boleh)?
main:
swap:
pop r4 ; puts original r3 val into r4
ret ;it’s a procedure/subroutine, then return
*
Soal 1 (b): contoh jawaban lain
Untuk menukarkan isi dari dua register, kita dapat menggunakan 3 kali instruksi eor (exclusive OR).
main:
swap:
*
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
reti ;return from int
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
in temp,PINB ;read port B ...
; ...do some arithmetics operation
reti ;return from interrupt
.macro swap34
mov r3, r4 ; Copy old r4 to r3
pop r4 ; Old r3 to r4
.endmacro
ldi r16, $33
ldi r16, $44
swap34 ; Call the macro
DELAY:
65536/4 = 16384 microsecond = 16.384 milisecond
*
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.
*