* doc/as.texinfo: Fix cross reference usage, typos and grammar.
[deliverable/binutils-gdb.git] / gas / doc / c-avr.texi
CommitLineData
8473f7a4
DC
1@c Copyright 2006
2@c Free Software Foundation, Inc.
3@c This is part of the GAS manual.
4@c For copying conditions, see the file as.texinfo.
5
6@ifset GENERIC
7@page
8@node AVR-Dependent
9@chapter AVR Dependent Features
10@end ifset
11
12@ifclear GENERIC
13@node Machine Dependencies
14@chapter AVR Dependent Features
15@end ifclear
16
17@cindex AVR support
18@menu
19* AVR Options:: Options
20* AVR Syntax:: Syntax
21* AVR Opcodes:: Opcodes
22@end menu
23
24@node AVR Options
25@section Options
26@cindex AVR options (none)
27@cindex options for AVR (none)
28
29@table @code
30
31@cindex @code{-mmcu=} command line option, AVR
32@item -mmcu=@var{mcu}
33Specify ATMEL AVR instruction set or MCU type.
34
35Instruction set avr1 is for the minimal AVR core, not supported by the C
36compiler, only for assembler programs (MCU types: at90s1200, attiny10,
37attiny11, attiny12, attiny15, attiny28).
38
39Instruction set avr2 (default) is for the classic AVR core with up to
408K program memory space (MCU types: at90s2313, at90s2323, attiny22,
41attiny26, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
42at90s8515, at90c8534, at90s8535, at86rf401, attiny13, attiny2313,
43attiny261, attiny461, attiny861, attiny24, attiny44, attiny84, attiny25,
44attiny45, attiny85).
45
46Instruction set avr3 is for the classic AVR core with up to 128K program
47memory space (MCU types: atmega103, atmega603, at43usb320, at43usb355,
48at76c711).
49
50Instruction set avr4 is for the enhanced AVR core with up to 8K program
51memory space (MCU types: atmega48, atmega8, atmega83, atmega85, atmega88,
52atmega8515, atmega8535, at90pwm2, at90pwm3).
53
54Instruction set avr5 is for the enhanced AVR core with up to 128K program
55memory space (MCU types: atmega16, atmega161, atmega162, atmega163,
026dcbd7
DC
56atmega164p, atmega165, atmega165p, atmega168, atmega169, atmega169p,
57atmega32, atmega323, atmega324p, atmega325, atmega329, atmega3250,
58atmega3290, atmega406, atmega64, atmega640, atmega644, atmega644p,
59atmega128, atmega1280, atmega1281, atmega645, atmega649, atmega6450,
60atmega6490, at90can32, at90can64, at90can128, at90usb646, at90usb647,
61at90usb1286, at90usb1287, at94k).
62
63Instruction set avr6 is for the enhanced AVR core with 256K program
64memory space (MCU types: atmega2560, atmega2561).
8473f7a4
DC
65
66@cindex @code{-mall-opcodes} command line option, AVR
67@item -mall-opcodes
68Accept all AVR opcodes, even if not supported by @code{-mmcu}.
69
70@cindex @code{-mno-skip-bug} command line option, AVR
71@item -mno-skip-bug
72This option disable warnings for skipping two-word instructions.
73
74@cindex @code{-mno-wrap} command line option, AVR
75@item -mno-wrap
76This option reject @code{rjmp/rcall} instructions with 8K wrap-around.
77
78@end table
79
80
81@node AVR Syntax
82@section Syntax
83@menu
84* AVR-Chars:: Special Characters
85* AVR-Regs:: Register Names
86* AVR-Modifiers:: Relocatable Expression Modifiers
87@end menu
88
89@node AVR-Chars
90@subsection Special Characters
91
92@cindex line comment character, AVR
93@cindex AVR line comment character
94
95The presence of a @samp{;} on a line indicates the start of a comment
96that extends to the end of the current line. If a @samp{#} appears as
97the first character of a line, the whole line is treated as a comment.
98
99@cindex line separator, AVR
100@cindex statement separator, AVR
101@cindex AVR line separator
102
103The @samp{$} character can be used instead of a newline to separate
104statements.
105
106@node AVR-Regs
107@subsection Register Names
108
109@cindex AVR register names
110@cindex register names, AVR
111
b45619c0 112The AVR has 32 x 8-bit general purpose working registers @samp{r0},
8473f7a4
DC
113@samp{r1}, ... @samp{r31}.
114Six of the 32 registers can be used as three 16-bit indirect address
115register pointers for Data Space addressing. One of the these address
116pointers can also be used as an address pointer for look up tables in
117Flash program memory. These added function registers are the 16-bit
118@samp{X}, @samp{Y} and @samp{Z} - registers.
119
120@smallexample
121X = @r{r26:r27}
122Y = @r{r28:r29}
123Z = @r{r30:r31}
124@end smallexample
125
126@node AVR-Modifiers
127@subsection Relocatable Expression Modifiers
128
129@cindex AVR modifiers
130@cindex syntax, AVR
131
132The assembler supports several modifiers when using relocatable addresses
133in AVR instruction operands. The general syntax is the following:
134
135@smallexample
136modifier(relocatable-expression)
137@end smallexample
138
139@table @code
140@cindex symbol modifiers
141
142@item lo8
143
144This modifier allows you to use bits 0 through 7 of
145an address expression as 8 bit relocatable expression.
146
147@item hi8
148
149This modifier allows you to use bits 7 through 15 of an address expression
150as 8 bit relocatable expression. This is useful with, for example, the
151AVR @samp{ldi} instruction and @samp{lo8} modifier.
152
153For example
154
155@smallexample
156ldi r26, lo8(sym+10)
157ldi r27, hi8(sym+10)
158@end smallexample
159
160@item hh8
161
162This modifier allows you to use bits 16 through 23 of
163an address expression as 8 bit relocatable expression.
164Also, can be useful for loading 32 bit constants.
165
166@item hlo8
167
168Synonym of @samp{hh8}.
169
170@item hhi8
171
172This modifier allows you to use bits 24 through 31 of
173an expression as 8 bit expression. This is useful with, for example, the
174AVR @samp{ldi} instruction and @samp{lo8}, @samp{hi8}, @samp{hlo8},
175@samp{hhi8}, modifier.
176
177For example
178
179@smallexample
180ldi r26, lo8(285774925)
181ldi r27, hi8(285774925)
182ldi r28, hlo8(285774925)
183ldi r29, hhi8(285774925)
184; r29,r28,r27,r26 = 285774925
185@end smallexample
186
187@item pm_lo8
188
189This modifier allows you to use bits 0 through 7 of
190an address expression as 8 bit relocatable expression.
191This modifier useful for addressing data or code from
192Flash/Program memory. The using of @samp{pm_lo8} similar
193to @samp{lo8}.
194
195@item pm_hi8
196
197This modifier allows you to use bits 8 through 15 of
198an address expression as 8 bit relocatable expression.
199This modifier useful for addressing data or code from
200Flash/Program memory.
201
202@item pm_hh8
203
204This modifier allows you to use bits 15 through 23 of
205an address expression as 8 bit relocatable expression.
206This modifier useful for addressing data or code from
207Flash/Program memory.
208
209@end table
210
211@node AVR Opcodes
212@section Opcodes
213
214@cindex AVR opcode summary
215@cindex opcode summary, AVR
216@cindex mnemonics, AVR
217@cindex instruction summary, AVR
218For detailed information on the AVR machine instruction set, see
219@url{www.atmel.com/products/AVR}.
220
221@code{@value{AS}} implements all the standard AVR opcodes.
222The following table summarizes the AVR opcodes, and their arguments.
223
224@smallexample
225@i{Legend:}
226 r @r{any register}
227 d @r{`ldi' register (r16-r31)}
228 v @r{`movw' even register (r0, r2, ..., r28, r30)}
229 a @r{`fmul' register (r16-r23)}
230 w @r{`adiw' register (r24,r26,r28,r30)}
231 e @r{pointer registers (X,Y,Z)}
232 b @r{base pointer register and displacement ([YZ]+disp)}
233 z @r{Z pointer register (for [e]lpm Rd,Z[+])}
234 M @r{immediate value from 0 to 255}
235 n @r{immediate value from 0 to 255 ( n = ~M ). Relocation impossible}
236 s @r{immediate value from 0 to 7}
237 P @r{Port address value from 0 to 63. (in, out)}
238 p @r{Port address value from 0 to 31. (cbi, sbi, sbic, sbis)}
239 K @r{immediate value from 0 to 63 (used in `adiw', `sbiw')}
240 i @r{immediate value}
241 l @r{signed pc relative offset from -64 to 63}
242 L @r{signed pc relative offset from -2048 to 2047}
243 h @r{absolute code address (call, jmp)}
244 S @r{immediate value from 0 to 7 (S = s << 4)}
245 ? @r{use this opcode entry if no parameters, else use next opcode entry}
246
2471001010010001000 clc
2481001010011011000 clh
2491001010011111000 cli
2501001010010101000 cln
2511001010011001000 cls
2521001010011101000 clt
2531001010010111000 clv
2541001010010011000 clz
2551001010000001000 sec
2561001010001011000 seh
2571001010001111000 sei
2581001010000101000 sen
2591001010001001000 ses
2601001010001101000 set
2611001010000111000 sev
2621001010000011000 sez
263100101001SSS1000 bclr S
264100101000SSS1000 bset S
2651001010100001001 icall
2661001010000001001 ijmp
2671001010111001000 lpm ?
2681001000ddddd010+ lpm r,z
2691001010111011000 elpm ?
2701001000ddddd011+ elpm r,z
2710000000000000000 nop
2721001010100001000 ret
2731001010100011000 reti
2741001010110001000 sleep
2751001010110011000 break
2761001010110101000 wdr
2771001010111101000 spm
278000111rdddddrrrr adc r,r
279000011rdddddrrrr add r,r
280001000rdddddrrrr and r,r
281000101rdddddrrrr cp r,r
282000001rdddddrrrr cpc r,r
283000100rdddddrrrr cpse r,r
284001001rdddddrrrr eor r,r
285001011rdddddrrrr mov r,r
286100111rdddddrrrr mul r,r
287001010rdddddrrrr or r,r
288000010rdddddrrrr sbc r,r
289000110rdddddrrrr sub r,r
290001001rdddddrrrr clr r
291000011rdddddrrrr lsl r
292000111rdddddrrrr rol r
293001000rdddddrrrr tst r
2940111KKKKddddKKKK andi d,M
2950111KKKKddddKKKK cbr d,n
2961110KKKKddddKKKK ldi d,M
29711101111dddd1111 ser d
2980110KKKKddddKKKK ori d,M
2990110KKKKddddKKKK sbr d,M
3000011KKKKddddKKKK cpi d,M
3010100KKKKddddKKKK sbci d,M
3020101KKKKddddKKKK subi d,M
3031111110rrrrr0sss sbrc r,s
3041111111rrrrr0sss sbrs r,s
3051111100ddddd0sss bld r,s
3061111101ddddd0sss bst r,s
30710110PPdddddPPPP in r,P
30810111PPrrrrrPPPP out P,r
30910010110KKddKKKK adiw w,K
31010010111KKddKKKK sbiw w,K
31110011000pppppsss cbi p,s
31210011010pppppsss sbi p,s
31310011001pppppsss sbic p,s
31410011011pppppsss sbis p,s
315111101lllllll000 brcc l
316111100lllllll000 brcs l
317111100lllllll001 breq l
318111101lllllll100 brge l
319111101lllllll101 brhc l
320111100lllllll101 brhs l
321111101lllllll111 brid l
322111100lllllll111 brie l
323111100lllllll000 brlo l
324111100lllllll100 brlt l
325111100lllllll010 brmi l
326111101lllllll001 brne l
327111101lllllll010 brpl l
328111101lllllll000 brsh l
329111101lllllll110 brtc l
330111100lllllll110 brts l
331111101lllllll011 brvc l
332111100lllllll011 brvs l
333111101lllllllsss brbc s,l
334111100lllllllsss brbs s,l
3351101LLLLLLLLLLLL rcall L
3361100LLLLLLLLLLLL rjmp L
3371001010hhhhh111h call h
3381001010hhhhh110h jmp h
3391001010rrrrr0101 asr r
3401001010rrrrr0000 com r
3411001010rrrrr1010 dec r
3421001010rrrrr0011 inc r
3431001010rrrrr0110 lsr r
3441001010rrrrr0001 neg r
3451001000rrrrr1111 pop r
3461001001rrrrr1111 push r
3471001010rrrrr0111 ror r
3481001010rrrrr0010 swap r
34900000001ddddrrrr movw v,v
35000000010ddddrrrr muls d,d
351000000110ddd0rrr mulsu a,a
352000000110ddd1rrr fmul a,a
353000000111ddd0rrr fmuls a,a
354000000111ddd1rrr fmulsu a,a
3551001001ddddd0000 sts i,r
3561001000ddddd0000 lds r,i
35710o0oo0dddddbooo ldd r,b
358100!000dddddee-+ ld r,e
35910o0oo1rrrrrbooo std b,r
360100!001rrrrree-+ st e,r
3611001010100011001 eicall
3621001010000011001 eijmp
363@end smallexample
This page took 0.042236 seconds and 4 git commands to generate.