Materi 7: Branch, Call and Time Delay Loop

dokumen-dokumen yang mirip
Materi 6: AVR Status Register & AVR Data Format Directives I Nyoman Kusuma Wardana Sistem Komputer STMIK STIKOM Bali

Materi 5: Architecture and Assembly Language Programming. I Nyoman Kusuma Wardana Sistem Komputer STMIK STIKOM Bali

Materi 9: AVR Interrupt

2. Unit Praktikum Perhitungan Aritmatika

Interfacing. Materi 2: AVR Architecture. Disusun Oleh: I Nyoman Kusuma Wardana

Materi 4: Assembly Language Programming

Materi 2: Computer Systems

Materi 6: Control Unit Operations

Materi 3: Instruction Set

Materi 4: Microprocessor-Based Control

Materi 5: Processor Structure & Function

CENTRAL PROCESSING UNIT CPU

Materi 8: AVR Timer Programming

Simple As Possible (SAP) - 2. Abdul Syukur

MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

Tahun Akademik 2015/2016 Semester I DIG1B3 Konfigurasi Perangkat Keras Komputer

Set Instruksi. Set Instruksi. Set Instruksi adalah kumpulan

IKI20210 Pengantar Organisasi Komputer Kuliah Minggu ke-3: Bahasa Rakitan AVR

MAKALAH MODE DAN FORMAT PENGALAMATAN SET INSTRUKSI. Nama : Annisa Christyanti Kelas : XI TJA 3 NIS :

Materi 1: Pendahuluan

Simple As Possible (SAP) - 2. Abdul Syukur

Kumpulan instruksi lengkap yang dimengerti

DCH1B3 Konfigurasi Perangkat Keras Komputer SAP-2

Interfacing. Materi 4: Serial Communications. Disusun Oleh: I Nyoman Kusuma Wardana

BAB I PENDAHULUAN 1.1 LATAR BELAKANG

Microcontroller: Bahasa Pemrograman Assembly 8051

OPERATION SYSTEM. Jenis - Jenis Register Berdasarkan Mikroprosesor 8086/8088

Set Instruksi & Mode Pengalamatan. Team Dosen Telkom University 2016

Materi 2: Numbering & Coding Systems

Arsitektur Set Instruksi. Abdul Syukur

Materi 3. Komponen Mikrokomputer SYSTEM HARDWARE DAN SOFTWARE DADANG MULYANA

ARSITEKTUR KOMPUTER SET INSTRUKSI

Unit Kendali (2) CONTROL UNIT. RegDst Branch. MemRead. MemToReg. Instruction (31-26) ALUOp MemWrite. ALUSrc. RegWrite

Interfacing. Materi 7: SPI Communication. Disusun Oleh: I Nyoman Kusuma Wardana

ARSITEKTUR SET INSTRUKSI. Ptputraastawa.wordpress.com

Arsitektur dan Organisasi Komputer Set Intruksi

Hanif Fakhrurroja, MT

PERTEMUAN MINGGU KE-5 ARSITEKTUR SET INSTRUKSI

William Stallings Computer Organization and Architecture. Chapter 9 Set Instruksi: Karakteristik dan Fungsi

Set Instruksi: Set instruksi?

BAB I AVR ATMega 8535L

LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR INSTRUKSI PERCABANGAN DAN LOOP

Karakteristik Instruksi Mesin

Organisasi Komputer II STMIK AUB SURAKARTA

Hanif Fakhrurroja, MT

Interfacing. Materi 8: I2C Communication. Disusun Oleh: I Nyoman Kusuma Wardana

MIKROKONTROLER AT89S52

ARSITEKTUR DAN ORGANISASI KOMPUTER

BAB 4 STACK AREA, SUBROUTINE dan INSTRUKSI BLOK

MIKROKONTROLER Arsitektur Mikrokontroler AT89S51

Mata Kuliah : Bahasa Rakitan Materi ke-3

MAKALAH PERANCANGAN KEYPAD MESIN FOTOKOPI SISTEM MIKROPROSESOR

Interfacing. Materi 5: LCD and Keyboard Interfacing. Disusun Oleh: I Nyoman Kusuma Wardana

Organisasi & Arsitektur Komputer

Mengenal bahasa assembly

Pertemuan Ke-12 RISC dan CISC

BAHASA PEMOGRAMAN AT89S/Cxx (assembly)

Simple As Possible (SAP) - 1. Abdul Syukur

Struktur Fungsi CPU. Mata Kuliah Arsitektur Komputer Program Studi Sistem Informasi 2013/2014 STMIK Dumai -- Materi 03 --

PERTEMUAN SET INSTRUKSI MIKROKONTROLER AT 89C51

ORGANISASI INTERNAL PROSESOR Oleh: Priyanto

PERCOBAAN 5 STACK DAN SUBROUTINE. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

Mikrokontroller Berbasiskan RISC 8 bits

Eksekusi instruksi Tipe R, LW-SW, Beq, dan Jump (Pertemuan ke-24)

SOAL UAS SISTEM KOMPUTER Kelas XI RPL & TKJ

IKI20210 Pengantar Organisasi Komputer Kuliah Minggu ke-3: Bahasa Rakitan AVR

Pertemuan ke 6 Set Instruksi. Computer Organization Dosen : Eko Budi Setiawan

SISTEM KERJA MIKROPROSESOR

Interfacing. Materi 6: ADC, DAC & Sensor Interfacing. Disusun Oleh: I Nyoman Kusuma Wardana

Pengantar Memori dan Memori Internal

Materi 1: Pendahuluan

Organisasi Sistem Komputer

Perangkat dan format Instruksi, Immediate, Direct, & Indirect Addressing

Pertemuan 2 Organisasi Komputer II. Struktur & Fungsi CPU (I)

Hanif Fakhrurroja, MT

MODUL I PENGENALAN ASSEMBLY

BAB VII KOMPUTER SEDERHANA SAP-3 (SIMPLE AS POSSIBLE-3)

Eksekusi instruksi Tipe R, LW-SW, Beq, Jump, dan Model Pengalamatan (Pertemuan ke-24)

INSTRUKSI DASAR Salahuddin, SST.

ORGANISASI KOMPUTER DASAR

Organisasi Komputer & Organisiasi Prosesor

Teknologi Scalar untuk meningkatkan Kinerja Prosesor

Mikrokontroler AVR. Hendawan Soebhakti 2009


Instructions Set. Element dari instruction. Representasi dari Op code

BAB II PENGENALAN ATMEGA 8535 DAN VHDL

LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR STACK DAN SUBROUTINE

Operasi Transfer Data

STRUKTUR CPU. Arsitektur Komputer

LAPORAN PRAKTIKUM ORGANISASI KOMPUTER & BAHASA ASSEMBLY PROGRAM OPERASI ARITMATIKA. Kelas : INF 2B Praktikum 1 Nama : Fernalia NIM : J3C212210

Materi 5: Protokol I2C

Kuis : Bahasa Rakitan (UAS)

Arsitektur dan Organisasi Komputer. Set instruksi dan Pengalamatan

PETA MEMORI MIKROPROSESOR 8088

BAB I TUGAS MATA KULIAH SISTEM MIKROPROSESOR DOSEN PEMBERI TUGAS : FATAH YASIN, ST, MT.

IKI20210 Pengantar Organisasi Komputer Kuliah Minggu ke-2: Arsitektur Set Instruksi

PERTEMUAN. SET INSTRUKSI MIKROKONTROLER AT 89C51 (Lanjutan)

LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR APLIKASI DASAR INSTRUKSI ARITMATIKA DAN OPERASI LOGIK

7.1 Pendahuluan. 7.2 Central Processing Unit (CPU)

Transkripsi:

Materi 7: Branch, Call and Time Delay Loop I Nyoman Kusuma Wardana Sistem Komputer STMIK STIKOM Bali Kusuma Wardana - Bahasa Rakitan 2016 1

Branches and Looping Program Counter (PC) Calculating the Short Branch Address Unconditional Branches Call Instruction & Stack AVR time delay Kusuma Wardana - Bahasa Rakitan 2016 2

Kusuma Wardana - Bahasa Rakitan 2016 3

Loop pengulangan instruksi atau operasi dlm suatu waktu tertentu Loop salah satu teknik pemrograman yg paling sering digunakan Di AVR, ada berbagai teknik utk melakukan pengulangan Salah satunya dgn melakukan operasi yg sama berulang-ulang sampai tujuan akhir terpenuhi Kusuma Wardana - Bahasa Rakitan 2016 4

Contoh: LDI R24, 0 ;R24 = 0 LDI R25, 3 ;R25 = 3 ADD R24, R25 ADD R24, R25 ADD R24, R25 ADD R24, R25 ADD R24, R25 ADD R24, R25 ;R24 = 0x03 ;R24 = 0x06 ;R24 = 0x09 ;R24 = 0x0C ;R24 = 0x0F ;R24 = 0x12 Bgmn jika agar isi R24 mencapai 0x50? boros ruang Kusuma Wardana - Bahasa Rakitan 2016 5

BRNE BRanch if Not Equal BRNE memakai zero flag Lompatlah jika Z = 0 BACK:... ;start loop... ; body loop... ; body loop DEC Rn ; decrement Rn, Z=1 jika Rn=0 BRNE BACK ; kembali jika z=0 Kusuma Wardana - Bahasa Rakitan 2016 6

Contoh: Buatlah program dgn kasus berikut: Kosongkan R20, kemudian tambahkan nilai 3 ke R20 sebanyak sepuluh kali. Terakhir, kirim hasil penjumlahan ke PORTB Gunakan zero flag dan BRNE Kusuma Wardana - Bahasa Rakitan 2016 7

Jawab:.INCLUDE M16DEF.INC LDI R16, 10 ;R16 = 10 (utk counter) LDI R20, 0 ;R20 = 0 (kosongkan R20) LDI R21,3 ;R21 = 3 LAGI: ADD R20, R21 ;R20 = R20 +3 DEC R16 ;decrement R16 (counter) BRNE LAGI ;ulangi sampai count = 0 OUT PORTB, R20 ;kirim hasil akhir ke PORTB Kusuma Wardana - Bahasa Rakitan 2016 8

Load counter LDI R16, 10 Clear R20 LDI R20, 0 Isi R21 dgn 3 LDI R21,3 Tambahkan R20 dan R21 LAGI: ADD R20, R21 Decrement counter DEC R16 tidak Apakah counter = 0? ya BRNE LAGI Keluarkan hasilnya pd PORTB OUT PORTB, R20 Kusuma Wardana - Bahasa Rakitan 2016 9

Contoh: Berdasarkan contoh sebelumnya, berapakah maksimum pengulangan yg bisa dilakukan? Jawab: Karena R16 = 8-bit register, maka R16 hanya bisa meng-handle pengulangan sebanyak 0xFF (255 dec) Oleh karena itu, pengulangan maks = 255 kali Kusuma Wardana - Bahasa Rakitan 2016 10

Utk mengatasi keterbatasan pengulangan (misal maks 255 pd contoh sebelumnya) digunkanlah loop di dalam loop (nested loop) Menggunakan 2 register sbg counter Contoh: Buat program utk: Muati register PORTB dgn nilai 0x55 Komplemenkan (invers) PORTB 700 kali Kusuma Wardana - Bahasa Rakitan 2016 11

Jawab:.INCLUDE M16DEF.INC.ORG 0 LDI R16, 0x55 ;R16 = 0x55 OUT PORTB, R16 ;PORTB = 0x55 LDI R20, 10 ;R20 = 10 (loop luar) LOP_1: LDI R21, 70 ;R21 = 70 (loop dalam) LOP_2: COM R16 ;komplemen R16 OUT PORTB, R16 ;keluarkan ke PORTB DEC R21 ;dec R21 (loop dalam) BRNE LOP_2 ;ulangi 70 kali DEC R20 ;dec R20 (loop luar) BRNE LOP_1 ;ulangi 10 kali Kusuma Wardana - Bahasa Rakitan 2016 12

Kusuma Wardana - Bahasa Rakitan 2016 13

Dua register memberikan kita maksimum 65.025 (255 x 255) pengulangan Jika menggunakan tiga register lebih dr 16 juta kali! Contoh: Tulislah program utk melakukan pengulangan sebanyak 100.000 kali! Kusuma Wardana - Bahasa Rakitan 2016 14

Jawab: LDI R16, 0x55 OUT PORTB, R16 LDI R23, 10 LOP_3: LDI R22, 100 LOP_2: LDI R21, 100 LOP_1: COM R16 DEC R21 BRNE LOP_1 DEC R22 BRNE LOP_2 DEC R23 BRNE LOP_3 Kusuma Wardana - Bahasa Rakitan 2016 15

Jenis-jenis percabangan bersyarat lainnya: Instruksi Aksi BRLO Bercabang jika C=1 BRSH Bercabang jika C=0 BREQ Bercabang jika Z=1 BRNE Bercabang jika Z=0 BRMI Bercabang jika N=1 BRPL Bercabang jika N=0 BRVS Bercabang jika V=1 BRVC Bercabang jika V=0 Kusuma Wardana - Bahasa Rakitan 2016 16

BREQ BRanch if EQual BREQ Z flag dicek. Jika tinggi (1), maka CPU akan melompat ke alamat target Contoh: OVER: IN R20, PINB TST R20 ;baca PINB & taruh di R20 ;set flag sesuai R20 BREQ OVER ;lompat jika R20 = 0 Kusuma Wardana - Bahasa Rakitan 2016 17

OVER: IN R20, PINB TST R20 ;baca PINB & taruh di R20 ;set flag sesuai R20 BREQ OVER ;lompat jika R20 = 0 Jika PINB = 0, maka CPU akan melompat ke OVER TST set flag sesuai dgn isi dr register tsb tanpa melakukan operasi aritmatika (misal increment/decrement) Kusuma Wardana - Bahasa Rakitan 2016 18

BRSH BRanch if Same or Higher BRSH C flag dicek. Jika rendah (0), maka CPU akan melompat ke alamat target Jika C =1, maka tdk akan bercabang, namun akan mengeksekusi perintah selanjutnya Contoh: Buatlah program utk menentukan apakah RAM pd lokasi 0x200 berisi nilai 0. jika ya, isilah dgn nilai 0x55 ke dalamnya Kusuma Wardana - Bahasa Rakitan 2016 19

Jawab: Buatlah program utk menentukan apakah RAM pd lokasi 0x200 berisi nilai 0. jika ya, isilah dgn nilai 0x55 ke dalamnya.equ LOKASI = 0x200 LDS R30, LOKASI TST R30 BRNE NEXT ;brcabang jk R30 0 (Z=0) LDI R30, 0x55 ;isi 0x55 jk R30 = 0 STS LOKASI, R30 NEXT:... Kusuma Wardana - Bahasa Rakitan 2016 20

Kusuma Wardana - Bahasa Rakitan 2016 21

Program Counter (PC) Salah satu register yg sangat penting! PC digunakan oleh CPU utk mendapatkan alamat dr instruksi selanjutnya utk dieksekusi Kusuma Wardana - Bahasa Rakitan 2016 22

CPU mengambil (fetch) instruksi (opcode) dr program ROM dan selanjutnya PC naik scr otomatis memposisikan alamat utk instruksi berikutnya Semakin lebar PC semakin banyak lokasi memori yg dpt diakses Misal, 14-bit PC dapat mengakses 16K lokasi program memori (2 14 = 16K) Kusuma Wardana - Bahasa Rakitan 2016 23

µc AVR memiliki Flash memory dgn lebar memori sebesar 2-byte Contoh: ATmega32 mempunyai 32K byte diorganisasikan 16K x 2 byte. PC = 14bit (2 14 = 16K lokasi memori) Kusuma Wardana - Bahasa Rakitan 2016 24

ATmega64 memiliki 64K byte ROM 64K dipecah menjd 32K x 2 byte Fokus pd 32K - nya Oleh karena itu, lebar PC adlh 15-bit, sebab 2 15 =32K Kusuma Wardana - Bahasa Rakitan 2016 25

Untuk 16-bit PC ruang memori kode adlh 64K (2 16 = 64K): mengambil lokasi 0000-$FFFF Jika 22-bit ruang = 000000 - $3FFFFF Kusuma Wardana - Bahasa Rakitan 2016 26

AVR On-Chip Program ROM Address Range Kusuma Wardana - Bahasa Rakitan 2016 27

Contoh: Temukanlah rentang alamat ROM dr µc berikut: ATtiny25 dgn 2KB ATmega16 dgn 16KB ATmega64 dgn 64KB Kusuma Wardana - Bahasa Rakitan 2016 28

Jawab: ATtiny25 2K byte 2 x 1024 = 2048 memori ROM Karena lebar tiap alamat adlh 2 byte, maka akan mempunyai 1024 lokasi (2048/2 = 1024). Maka rentang lokasi = 0000 - $03FF Kusuma Wardana - Bahasa Rakitan 2016 29

Jawab: ATmega16 16K byte 16 x 1024 = 16.384 byte memori ROM Karena lebar tiap alamat adlh 2 byte, maka akan mempunyai 8192 lokasi (16.384 /2 = 8192) Maka rentang lokasi = 0000 - $1FFF Kusuma Wardana - Bahasa Rakitan 2016 30

Jawab: ATmega64 64K byte 64 x 1024 = 65.535 byte memori ROM Karena lebar tiap alamat adlh 2 byte, maka akan mempunyai 32.768 lokasi (65.535 /2 = 32.768) Maka rentang lokasi = 0000 - $7FFF Kusuma Wardana - Bahasa Rakitan 2016 31

AVR On-Chip Program ROM Address Range Kusuma Wardana - Bahasa Rakitan 2016 32

Placing Code in Program ROM.INCLUDE "M16DEF.INC".EQU LOC = 0x300 ;lokasi LOC pd SRAM $300.ORG 00 ;mulai pd lokasi 0 LDI R16, 0x25 ;R16=0x25 LDI R17, $34 ;R17=0x34 LDI R18, 0x31 ;R18=0x31 ADD R16, R17 ;R16=R16+R17 ADD R16, R18 ;R16=R16+R18 LDI R17, 11 ;R17=0x0B ADD R16, R17 ;R16=R16+R17 STS LOC, R16 ;simpan pd 0x300 HERE: JMP HERE ;diam selamanya di sini Kusuma Wardana - Bahasa Rakitan 2016 33

Ubah seting pd AVR Studio utk membuat list file: Project Assembler Options Kusuma Wardana - Bahasa Rakitan 2016 34

... Sebagian isi list file:.equ LOC = 0x300 ;lokasi LOC pd SRAM $300.ORG 00 ;mulai pd lokasi 0 000000 e205 LDI R16, 0x25 ;R16=0x25 000001 e314 LDI R17, $34 ;R17=0x34 000002 e321 LDI R18, 0x31 ;R18=0x31 000003 0f01 ADD R16, R17 ;R16=R16+R17 000004 0f02 ADD R16, R18 ;R16=R16+R18 000005 e01b LDI R17, 11 ;R17=0x0B 000006 0f01 ADD R16, R17 ;R16=R16+R17 000007 9300 0300 STS LOC, R16 ;simpan pd 0x300 000009 940c 0009 HERE: JMP HERE ;diam selamanya disini... Kusuma Wardana - Bahasa Rakitan 2016 35

Amati untuk program counter (PC) utk LDI, ADD dan STS pd AVR Instruction Set, sbb: Kusuma Wardana - Bahasa Rakitan 2016 36

Penambahan PC menunjukkan sasaran target lokasi selanjutnya 000000 e205 LDI R16, 0x25 000001 e314 PC = PC+1 LDI R17, $34... 000007 9300 0300 STS LOC, R16 000009 940c 0009 PC = PC+2 HERE: JMP HERE Kusuma Wardana - Bahasa Rakitan 2016 37

Alamat 0000 berisi E205 opcode utk memindahkan nilai ke R16 dan operand (dlm hal ini 0x25) ke R16 Dgn demikian, instruksi LDI R16, 0x25 memiliki kode mesin E205 Dimana E = opcode, 205 = operand.equ LOC = 0x300 ;lokasi LOC pd SRAM $300.ORG 00 ;mulai pd lokasi 0 000000 e205 LDI R16, 0x25 ;R16=0x25... Kusuma Wardana - Bahasa Rakitan 2016 38

Lihat instruksi LDI pd AVR Instruction Set dan amati byte Opcode (dlm biner), sbb: LDI Rd, K 16 d 31, 0 r 255 Kusuma Wardana - Bahasa Rakitan 2016 39

Opcode LDI Rd, K dlm hex: Amati pada list file: 000000 e205 LDI R16, 0x25 ;R16=0x25 000001 e314 LDI R17, $34 ;R17=0x34 000002 e321 LDI R18, 0x31 ;R18=0x31 Kusuma Wardana - Bahasa Rakitan 2016 40

Kusuma Wardana - Bahasa Rakitan 2016 41

SEMUA percabangan bersyarat (misal BRSH, BREQ dan BRNE) adlh short jump Short jump alamat target harus lebih kecil dr 64 byte dlm Program Counter (PC) Kusuma Wardana - Bahasa Rakitan 2016 42

Short jump (short branch) instruksi 2 byte 2 byte tersebut: Opcode = 9-bit relative address (operand) = 7-bit Contoh BRSH kkkkkkk = relative address Sisanya = opcode Kusuma Wardana - Bahasa Rakitan 2016 43

Contoh BRSH kkkkkkk = relative address Sisanya = opcode Asumsi kode mesinnya adalh: Maka: 1111 0100 0000 1000 Relative address= 0000001 Opcode = 111101000 Kusuma Wardana - Bahasa Rakitan 2016 44

Target address relatif terhadap nilai pd program counter (PC) Relative address positif melompat maju Relative address negatif melompat mundur Relative address memiliki nilai antara: -64 - +63 Utk menghitung target address: Target Add. = Relative Add. +PC Kusuma Wardana - Bahasa Rakitan 2016 45

Target Add. = Relative Add. + PC Kusuma Wardana - Bahasa Rakitan 2016 46

Kusuma Wardana - Bahasa Rakitan 2016 47

JMP (Jump) JMP unconditional Jump: dpt pergi ke lokasi memori mana saja dlm rentang 4M (word) ruang memori Mrpkn perintah 4-byte (32-bit): 10-bit: opcode 22-bit: alamat target Kusuma Wardana - Bahasa Rakitan 2016 48

Kusuma Wardana - Bahasa Rakitan 2016 49

22-bit target address dpt menjangkau 4M (words) lokasi memori dgn rentang: Ingat 2 22 =4.194.304 000000 - $3FFFFF Jd, perintah JMP dpt mengkover seluruh ruang memori Tidak semua keluarga AVR dpt diberi instruksi JMP!!! Kusuma Wardana - Bahasa Rakitan 2016 50

Wlpn AVR dpt mempunyai ruang memori sampai 8M-byte, tdk semua keluarga AVR mempunyai sedemikian besar kapasitas ROM Bbrp jenis AVR hanya memiliki 4K-32K onchip ROM setiap byte begitu berharga Oleh karena itu, terdapat alternatif yaitu RJMP (Relative Jump) Kusuma Wardana - Bahasa Rakitan 2016 51

RJMP (Relative Jump) RJMP instruksi 2-byte (16-bit): 4-bit: opcode 12-bit: relative address Rentang alamat: 000-$FFF Dibagi mnjd lompat maju dan lompat mundur dlm rentang -2048 sampai +2047 relatif thd PC Kusuma Wardana - Bahasa Rakitan 2016 52

Jika lompat maju: relative address = positif Jika lompat mundur: relative address = negatif Dlm hal ini, RJMP seperti conditional branch, namun 12 bit digunakan sbg offset address Kusuma Wardana - Bahasa Rakitan 2016 53

IJMP (Indirect Jump) IJMP mrpkn instruksi 2-byte Ketika dieksekusi, PC dimuati dgn nilai dr suatu register Z Jadi, akan melompat ke alamat yg ditunjukkan oleh nilai dr register Z Kusuma Wardana - Bahasa Rakitan 2016 54

Pd percabangan yg lain target address bersifat statik Namun, pd IJMP target bersifat dinamis Kita dpt scr dinamis mengubah alamat target dgn mengubah isi register Z Kusuma Wardana - Bahasa Rakitan 2016 55

Kusuma Wardana - Bahasa Rakitan 2016 56

Call digunakan utk memanggil subrutin Subrutin melaksanakan tugas tertentu yg sering dilakukan Penggunaan instruksi call membuat program lebih terstruktur dan menghemat memori 4 Jenis Call: CALL, RCALL, ICALL, EICALL Kusuma Wardana - Bahasa Rakitan 2016 57

CALL Call instruksi 4-byte (32-bit): 10-bit: opcode 22-bit: target address Seperti halnya JMP call dpt mengakses sampai 4M dgn rentang: 000000-$3FFFFF Kusuma Wardana - Bahasa Rakitan 2016 58

Formasi perintah CALL Kusuma Wardana - Bahasa Rakitan 2016 59

Utk memastikan bahwa CPU akan kembali ke program utama setelah memanggil CALL, maka perintah dibawah CALL scr otomatis akan disimpan pada stack Setelah selesai mengeksekusi subrutin, maka diperlukan perintah RET utk kembali lg ke asal Setiap subrutin memerlukan perintah RET Kusuma Wardana - Bahasa Rakitan 2016 60

Stack and Stack Pointer Stack lokasi pd RAM yg digunakan utk menyimpan informasi sementara Register yg digunakan utk mengakses stack dinamakan SP (Stack Pointer) Terdpt 2 register: 1. SPL (utk low bit SP) dan 2. SPH (utk high bit SP) Kusuma Wardana - Bahasa Rakitan 2016 61

Utk instruksi yg kurang atau sama dgn 8-bit, cukup digunakan SPL Jika lebih, dipakai keduanya Kusuma Wardana - Bahasa Rakitan 2016 62

Perintah utk menyimpan informasi pd stack disebut PUSH Perintah utk me-load informasi dr stack ke register disebut POP Dgn kata lain, register di pushed ke stack utk disimpan lalu mem popped-off stack utk diambil informasinya Kusuma Wardana - Bahasa Rakitan 2016 63

Pushing onto the Stack SP diarahkan ke top of stack (TOS) Karena kita push ke stack, maka data akan disimpan pd tempat yg diarahkan oleh SP Kemudian SP dikurangi 1 Contoh: PUSH R10 ;simpan R10 ke stack, dec SP Kusuma Wardana - Bahasa Rakitan 2016 64

Popping from the Stack Proses mrpkn kebalikan dr PUSH Ketika POP dieksekusi SP dinaikkan (increment) 1 dan TOS disalin balik ke register Stack bersifat LIFO (Last-In-First-Out) Contoh: POP R16 ;salin isi stack ke R16, in SP Kusuma Wardana - Bahasa Rakitan 2016 65

Inisialisasi Stack Pointer Ketika uc dinyalakan SP bernilai 0, yaitu pd R0 Oleh karena itu, kita hrs menginisialisasinya ke suatu alamat pd RAM Pd AVR, stack berjalan dr memori lebih tinggi ke meori lebih rendah (makanya kita mengurangi alamat SP) Oleh karena itu, utk pertama kali, kita alamatkan pd memori yg paling tinggi Kusuma Wardana - Bahasa Rakitan 2016 66

Setiap uc AVR memiliki ukuran RAM yg berbeda Jika kita ingin menginisialisasi SP, gunakan perintah RAMEND Ingat, SP terdiri dr 2: SPL dan SPH Gunakan RAMEND utk kedua register tsb Kusuma Wardana - Bahasa Rakitan 2016 67

Contoh: Tentukan isi dari stack, stack poniter, serta R20, R22 dan R31 dari program berikut:.include M16DEF.INC.ORG 0 ;inisialisasi SP pd lokasi terakhir dari ; RAM(RAMEND) LDI R16, HIGH(RAMEND) ;load SPH OUT SPH, R16 LDI R16, LOW(RAMEND) ;load SPL OUT SPL, R16 LDI R31, 0 LDI R20, 0x21 LDI R22, 0x66 PUSH R20 PUSH R22 LDI R20, 0 LDI R22, 0 POP R22 POP R31 Kusuma Wardana - Bahasa Rakitan 2016 68

.INCLUDE M16DEF.INC.ORG 0 ;inisialisasi SP pd lokasi terakhir dari ; RAM(RAMEND) LDI R16, HIGH(RAMEND) ;load SPH OUT SPH, R16 LDI R16, LOW(RAMEND) ;load SPL OUT SPL, R16 LDI R31, 0 LDI R20, 0x21 LDI R22, 0x66 PUSH R20 PUSH R22 LDI R20, 0 LDI R22, 0 POP R22 POP R31 Kusuma Wardana - Bahasa Rakitan 2016 69

Ketika subrutin dipanggil, prosesor menyimpan alamat tepat di bawah CALL & segera lari ke subrutin yg dituju Ketika RET dieksekusi, lokasi paling atas pd stack disalin ke program counter (PC) dan stack pointer dinaikkan Kusuma Wardana - Bahasa Rakitan 2016 70

Contoh: Toggle semua bit pd PORTB dengan mengirim nilai $55 dan $AA terus-menerus. Letakkan time delay diantaranya Kusuma Wardana - Bahasa Rakitan 2016 71

Jawab:.INCLUDE M16DEF.INC.ORG 0 LDI R16, HIGH(RAMEND) ;load SPH OUT SPH, R16 LDI R16, LOW(RAMEND) OUT SPL, R16 ;load SPL BACK : LDI R16, 0x55 ; R16 = 0x55 OUT PORTB, R16 ; kirim 55 (hex) ke port B CALL DELAY ; delai LDI R16, 0xAA ; R16 = 0xAA OUT PORTB, R16 ; kirim AA (hex) ke port B CALL DELAY ; delai RJMP BACK ; lakukan secara terus-menerus ;------- ini adalah subrutin untuk delay ---------.ORG 0x300 ; tempatkan delay di alamat 0x300 DELAY: LDI R20, 0xFF ; R20 = 255 (sbg counter) LAGI: NOP ; no operation (buang2 detak) NOP DEC R20 BRNE LAGI ; lakukan sampai R20 mnjd 0 RET Kusuma Wardana - Bahasa Rakitan 2016 ; kembali ke caller 72

Upper Limit of the Stack Kita dpt menentukan dimana saja lokasi stack pd general purpose RAM (SRAM) Jd, nilai stack bisa sebesar ukuran RAM yg dimiliki Stack TIDAK DAPAT dideklarasikan di register memory atau I/O memory Kusuma Wardana - Bahasa Rakitan 2016 73

Ingat: kita tdk dpt mendefinisikan stack pd register memory, atau di I/O memory Jd, SP hrs diset diatas alamat 0x60 Data Address Space $0000 $0001... $001F $0020... $005F $0060... General Purpose Registers Standard I/O Registers General purpose RAM (SRAM) 8 bit R0 R1 R2... R31 TWBR TWSR... SPH SREG I/O Address $00 $01 $3E $3F $FFFF Kusuma Wardana - Bahasa Rakitan 2016 74

Analisis stack dr instruksi CALL berikut:.org 0 000000 e004 LDI R16, HIGH(RAMEND) 000001 bf0e OUT SPH, R16 000002 e50f LDI R16, LOW(RAMEND) 000003 bf0d OUT SPL, R16 000004 e505 BACK : LDI R16, 0x55 000005 bb08 OUT PORTB, R16 000006 940e 0300 CALL DELAY 000008 ea0a LDI R16, 0xAA 000009 bb08 OUT PORTB, R16 00000a 940e 0300 CALL DELAY 00000c cff7 RJMP BACK.ORG 0x300 000300 ef4f DELAY: LDI R20, 0xFF 000301 0000 LAGI: NOP 000302 0000 NOP 000303 954a DEC R20 000304 f7e1 BRNE LAGI 000305 9508 RET Kusuma Wardana - Bahasa Rakitan 2016 75

Memanggil banyak subrutin: Kusuma Wardana - Bahasa Rakitan 2016 76

RCALL (Relative Call) RCALL instruksi 2-byte (16-bit) 4-bit: opcode 12-bit: target address Target address harus antara: -2048 +2047 Tdk ada perbedaan antara RCALL dan CALL, namun yg membedakan adlh range address yg bisa dijangkau Kusuma Wardana - Bahasa Rakitan 2016 77

ICALL (Indirect Call) ICALL instruksi 2-byte (16-bit) Z register menentukan alamat target Z register = 16 bit dpt menjangkau 64K words Kusuma Wardana - Bahasa Rakitan 2016 78

Kusuma Wardana - Bahasa Rakitan 2016 79

Utk membuat time delay menggunakan bhs assembly, trdapat 2 faktor yg mempengaruhi akurasi, sbb: 1. Frekuensi kristal Kristal terkoneksi pd pin XTAL1 dan XTAL2. Durasi dr periode clock utk siklus intruksi adlh fungsi dr frekuensi kristal ini Kusuma Wardana - Bahasa Rakitan 2016 80

2. Desain AVR Salah satu utk mempercepat kinerja mikrokontroler membwt single instruction cycle Mengapa AVR dpt membuat 1 siklus utk 1 instruksi? Krn sbb: 1. Menggunakan arsitektur Harvard 2. Menggunakan RISC 3. Menggunakan pipeline Kusuma Wardana - Bahasa Rakitan 2016 81

Subrutin delay terdiri dr 2 bagian: 1. Seting counter 2. Loop Kita sering mengkalkulasi time dalay brdasarkan instruksi di dlm loop Kusuma Wardana - Bahasa Rakitan 2016 82

Register 8 bit max 255 Salah satu utk memperlambat delay menggunakan perintah NOP NOP No OPeration : wasting time NOP menghabiskan 2 byte ROM dieksekusi 1 clock cycle NOP terlalu mahal utk 1 clock cycle Alternatif pakai nested loop Kusuma Wardana - Bahasa Rakitan 2016 83

Contoh: Dgn menggunakan kristal 1 MHz, tentukan lamanya delay dr program berikut: ;------ini adalah subrutin delay.org 0X300 DELAY: LDI R20, 0XFF ;R20 = 255: counter AGAIN: NOP NOP DEC R20 BRNE AGAIN ;ulangi sampai R20 = 0 RET ; kembali ke caller Kusuma Wardana - Bahasa Rakitan 2016 84

Jawab: Lihat AVR Instruction Set, kemudian carilah instruction cycle Instruction Cycles DELAY: LDI R20, 0XFF 1 AGAIN: NOP 1 NOP 1 DEC R20 1 BRNE AGAIN 2/1 RET 4 Kusuma Wardana - Bahasa Rakitan 2016 85

Time delay = [1+(1+1+1+2)x255 + 4]x1us =1280us Ingat, BRNE menghabiskan 2 siklus jika lompat dan 1 siklus ketika tidak lompat. Jadi, time delay =1280us 1 = 1279us Instruction Cycles DELAY: LDI R20, 0XFF 1 AGAIN: NOP 1 NOP 1 DEC R20 1 BRNE AGAIN 2/1 RET 4 Kusuma Wardana - Bahasa Rakitan 2016 86

Loop Inside a Loop Delay Loop Inside a Loop Delay = nested loop Digunakan untuk membuat delay yang lebih lama Kusuma Wardana - Bahasa Rakitan 2016 87

Contoh: Dgn menggunakan kristal 1 MHz, tentukan lamanya delay dr program berikut: DELAY: LDI R16, 200 AGAIN: LDI R17, 250 HERE: NOP NOP DEC R17 BRNE HERE DEC R16 BRNE AGAIN RET Kusuma Wardana - Bahasa Rakitan 2016 88

Jawab: HERE Loop= [(5x250)-1] x 1us = 1.249us AGAIN mengulangi HERE sbanyak 200x, maka: 200 x 1249 = 249.800 us Instruction Cycles DELAY: LDI R16, 200 1 AGAIN: LDI R17, 250 1 HERE: NOP 1 NOP 1 DEC R17 1 BRNE HERE 2/1 DEC R16 1 BRNE AGAIN 2/1 RET 4 Kusuma Wardana - Bahasa Rakitan 2016 89

Kemudian instruksi diluar kalang: Instruction Cycles AGAIN: LDI R17, 250 1... DEC R16 1 BRNE AGAIN 2/1 [(4 x 200) 1] x 1us = 799us Total = 249.800 + 799 = 250.599us Kita blm memasukkan LDI R16, 200 dan RET TOTAL semuanya = 1us + 250.599us + 4us = 250.604us Kusuma Wardana - Bahasa Rakitan 2016 90

Kusuma Wardana - Bahasa Rakitan 2016 91

Non-pipeline fetch 1 execute 1 fetch 2 execute 2 fetch 3 execute 3 Pipeline fetch 1 execute 1 fetch 2 execute 2 fetch 3 execute 3 fetch 4 execute 4 fetch 5 execute 5 Time T1 T2 T3 T4 T5 T6 Kusuma Wardana - Bahasa Rakitan 2016 92

Kusuma Wardana - Bahasa Rakitan 2016 93

Kusuma Wardana - Bahasa Rakitan 2016 94

Single-cycle Pipeline Kusuma Wardana - Bahasa Rakitan 2016 95

Kita dpt menggunakan pipeline utk mempercepat eksekusi dr instruksi Pd pipeline proses utk mengeksekusi dipecah menjadi langkah2 kecil dan dikerjakan scr paralel Kelemahan pipeline kecepatan eksekusi terbatasi oleh kecepatan terendah dr bagian pipeline tsb Kusuma Wardana - Bahasa Rakitan 2016 96

Mazidi, Naimi and Naimi, 2011, The AVR Microcontroller and Embedded System: Using Assembly and C, Prentice Hall www.atmel.com/ Vahid, Frank and Gigarvis, Tony, 1999, Embedded System Design: Unified Hardware/Software Approach Morton, John, 2007, AVR: An Introductory Course, Newnes Publisher Kusuma Wardana - Bahasa Rakitan 2016 97