Bahasa Rakitan AVR Agenda

advertisement
IKI20210
Pengantar Organisasi Komputer
Kuliah Minggu ke-3: Bahasa Rakitan AVR
diadaptasikan dari materi kuliah
CS61C/2000 & CS152/1997  2000/1997 UCB
18 September 2002
Bobby Nazief ([email protected])
Johny Moningka ([email protected])
bahan kuliah: http://www.cs.ui.ac.id/kuliah/iki20210/
1
Agenda
° Review
° Instruksi Load Immediate
° Compare
Branch: conditional & unconditional
° Example: AVR control flow
°Resources:
°Harmarcher : Computer Organizations (bab 2.3)
°Atmel AVR homepage: http://www.atmel.com (products, AVR 8-bit RISC)
2
1
Review: Ringkasan
° AVR 8-bit mikroprosesor
• Sederhana: struktur dan instruksi mesin
• 32 Register: R0 .. R31
• Menganut konsep mesin “load & store”
° Konsep Kunci: Register - bagian “blok memori kecil”
prosesor untuk manipulasi data/instruksi
• Menyimpan data operand: Register sebagai variabel pada
HLL
• AVR: lebar register 8 bit, dikenal 3 pasangan register
teratas: X, Y, Z (bertindak sebagai pointer)
° Mengapa operand harus berada di register?
• Smaller is faster (Register jauh lebih cepat dari memori)
3
AVR General Purpose Registers
PC
SP
4
2
Review: AVR Arithmetic Instructions
° ADDITION (Penambahan)
• Contoh: add
• Instruksi perhitungan format 2 operand, dengan hasil
(destinations) operasi disimpan pada argumen PERTAMA
add Rd, Rr
Tambahkan isi register Rd dan Rr, simpan hasilnya pada isi
register Rd
The arguments can ONLY be registers, no values, no
constants
° SUBTRACTION (Pengurangan)
• Contoh: sub
• Instruksi pengurangan format 2 operand, dengan hasil
(destinations) operasi disimpan pada argumen PERTAMA
sub Rd, Rr
; Rd = Rd - Rr
5
Review: Load Indirect
ld
R1, X
X-register
; R1 = (X)
178
16 bit pointer
R27
R26
Lihat: konspe pointer;
Hamacher, hal 34
178
1200
R1
Alamat memori
Instruksi ini akan mengambil pointer pada X-register dan load nilai
dari memori yang ditunjuk oleh pointer tersebut
6
3
Data Transfer: Reg to Memory (1/2)
° Kita ingin menyimpan nilai dari register ke memori:
instruksi Store
° Instruksi Store identik dengan sintaks instruksi Load
° Nama Instruksi AVR:
• st (singkatan Store), dengan argumen pertama pointer
register (X, Y, Z) dan argumen kedua register (data) yang
akan disimpan (Rr)
st
X,
R1
; (X) = Rr
Contoh di atas diasumsikan data berada pada R1, dan lokasi
memori yang akan disimpan ditunjuk oleh pointer register X
7
Example: Store Indirect
st X, R1
; (X) = R1
X-register
R27
299
299
16 bit pointer
R26
1900
R1
Alamat memori
Instruksi ini akan mengambil pointer pada X-register dan store nilai
R1 ke lokasi memori yang ditunjuk oleh pointer tersebut
8
4
Variasi: Load Immediates
° “Immediates” adalah konstan (bilangan)
• Lihat definisi: Hamacher (bab 2.4: Addressing modes)
° Penggunaan konstan sangat diperlukan dalam
penulisan program
• Misalkan inisialisasi variabel dengan nilai konstan 0;
° Diperlukan instruksi khusus untuk konstan tersebut:
• ldi (Load Immediates) mengisi register dengan suatu
konstan:
ldi
Rd, K ; AVR: Rd = K
• Load konstan “K” (0 s/d 255) ke register Rd
• Contoh:
ldi
R5, 15
; load R5 dengan bil. desimal 15
9
Decision…
° Instruksi aritmetika, data transfer memberikan
kemampuan kita untuk melakukan komputasi data
• Sama seperti “kalkulator”
° Untuk sebuah komputer, maka diperlukan
kemampuan untuk memilih, “make decisions” ..
° Analogi HLL: assembly language harus mendukung
statement:
if (condition == true)
do “this”;
else
do “that”;
exit;
(true)
i == j
i == j?
“this”
(false)
i != j
“that”
Exit
10
5
Sequencing: Instruction Execution (Ch. 2.3.1)
° Instruksi dan data bersama-sama berada di memori:
• Data diakses dapat secara acak (tergantung address
operand, mis. pada instruksi ld)
• Instruksi dijalankan secara berurut (sekwensial)
° Urutan ini menjamin logika alur program: terdapat
urutan perintah ke mesin.
• Instruksi disimpan secara berurut pada lokasi di memori
• Eksekusi instruksi dlakukan dari alamat terkecil, increment
dst
° Bagaimana mengetahui “posisi” instruksi saat ini
(berikutnya?)
• Gunakan register khusus: Program Counter
11
Sequence Execution
PC (Program Counter)
2
Program couter (PC) berisi alamat lokasi
instruksi yang akan dieksekusi pada
siklus berikutnya.
Setelah instruksi dieksekusi, maka
PC akan “increment” dan menunjuk
pada instruksi berikutnya (next location)
PC = PC + 1; dst
0
1
2
3
4
5
6
7
8
9
0 7 4 5
1 8 7 6
0 9 8 6
0061
0017
0003
0000
0000
0000
.. dikenal istilah: straight line sequencing
12
6
Branching
° Eksekusi instruksi dapat dilihat dalam tahapan:
• Fetch (dari memori ke instruction register)
• Execute (decode dan jalankan operasi)
° Pada saat tahapan Execute, maka terdapat instruksi
dapat mengubah isi program counter (bukan
“increment” saja) tapi mengisi dengan lokasi
instruksi yang baru
° Perubahan Program Counter (PC) yang tidak
“berurut” lagi disebut “branch” atau “jump” (ke
lokasi tertentu)
° Manipulasi PC dengan memberikan address baru
(tidak sequence) dapat digunakan untuk “decision”
pada program komputer
13
AVR: Control Flow
° Condition Codes
• Prosesor menyimpan hasil dan status ekeskusi suatu
instruksi.
• Status-status (flag) ini disebut condition codes,
-
N (negative): perhitungan sebelumnya menghasilkan
bilangan negatif
Z (zero): perhitungan sebelumnya menghasilkan bilangan 0
V (overflow): perhitungan sebelumnya menyebabkan
overflow
dll
• AVR menyimpan status tersebut pada “field” bit tertentu
dari register khusus: status register
° So.. kita dapat memanfaatkan status bit ini untuk
mengatur/control flow instruksi.
14
7
AVR: Status Register
SREG: Status register
C: Carry flag in status register
Z: Zero flag in status register
N: Negative flag in status register
V: Two’s complement overflow indicator
S: N ⊕ V, For signed tests
H: Half Carry flag in the status register
T: Transfer bit used by BLD and BST instructions
I: Global interrupt enable/disable flag
15
Example: Compare Instructions
° Contoh instruksi yang mempengaruhi status
register:
° Instruksi: cp (singkatan “compare”, membandingkan
denga dua argumen)
cp
Rd, Rr
; operasi compare Rd dan Rr
• Evaluasi instruksi sebenarnya:
Rd – Rr
• Hasil ini akan men-set flag bit: Z (zero) pada
status register, jika evaluasi “subtraction” ini
adalah 0 atau (Rd == Rr)
• Note: “side effect” pada status register, tapi nilai
Rd dan Rr tidak berubah.
• Remember terminologi: set => 1 dan reset => 0.
16
8
Example: Compare “Immediate”
° Instruksi “compare” argumen dapat menggunakan
bilangan konstan
cpi
Rd, K ; evaluasi Rd – K, set flag bit
° set flag Z; jika hasil evaluasi (Rd-K) = 0
° Contoh:
cpi
r11, 5 ;compare R11 dengan 5
breq
Error ;branch ke Error jika Z di set
…
Error: …….
17
Example: Branch Instructions
° Contoh instruksi yang melakukan evaluasi nilai status
register (kemungkinan di set oleh instruksi
sebelumnya, mis. cp)
° Instruksi: breq (singkatan “conditional branch if
equal”, dengan argumen “label” lokasi untuk branch)
breq STOP ;test (Z == 1)branch STOP
……….
STOP: …
;jika test fail.
; branch jika test true.
• Uji (test) flag Z (pada Status Register), jika di-set (1),
maka branch (loncat) label (PC = PC+label+1)
• Terdapat juga instruksi:
brne “label” ; test Z==0,branch if true 18
9
Example: Jump Instructions
° Instruksi branch unconditional : tidak memerlukan
evaluasi flag pada register
° Digunakan untuk ‘skip’ instruksi yang tidak
diperlukan
° Efek: PC = PC+label+1
° Instruksi: jmp (singkatan “jump” dengan argumen
“label” lokasi untuk branch)
jmp STOP ; go to STOP
……….
STOP: …
; skip
; label
19
AVR: Control flow
° HLL:
if (i == 0) i = 50;
else i = i+j;
exit;
(true)
i == 0
i= 50
i == 0?
(false)
i != 0
i=i+j
Exit
20
10
Example: AVR Assembly
ARV Assembly:
;asumsi register Z menunjuk ke var. i
;register Y, menunjuk ke var. j
---ld R1, Z
ld R2, Y
cpi i, 0
breq INOL
add R1,R2
jmp EXIT
;
;
;
;
;
;
R1 berisi var. i
R2 berisi var. Y
compare i dengan 0
if Z flag set then branch INOL
i = i + j
unconditional jump; skip
INOL:ldi R1, 50; i = 50
EXIT: …………
21
To Remember
° Control flow: memilih kode program mana yang akan
dijalankan pada saat eksekusi.
° HLL: menggunakan statement conditional branch (if
.. else ..)
° AVR: menggunakan instruksi control flow: branch
(breq, brne)
° Status register membantu melakukan evaluasi
conditional: misalkan flag Z (zero) dapat di set oleh
instruksi compare (cp, cpi)
° Terdapat instruksi AVR untuk unconditional branch
(goto: label) yakni: jmp
22
11
Download