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