Download A1. AVR Assembler and Studio

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
IKI10230
Pengantar Organisasi Komputer
Kuliah no. A1: AVR Assembler & Studio
Sumber:
1. AVR Assembler.
2. AVR Studio
28 Februari 2003
Bobby Nazief ([email protected])
Qonita Shahab ([email protected])
bahan kuliah: http://www.cs.ui.ac.id/kuliah/iki10230/
1
Why RISC?
° Reduced Instruction Set Computing (RISC)
° Hanya terbatas jenis/jumlah instruksi untuk operasi
dasar
• Arithmetic, load/store, branches and jumps
• Instruksi umum dan sering digunakan: sederhana dan cepat
Top 10 80x86 Instructions
Rank
Instruction
Integer Average Percent total executed
1
load
22%
2
conditional branch
20%
3
compare
16%
4
store
12%
5
add
8%
6
and
6%
7
sub
5%
8
move register-register
4%
9
call
1%
10
return
1%
Total
96%
Simple instructions dominate instruction frequency
make common case: simple and fast
17
2
Why AVR 8-bit RISC ?
° RISC: kinerja (performance) komputer meningkat
• Pilihan teknologi rancangan prosesor modern (PowerPC, Sun
Sparc, MIPS dll)
• Fast with reduced complexity!
° Atmel AVR 8-bit RISC
• Sederhana (bentuk minimalis dari RISC): mudah dipelajari !
• Target operasi: microcontroller (embedded systems)
- Berbagai aplikasi dan peralatan elektronis (ponsel, home
appliances, mobil, dll)
- Controller untuk pabrik, proses kimia, mesin dll.
- “Vast opportunity”: karir, wira-usaha dll. (more embedded
computers than PCs!!!)
° Why not X86 (Intel, mikroprosesor paling populer)
• Terlalu rumit (complex): operasi beragam dan sangat banyak
variasinya
• Akses langsung ke register di PC kita? 
3
AVR Assembler
4
Bahasa Rakitan AVR
° Komputer (rangkaian dijital) hanya mengerti instruksi
mesin
° Assembly code: representasi tekstual (mudah dibaca
oleh manusia) dari instruksi mesin
• Setiap instruksi mesin (instruction sets) terdapat korespondensi
assembly code
• Kode tersebut: simbol dari operasi instruksi mesin
• Bahasa rakitan (assembly language): cara pemrograman
menggunakan assembly code (terdapat banyak bantuan untuk
memudahkan penulisan program).
° Assembler: sebuah program yang menerjemahkan
assembly code ke instruksi mesin.
5
Contoh Program
ldi
r16,0x8
ldi
r17,0x9
add
r16,r17
ldi
r18,0xff
sub
r18,r16
com r16
; r16 = 0x8 + 0x9 = 0x11
; r18 = 0xff - 0x11 = 0xee
; r16 = 0xee
nop
6
AVR Assembler: Kompilasi Program
7
Contoh Program.LST
000000 e008
ldi
r16,0x8
000001 e019
ldi
r17,0x9
000002 0f01
add
r16,r17
000003 ef2f
ldi
r18,0xff
000004 1b20
sub
r18,r16
000005 9500
com r16
000006 0000
nop
8
Pemrograman
Bahasa Rakitan AVR
9
Instruksi
° Bahasa Rakitan: setiap “statement” disebut
instruksi, merupakan eksekusi/operasi perintah
instruksi mesin
• Jadi setiap baris pada bahasa rakitan: berisi 1 (satu) perintah
saja (bandingkan dengan HLL!)
10
Syntax
° 1 instruksi per baris
° Format setiap baris instruksi:
1. [label:] directive
2. [label:] instruction
3. komentar
[operands]
[operands]
[komentar]
[komentar]
4. baris kosong
° Komentar:
; [Text]
° Huruf besar/kecil tidak dibedakan
11
Contoh Program
;***** Subroutine Register Variables
.def
A
=r13
.def
B
=r14
.def
cnt2
=r15
.def
cnt1
=r16
.def
endL
=r17
.def
endH
=r18
;***** Code
bubble:
mov
mov
mov
i_loop:
ld
ld
cp
brlo
st
std
L1:
dec
brne
dec
brne
ret
ZL,endL
ZH,endH
cnt2,cnt1
A,Z
B,-Z
A,B
L1
Z,A
Z+1,B
cnt2
i_loop
cnt1
bubble
;first value to be compared
;second value to be compared
;inner loop counter
;outer loop counter
;end of data array low address
;end of data array high address
;init Z pointer
;counter2 <- counter1
;get first byte, A (n)
;decrement Z and get second byte, B (n-1)
;compare A with B
;if A not lower
;store swapped
;end inner loop
;end outer loop
12
Directives
13
Peta Memori
Memori Program
Memori Data
° Program dan data ditempatkan pada memori yang
pengalamatannya terpisah
° Memori data mencakup Register, I/O, SRAM
Internal, SRAM Eksternal
14
CSEG, DSEG, ESEG
° The CSEG directive defines the start of a Code Segment
° An Assembler file can consist of several Code Segments,
which are concatenated into one Code Segment when
assembled
° The default segment type is Code
° Syntax:
.CSEG
° Example:
.DSEG
vartab:
; Start data segment
.BYTE 4
.CSEG
const:
; Reserve 4 bytes in SRAM
; Start code segment
.DW 2
; Write 0x0002 in prog.mem.
mov r1,r0
; Do something
15
ORG
° The ORG directive sets the location counter (within memory
segment) to an absolute value (as the parameter)
° If the directive is preceded by a label (on the same source
code line), the label will be given the value of the parameter
° The default values of the Code and EEPROM location
counters are zero, whereas the default value of the SRAM
location counter is 32 when the assembling is started
° Syntax:
.ORG
expression
° Example:
.DSEG
.ORG
variable:
.ESEG
.ORG
eevar:
.CSEG
.ORG
0x20
.DW 0xfeff
; Start data segment
; Set SRAM address to hex 67
; Reserve a byte at SRAM adr.67H
; Start EEPROM Segment
; Set EEPROM location counter
; Initialize one word
0x10
mov r0,r1
; Set Program Counter to hex 10
; Do something
0x67
.BYTE 1
16
BYTE
° The BYTE directive reserves memory resources in the SRAM
° In order to be able to refer to the reserved location, the BYTE
directive should be preceded by a label
° The directive can only be used within a Data Segment
° Syntax:
LABEL:
.BYTE expression
° Example:
.DSEG
var1:
.BYTE 1
; reserve 1 byte to var1
table:
.BYTE tab_size
; reserve tab_size bytes
ldi
r30,low(var1)
; Load Z register low
ldi
r31,high(var1)
; Load Z register high
ld
r1,Z
; Load VAR1 into register 1
.CSEG
17
DB, DW
° The DB directive reserves memory resources in the program
memory (CSEG) or the EEPROM (ESEG) memory
° The DB directive should be preceded by a label
° The DB directive takes a list of expressions, and must contain
at least one expression
° Each expression must evaluate to a number between -128 (2’s
complement) and 255
° Syntax:
LABEL:
.DB expressionlist
° Example:
.CSEG
consts:
.DB 0, 255, 0b01010101, -128, 0xaa
.ESEG
eeconst:
.DB 0xff
18
DEF
° The DEF directive allows the registers to be referred to
through symbols
° A defined symbol can be used in the rest of the program to
refer to the register it is assigned to
° A register can have several symbolic names attached to it
° A symbol can be redefined later in the program
° Syntax:
.DEF
Symbol=Register
° Example:
.DEF
.DEF
.CSEG
temp=R16
ior=R0
ldi temp,0xf0
in ior,0x3f
; Load 0xf0 into temp register
; Read SREG into ior register
eor temp,ior
; Exclusive or temp and ior
19
EQU
° The EQU directive assigns a value to a label
° This label can then be used in later expressions
° A label assigned to a value by the EQU directive is
a constant and can not be changed or redefined
° Syntax:
.EQU
label = expression
° Example:
.EQU
.EQU
io_offset = 0x23
porta = io_offset + 2
.CSEG
clr r2
out porta,r2
; Start code segment
; Clear register 2
; Write to Port A
20
SET
° The SET directive assigns a value to a label
° This label can then be used in later expressions
° A label assigned to a value by the SET directive can
be changed later in the program
° Syntax:
.SET
label = expression
° Example:
.SET
.SET
io_offset = 0x23
porta = io_offset + 2
.CSEG
clr r2
out porta,r2
; Start code segment
; Clear register 2
; Write to Port A
21
EXIT
° The EXIT directive tells the Assembler to stop
assembling the file
° Normally, the Assembler runs until end of file (EOF)
° Syntax:
.EXIT
° Example:
.EXIT
; Exit this file
22
MACRO, ENDMACRO
° The MACRO directive tells the Assembler that this is the start
of a Macro
° A Macro can take up to 10 parameters (referred to as @0-@9
within the Macro definition)
° The Macro definition is terminated by an ENDMACRO
directive
° Syntax:
.MACRO macroname
.ENDMACRO
° Example:
.MACRO
SUBI16
; Start macro definition
subi @1,low(@0)
; Subtract low byte
sbci @2,high(@0) ; Subtract high byte
.ENDMACRO
; End macro definition
.CSEG
; Start code segment
SUBI16 0x1234,r16,r17
; Sub.0x1234 from r17:r16
23
Expressions:
Operands, Operators, Functions
24
Operands
° Reminder:
1. [label:]
2. [label:]
directive
instruction
[operands]
[operands]
[komentar]
[komentar]
° User defined labels which are given the value of the
location counter at the place they appear
° User defined variables defined by the SET directive
° User defined constants defined by the EQU
directive
° Integer constants: constants can be given in
several formats, including
a) Decimal (default): 10, 255
b) Hexadecimal (two notations): 0x0a, $0a, 0xff, $ff
c) Binary: 0b00001010, 0b11111111
° PC (program counter) - the current value of the
Program memory location counter
25
Unary Operators
° Logical Not Symbol: !
• returns 1 if the expression was zero, and returns 0 if the expression
was nonzero
ldi r16,!0xf0
; Load r16 with 0x00
° Bitwise Not Symbol: ~
• returns the input expression with all bits inverted
ldi r16,~0xf0
; Load r16 with 0x0f
° Unary Minus Symbol: • returns the arithmetic negation of an expression
ldi r16,-2
; Load -2(0xfe) in r16
26
Binary Operators
° Multiplication Symbol: *
• returns the product of two expressions
ldi r30,label*2
; Load r30 with label*2
° Division Symbol: /
• returns the integer quotient of the left expression divided by the right
expression
ldi r30,label/2
; Load r30 with label/2
° Addition Symbol: +
• returns the sum of two expressions
ldi r30,c1+c2
; Load r30 with c1+c2
° Subtraction Symbol: • returns the left expression minus the right expression
ldi r17,c1-c2
;Load r17 with c1-c2
27
Binary Operators
° Shift left Symbol: <<
• returns the left expression shifted left a number of times given by the right
expression
Ldi r17,1<<bitmask ;Load r17 with 1 shifted left bitmask times
° Shift right Symbol: >>
• returns the left expression shifted right a number of times given by the right
expression.
ldi r17,c1>>c2
;Load r17 with c1 shifted right c2 times
° Less than Symbol: <
• returns 1 if the signed expression to the left is Less than the signed
expression to the right, 0 otherwise
ori r18,bitmask*(c1<c2)+1
;Or r18 with an expression
° Less or Equal Symbol: <=
• returns 1 if the signed expression to the left is Less than or Equal to the
signed expression to the right, 0 otherwise
ori r18,bitmask*(c1<=c2)+1 ;Or r18 with an expression
28
Binary Operators
° Greater than Symbol: >
• returns 1 if the signed expression to the left is Greater than the signed
expression to the right, 0 otherwise
ori r18,bitmask*(c1>c2)+1
;Or r18 with an expression
° Greater or Equal Symbol: >=
• returns 1 if the signed expression to the left isGreater than or Equal to the
signed expression to the right, 0 otherwise
ori r18,bitmask*(c1>=c2)+1 ;Or r18 with an expression
° Equal Symbol: ==
• returns 1 if the signed expression to the left is Equal to the signed expression
to the right, 0 otherwise
andi r19,bitmask*(c1==c2)+1;And r19 with an expression
° Not Equal Symbol: !=
• returns 1 if the signed expression to the left is Not Equal to the signed
expression to the right, 0 otherwise
.SET flag=(c1!=c2) ;Set flag to 1 or 0
29
Binary Operators
° Bitwise And Symbol: &
• returns the bitwise And between two expressions
ldi r18,High(c1&c2) ;Load r18 with an expression
° Bitwise Xor Symbol: ^
• returns the bitwise Exclusive Or between two expressions
ldi r18,Low(c1^c2)
;Load r18 with an expression
° Bitwise Or Symbol: |
• returns the bitwise Or between two expressions
ldi r18,Low(c1|c2)
;Load r18 with an expression
° Logical And Symbol: &&
• returns 1 if the expressions are both nonzero, 0 otherwise
ldi r18,Low(c1&&c2) ;Load r18 with an expression
° Logical Or Symbol: ||
• returns 1 if one or both of the expressions are nonzero, 0 otherwise
ldi r18,Low(c1||c2)
;Load r18 with an expression
30
Functions
° LOW(expression)
returns the low byte of an expression
° HIGH(expression)
returns the second byte of an expression
° BYTE2(expression)
is the same function as HIGH
° BYTE3(expression)
returns the third byte of an expression
° BYTE4(expression)
returns the fourth byte of an expression
° LWRD(expression)
returns bits 0-15 of an expression
° HWRD(expression)
returns bits 16-31 of an expression
° PAGE(expression)
returns bits 16-21 of an expression
° EXP2(expression)
returns 2 to the power of expression
° LOG2(expression)
returns the integer part of log2(expression)
31
AVR Studio
32
AVR Studio: Eksekusi Program
33
Inspeksi Status Prosesor
° Status Prosesor dapat dilihat pada window “Processor”:
34
Inspeksi Isi Register
° Isi Register dapat dilihat pada window “Register”:
35
Inspeksi Isi Memori
° Isi Memori dapat dilihat pada window “Memory”:
36