* config/tc-avr.c: Add specified_mcu variable for selected mcu.
[deliverable/binutils-gdb.git] / gas / doc / c-avr.texi
CommitLineData
4b95cf5c 1@c Copyright (C) 2006-2014 Free Software Foundation, Inc.
8473f7a4
DC
2@c This is part of the GAS manual.
3@c For copying conditions, see the file as.texinfo.
4
5@ifset GENERIC
6@page
7@node AVR-Dependent
8@chapter AVR Dependent Features
9@end ifset
10
11@ifclear GENERIC
12@node Machine Dependencies
13@chapter AVR Dependent Features
14@end ifclear
15
16@cindex AVR support
17@menu
18* AVR Options:: Options
19* AVR Syntax:: Syntax
20* AVR Opcodes:: Opcodes
21@end menu
22
23@node AVR Options
24@section Options
25@cindex AVR options (none)
26@cindex options for AVR (none)
27
28@table @code
29
30@cindex @code{-mmcu=} command line option, AVR
31@item -mmcu=@var{mcu}
32Specify ATMEL AVR instruction set or MCU type.
33
34Instruction set avr1 is for the minimal AVR core, not supported by the C
7f5ba16d 35compiler, only for assembler programs (MCU types: at90s1200,
8473f7a4
DC
36attiny11, attiny12, attiny15, attiny28).
37
38Instruction set avr2 (default) is for the classic AVR core with up to
7b21ac3f
EW
398K program memory space (MCU types: at90s2313, at90s2323, at90s2333, at90s2343,
40attiny22, attiny26, at90s4414, at90s4433, at90s4434, at90s8515, at90c8534,
41at90s8535).
42
43Instruction set avr25 is for the classic AVR core with up to 8K program memory
44space plus the MOVW instruction (MCU types: attiny13, attiny13a, attiny2313,
8453da2e 45attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84,
e760a81b
EW
46attiny84a, attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461,
47attiny461a, attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
255d9eec 48attiny828, at86rf401, ata6289, ata5272).
8473f7a4
DC
49
50Instruction set avr3 is for the classic AVR core with up to 128K program
7b21ac3f
EW
51memory space (MCU types: at43usb355, at76c711).
52
53Instruction set avr31 is for the classic AVR core with exactly 128K program
54memory space (MCU types: atmega103, at43usb320).
55
56Instruction set avr35 is for classic AVR core plus MOVW, CALL, and JMP
255d9eec
DC
57instructions (MCU types: attiny167, attiny1634, at90usb82, at90usb162,
58atmega8u2, atmega16u2, atmega32u2, ata5505).
8473f7a4
DC
59
60Instruction set avr4 is for the enhanced AVR core with up to 8K program
255d9eec
DC
61memory space (MCU types: atmega48, atmega48a, atmega48pa, atmega48p, atmega8,
62atmega8a, atmega88, atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535,
63atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81,
64ata6285, ata6286).
8473f7a4
DC
65
66Instruction set avr5 is for the enhanced AVR core with up to 128K program
255d9eec
DC
67memory space (MCU types: at90pwm161, atmega16, atmega16a, atmega161, atmega162,
68atmega163, atmega164a, atmega164p, atmega164pa, atmega165, atmega165a,
69atmega165p, atmega165pa, atmega168, atmega168a, atmega168p, atmega168pa,
70atmega169, atmega169a, atmega169p, atmega169pa, atmega32, atmega323, atmega324a,
71atmega324p, atmega324pa, atmega325, atmega325a, atmega32, atmega32a, atmega323,
72atmega324a, atmega324p, atmega324pa, atmega325, atmega325a, atmega325p,
73atmega325p, atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa,
74atmega328, atmega328p, atmega329, atmega329a, atmega329p, atmega329pa,
75atmega3290a, atmega3290p, atmega3290pa, atmega406, atmega64, atmega64a,
76atmega64rfr2, atmega644rfr2, atmega640, atmega644, atmega644a, atmega644p,
77atmega644pa, atmega645, atmega645a, atmega645p, atmega6450, atmega6450a,
78atmega6450p, atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
79atmega6490p, atmega16hva, atmega16hva2, atmega16hvb, atmega16hvbrevb,
80atmega32hvb, atmega32hvbrevb, atmega64hve, at90can32, at90can64, at90pwm161,
81at90pwm216, at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1,
82atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
83at90scr100, ata5790, ata5795).
7b21ac3f
EW
84
85Instruction set avr51 is for the enhanced AVR core with exactly 128K program
255d9eec
DC
86memory space (MCU types: atmega128, atmega128a, atmega1280, atmega1281,
87atmega1284, atmega1284p, atmega128rfa1, atmega128rfr2, atmega1284rfr2,
4d13caa0 88at90can128, at90usb1286, at90usb1287, m3000).
7b21ac3f
EW
89
90Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
255d9eec 91atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2).
8473f7a4 92
8cc66334 93Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program
255d9eec
DC
94memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16a4u,
95atxmega16c4, atxmega16d4, atxmega16x1, atxmega32a4, atxmega32a4u, atxmega32c4,
96atxmega32d4, atxmega16e5, atxmega8e5, atxmega32e5, atxmega32x1).
8cc66334
EW
97
98Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program
6f8a4444 99memory space and greater than 64K data space (MCU types: none).
8cc66334
EW
100
101Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program
255d9eec
DC
102memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64a3u,
103atxmega64a4u, atxmega64b1, atxmega64b3, atxmega64c3, atxmega64d3, atxmega64d4).
8cc66334 104
34bca508 105Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program
6f8a4444
EW
106memory space and greater than 64K data space (MCU types: atxmega64a1,
107atxmega64a1u).
8cc66334 108
255d9eec
DC
109Instruction set avrxmega6 is for the XMEGA AVR core with larger than 64K program
110memory space and less than 64K data space (MCU types: atxmega128a3,
111atxmega128a3u, atxmega128c3, atxmega128d3, atxmega128d4, atxmega192a3,
112atxmega192a3u, atxmega128b1, atxmega128b3, atxmega192c3, atxmega192d3,
113atxmega256a3, atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3,
114atxmega256d3, atxmega384c3, atxmega256d3).
8cc66334 115
255d9eec 116Instruction set avrxmega7 is for the XMEGA AVR core with larger than 64K program
6f8a4444 117memory space and greater than 64K data space (MCU types: atxmega128a1,
255d9eec 118atxmega128a1u, atxmega128a4u).
8cc66334 119
8473f7a4
DC
120@cindex @code{-mall-opcodes} command line option, AVR
121@item -mall-opcodes
122Accept all AVR opcodes, even if not supported by @code{-mmcu}.
123
124@cindex @code{-mno-skip-bug} command line option, AVR
125@item -mno-skip-bug
126This option disable warnings for skipping two-word instructions.
127
128@cindex @code{-mno-wrap} command line option, AVR
129@item -mno-wrap
130This option reject @code{rjmp/rcall} instructions with 8K wrap-around.
131
af910977
DC
132@cindex @code{-mrmw} command line option, AVR
133@item -mrmw
134Accept Read-Modify-Write (@code{XCH,LAC,LAS,LAT}) instructions.
135
8473f7a4
DC
136@end table
137
138
139@node AVR Syntax
140@section Syntax
141@menu
142* AVR-Chars:: Special Characters
143* AVR-Regs:: Register Names
144* AVR-Modifiers:: Relocatable Expression Modifiers
145@end menu
146
147@node AVR-Chars
148@subsection Special Characters
149
150@cindex line comment character, AVR
151@cindex AVR line comment character
152
7c31ae13
NC
153The presence of a @samp{;} anywhere on a line indicates the start of a
154comment that extends to the end of that line.
155
156If a @samp{#} appears as the first character of a line, the whole line
157is treated as a comment, but in this case the line can also be a
158logical line number directive (@pxref{Comments}) or a preprocessor
159control command (@pxref{Preprocessing}).
8473f7a4
DC
160
161@cindex line separator, AVR
162@cindex statement separator, AVR
163@cindex AVR line separator
164
165The @samp{$} character can be used instead of a newline to separate
166statements.
167
168@node AVR-Regs
169@subsection Register Names
170
171@cindex AVR register names
172@cindex register names, AVR
173
b45619c0 174The AVR has 32 x 8-bit general purpose working registers @samp{r0},
8473f7a4
DC
175@samp{r1}, ... @samp{r31}.
176Six of the 32 registers can be used as three 16-bit indirect address
177register pointers for Data Space addressing. One of the these address
178pointers can also be used as an address pointer for look up tables in
179Flash program memory. These added function registers are the 16-bit
180@samp{X}, @samp{Y} and @samp{Z} - registers.
181
182@smallexample
183X = @r{r26:r27}
184Y = @r{r28:r29}
185Z = @r{r30:r31}
186@end smallexample
187
188@node AVR-Modifiers
189@subsection Relocatable Expression Modifiers
190
191@cindex AVR modifiers
192@cindex syntax, AVR
193
194The assembler supports several modifiers when using relocatable addresses
195in AVR instruction operands. The general syntax is the following:
196
197@smallexample
198modifier(relocatable-expression)
199@end smallexample
200
201@table @code
202@cindex symbol modifiers
203
204@item lo8
205
206This modifier allows you to use bits 0 through 7 of
207an address expression as 8 bit relocatable expression.
208
209@item hi8
210
211This modifier allows you to use bits 7 through 15 of an address expression
212as 8 bit relocatable expression. This is useful with, for example, the
213AVR @samp{ldi} instruction and @samp{lo8} modifier.
214
215For example
216
217@smallexample
218ldi r26, lo8(sym+10)
219ldi r27, hi8(sym+10)
220@end smallexample
221
222@item hh8
223
224This modifier allows you to use bits 16 through 23 of
225an address expression as 8 bit relocatable expression.
226Also, can be useful for loading 32 bit constants.
227
228@item hlo8
229
230Synonym of @samp{hh8}.
231
232@item hhi8
233
234This modifier allows you to use bits 24 through 31 of
235an expression as 8 bit expression. This is useful with, for example, the
236AVR @samp{ldi} instruction and @samp{lo8}, @samp{hi8}, @samp{hlo8},
237@samp{hhi8}, modifier.
238
239For example
240
241@smallexample
242ldi r26, lo8(285774925)
243ldi r27, hi8(285774925)
244ldi r28, hlo8(285774925)
245ldi r29, hhi8(285774925)
246; r29,r28,r27,r26 = 285774925
247@end smallexample
248
249@item pm_lo8
250
251This modifier allows you to use bits 0 through 7 of
252an address expression as 8 bit relocatable expression.
253This modifier useful for addressing data or code from
254Flash/Program memory. The using of @samp{pm_lo8} similar
255to @samp{lo8}.
256
257@item pm_hi8
258
259This modifier allows you to use bits 8 through 15 of
260an address expression as 8 bit relocatable expression.
261This modifier useful for addressing data or code from
262Flash/Program memory.
263
264@item pm_hh8
265
266This modifier allows you to use bits 15 through 23 of
267an address expression as 8 bit relocatable expression.
268This modifier useful for addressing data or code from
269Flash/Program memory.
270
271@end table
272
273@node AVR Opcodes
274@section Opcodes
275
276@cindex AVR opcode summary
277@cindex opcode summary, AVR
278@cindex mnemonics, AVR
279@cindex instruction summary, AVR
280For detailed information on the AVR machine instruction set, see
281@url{www.atmel.com/products/AVR}.
282
283@code{@value{AS}} implements all the standard AVR opcodes.
284The following table summarizes the AVR opcodes, and their arguments.
285
286@smallexample
287@i{Legend:}
288 r @r{any register}
289 d @r{`ldi' register (r16-r31)}
290 v @r{`movw' even register (r0, r2, ..., r28, r30)}
291 a @r{`fmul' register (r16-r23)}
292 w @r{`adiw' register (r24,r26,r28,r30)}
293 e @r{pointer registers (X,Y,Z)}
294 b @r{base pointer register and displacement ([YZ]+disp)}
295 z @r{Z pointer register (for [e]lpm Rd,Z[+])}
296 M @r{immediate value from 0 to 255}
297 n @r{immediate value from 0 to 255 ( n = ~M ). Relocation impossible}
298 s @r{immediate value from 0 to 7}
299 P @r{Port address value from 0 to 63. (in, out)}
300 p @r{Port address value from 0 to 31. (cbi, sbi, sbic, sbis)}
301 K @r{immediate value from 0 to 63 (used in `adiw', `sbiw')}
302 i @r{immediate value}
303 l @r{signed pc relative offset from -64 to 63}
304 L @r{signed pc relative offset from -2048 to 2047}
305 h @r{absolute code address (call, jmp)}
306 S @r{immediate value from 0 to 7 (S = s << 4)}
307 ? @r{use this opcode entry if no parameters, else use next opcode entry}
308
34bca508
L
3091001010010001000 clc
3101001010011011000 clh
3111001010011111000 cli
3121001010010101000 cln
3131001010011001000 cls
3141001010011101000 clt
3151001010010111000 clv
3161001010010011000 clz
3171001010000001000 sec
3181001010001011000 seh
3191001010001111000 sei
3201001010000101000 sen
3211001010001001000 ses
3221001010001101000 set
3231001010000111000 sev
3241001010000011000 sez
8473f7a4
DC
325100101001SSS1000 bclr S
326100101000SSS1000 bset S
3271001010100001001 icall
34bca508 3281001010000001001 ijmp
8473f7a4
DC
3291001010111001000 lpm ?
3301001000ddddd010+ lpm r,z
3311001010111011000 elpm ?
3321001000ddddd011+ elpm r,z
34bca508
L
3330000000000000000 nop
3341001010100001000 ret
3351001010100011000 reti
8473f7a4
DC
3361001010110001000 sleep
3371001010110011000 break
34bca508
L
3381001010110101000 wdr
3391001010111101000 spm
8473f7a4
DC
340000111rdddddrrrr adc r,r
341000011rdddddrrrr add r,r
342001000rdddddrrrr and r,r
343000101rdddddrrrr cp r,r
344000001rdddddrrrr cpc r,r
345000100rdddddrrrr cpse r,r
346001001rdddddrrrr eor r,r
347001011rdddddrrrr mov r,r
348100111rdddddrrrr mul r,r
349001010rdddddrrrr or r,r
350000010rdddddrrrr sbc r,r
351000110rdddddrrrr sub r,r
352001001rdddddrrrr clr r
353000011rdddddrrrr lsl r
354000111rdddddrrrr rol r
355001000rdddddrrrr tst r
3560111KKKKddddKKKK andi d,M
3570111KKKKddddKKKK cbr d,n
3581110KKKKddddKKKK ldi d,M
35911101111dddd1111 ser d
3600110KKKKddddKKKK ori d,M
3610110KKKKddddKKKK sbr d,M
3620011KKKKddddKKKK cpi d,M
3630100KKKKddddKKKK sbci d,M
3640101KKKKddddKKKK subi d,M
3651111110rrrrr0sss sbrc r,s
3661111111rrrrr0sss sbrs r,s
3671111100ddddd0sss bld r,s
3681111101ddddd0sss bst r,s
36910110PPdddddPPPP in r,P
37010111PPrrrrrPPPP out P,r
37110010110KKddKKKK adiw w,K
37210010111KKddKKKK sbiw w,K
37310011000pppppsss cbi p,s
37410011010pppppsss sbi p,s
37510011001pppppsss sbic p,s
37610011011pppppsss sbis p,s
377111101lllllll000 brcc l
378111100lllllll000 brcs l
379111100lllllll001 breq l
380111101lllllll100 brge l
381111101lllllll101 brhc l
382111100lllllll101 brhs l
383111101lllllll111 brid l
384111100lllllll111 brie l
385111100lllllll000 brlo l
386111100lllllll100 brlt l
387111100lllllll010 brmi l
388111101lllllll001 brne l
389111101lllllll010 brpl l
390111101lllllll000 brsh l
391111101lllllll110 brtc l
392111100lllllll110 brts l
393111101lllllll011 brvc l
394111100lllllll011 brvs l
395111101lllllllsss brbc s,l
396111100lllllllsss brbs s,l
3971101LLLLLLLLLLLL rcall L
3981100LLLLLLLLLLLL rjmp L
3991001010hhhhh111h call h
4001001010hhhhh110h jmp h
4011001010rrrrr0101 asr r
4021001010rrrrr0000 com r
4031001010rrrrr1010 dec r
4041001010rrrrr0011 inc r
4051001010rrrrr0110 lsr r
4061001010rrrrr0001 neg r
4071001000rrrrr1111 pop r
4081001001rrrrr1111 push r
4091001010rrrrr0111 ror r
4101001010rrrrr0010 swap r
41100000001ddddrrrr movw v,v
41200000010ddddrrrr muls d,d
413000000110ddd0rrr mulsu a,a
414000000110ddd1rrr fmul a,a
415000000111ddd0rrr fmuls a,a
416000000111ddd1rrr fmulsu a,a
4171001001ddddd0000 sts i,r
4181001000ddddd0000 lds r,i
41910o0oo0dddddbooo ldd r,b
420100!000dddddee-+ ld r,e
42110o0oo1rrrrrbooo std b,r
422100!001rrrrree-+ st e,r
34bca508
L
4231001010100011001 eicall
4241001010000011001 eijmp
8473f7a4 425@end smallexample
This page took 0.33825 seconds and 4 git commands to generate.