* gas/ChangeLog: Revert
[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
132@end table
133
134
135@node AVR Syntax
136@section Syntax
137@menu
138* AVR-Chars:: Special Characters
139* AVR-Regs:: Register Names
140* AVR-Modifiers:: Relocatable Expression Modifiers
141@end menu
142
143@node AVR-Chars
144@subsection Special Characters
145
146@cindex line comment character, AVR
147@cindex AVR line comment character
148
7c31ae13
NC
149The presence of a @samp{;} anywhere on a line indicates the start of a
150comment that extends to the end of that line.
151
152If a @samp{#} appears as the first character of a line, the whole line
153is treated as a comment, but in this case the line can also be a
154logical line number directive (@pxref{Comments}) or a preprocessor
155control command (@pxref{Preprocessing}).
8473f7a4
DC
156
157@cindex line separator, AVR
158@cindex statement separator, AVR
159@cindex AVR line separator
160
161The @samp{$} character can be used instead of a newline to separate
162statements.
163
164@node AVR-Regs
165@subsection Register Names
166
167@cindex AVR register names
168@cindex register names, AVR
169
b45619c0 170The AVR has 32 x 8-bit general purpose working registers @samp{r0},
8473f7a4
DC
171@samp{r1}, ... @samp{r31}.
172Six of the 32 registers can be used as three 16-bit indirect address
173register pointers for Data Space addressing. One of the these address
174pointers can also be used as an address pointer for look up tables in
175Flash program memory. These added function registers are the 16-bit
176@samp{X}, @samp{Y} and @samp{Z} - registers.
177
178@smallexample
179X = @r{r26:r27}
180Y = @r{r28:r29}
181Z = @r{r30:r31}
182@end smallexample
183
184@node AVR-Modifiers
185@subsection Relocatable Expression Modifiers
186
187@cindex AVR modifiers
188@cindex syntax, AVR
189
190The assembler supports several modifiers when using relocatable addresses
191in AVR instruction operands. The general syntax is the following:
192
193@smallexample
194modifier(relocatable-expression)
195@end smallexample
196
197@table @code
198@cindex symbol modifiers
199
200@item lo8
201
202This modifier allows you to use bits 0 through 7 of
203an address expression as 8 bit relocatable expression.
204
205@item hi8
206
207This modifier allows you to use bits 7 through 15 of an address expression
208as 8 bit relocatable expression. This is useful with, for example, the
209AVR @samp{ldi} instruction and @samp{lo8} modifier.
210
211For example
212
213@smallexample
214ldi r26, lo8(sym+10)
215ldi r27, hi8(sym+10)
216@end smallexample
217
218@item hh8
219
220This modifier allows you to use bits 16 through 23 of
221an address expression as 8 bit relocatable expression.
222Also, can be useful for loading 32 bit constants.
223
224@item hlo8
225
226Synonym of @samp{hh8}.
227
228@item hhi8
229
230This modifier allows you to use bits 24 through 31 of
231an expression as 8 bit expression. This is useful with, for example, the
232AVR @samp{ldi} instruction and @samp{lo8}, @samp{hi8}, @samp{hlo8},
233@samp{hhi8}, modifier.
234
235For example
236
237@smallexample
238ldi r26, lo8(285774925)
239ldi r27, hi8(285774925)
240ldi r28, hlo8(285774925)
241ldi r29, hhi8(285774925)
242; r29,r28,r27,r26 = 285774925
243@end smallexample
244
245@item pm_lo8
246
247This modifier allows you to use bits 0 through 7 of
248an address expression as 8 bit relocatable expression.
249This modifier useful for addressing data or code from
250Flash/Program memory. The using of @samp{pm_lo8} similar
251to @samp{lo8}.
252
253@item pm_hi8
254
255This modifier allows you to use bits 8 through 15 of
256an address expression as 8 bit relocatable expression.
257This modifier useful for addressing data or code from
258Flash/Program memory.
259
260@item pm_hh8
261
262This modifier allows you to use bits 15 through 23 of
263an address expression as 8 bit relocatable expression.
264This modifier useful for addressing data or code from
265Flash/Program memory.
266
267@end table
268
269@node AVR Opcodes
270@section Opcodes
271
272@cindex AVR opcode summary
273@cindex opcode summary, AVR
274@cindex mnemonics, AVR
275@cindex instruction summary, AVR
276For detailed information on the AVR machine instruction set, see
277@url{www.atmel.com/products/AVR}.
278
279@code{@value{AS}} implements all the standard AVR opcodes.
280The following table summarizes the AVR opcodes, and their arguments.
281
282@smallexample
283@i{Legend:}
284 r @r{any register}
285 d @r{`ldi' register (r16-r31)}
286 v @r{`movw' even register (r0, r2, ..., r28, r30)}
287 a @r{`fmul' register (r16-r23)}
288 w @r{`adiw' register (r24,r26,r28,r30)}
289 e @r{pointer registers (X,Y,Z)}
290 b @r{base pointer register and displacement ([YZ]+disp)}
291 z @r{Z pointer register (for [e]lpm Rd,Z[+])}
292 M @r{immediate value from 0 to 255}
293 n @r{immediate value from 0 to 255 ( n = ~M ). Relocation impossible}
294 s @r{immediate value from 0 to 7}
295 P @r{Port address value from 0 to 63. (in, out)}
296 p @r{Port address value from 0 to 31. (cbi, sbi, sbic, sbis)}
297 K @r{immediate value from 0 to 63 (used in `adiw', `sbiw')}
298 i @r{immediate value}
299 l @r{signed pc relative offset from -64 to 63}
300 L @r{signed pc relative offset from -2048 to 2047}
301 h @r{absolute code address (call, jmp)}
302 S @r{immediate value from 0 to 7 (S = s << 4)}
303 ? @r{use this opcode entry if no parameters, else use next opcode entry}
304
34bca508
L
3051001010010001000 clc
3061001010011011000 clh
3071001010011111000 cli
3081001010010101000 cln
3091001010011001000 cls
3101001010011101000 clt
3111001010010111000 clv
3121001010010011000 clz
3131001010000001000 sec
3141001010001011000 seh
3151001010001111000 sei
3161001010000101000 sen
3171001010001001000 ses
3181001010001101000 set
3191001010000111000 sev
3201001010000011000 sez
8473f7a4
DC
321100101001SSS1000 bclr S
322100101000SSS1000 bset S
3231001010100001001 icall
34bca508 3241001010000001001 ijmp
8473f7a4
DC
3251001010111001000 lpm ?
3261001000ddddd010+ lpm r,z
3271001010111011000 elpm ?
3281001000ddddd011+ elpm r,z
34bca508
L
3290000000000000000 nop
3301001010100001000 ret
3311001010100011000 reti
8473f7a4
DC
3321001010110001000 sleep
3331001010110011000 break
34bca508
L
3341001010110101000 wdr
3351001010111101000 spm
8473f7a4
DC
336000111rdddddrrrr adc r,r
337000011rdddddrrrr add r,r
338001000rdddddrrrr and r,r
339000101rdddddrrrr cp r,r
340000001rdddddrrrr cpc r,r
341000100rdddddrrrr cpse r,r
342001001rdddddrrrr eor r,r
343001011rdddddrrrr mov r,r
344100111rdddddrrrr mul r,r
345001010rdddddrrrr or r,r
346000010rdddddrrrr sbc r,r
347000110rdddddrrrr sub r,r
348001001rdddddrrrr clr r
349000011rdddddrrrr lsl r
350000111rdddddrrrr rol r
351001000rdddddrrrr tst r
3520111KKKKddddKKKK andi d,M
3530111KKKKddddKKKK cbr d,n
3541110KKKKddddKKKK ldi d,M
35511101111dddd1111 ser d
3560110KKKKddddKKKK ori d,M
3570110KKKKddddKKKK sbr d,M
3580011KKKKddddKKKK cpi d,M
3590100KKKKddddKKKK sbci d,M
3600101KKKKddddKKKK subi d,M
3611111110rrrrr0sss sbrc r,s
3621111111rrrrr0sss sbrs r,s
3631111100ddddd0sss bld r,s
3641111101ddddd0sss bst r,s
36510110PPdddddPPPP in r,P
36610111PPrrrrrPPPP out P,r
36710010110KKddKKKK adiw w,K
36810010111KKddKKKK sbiw w,K
36910011000pppppsss cbi p,s
37010011010pppppsss sbi p,s
37110011001pppppsss sbic p,s
37210011011pppppsss sbis p,s
373111101lllllll000 brcc l
374111100lllllll000 brcs l
375111100lllllll001 breq l
376111101lllllll100 brge l
377111101lllllll101 brhc l
378111100lllllll101 brhs l
379111101lllllll111 brid l
380111100lllllll111 brie l
381111100lllllll000 brlo l
382111100lllllll100 brlt l
383111100lllllll010 brmi l
384111101lllllll001 brne l
385111101lllllll010 brpl l
386111101lllllll000 brsh l
387111101lllllll110 brtc l
388111100lllllll110 brts l
389111101lllllll011 brvc l
390111100lllllll011 brvs l
391111101lllllllsss brbc s,l
392111100lllllllsss brbs s,l
3931101LLLLLLLLLLLL rcall L
3941100LLLLLLLLLLLL rjmp L
3951001010hhhhh111h call h
3961001010hhhhh110h jmp h
3971001010rrrrr0101 asr r
3981001010rrrrr0000 com r
3991001010rrrrr1010 dec r
4001001010rrrrr0011 inc r
4011001010rrrrr0110 lsr r
4021001010rrrrr0001 neg r
4031001000rrrrr1111 pop r
4041001001rrrrr1111 push r
4051001010rrrrr0111 ror r
4061001010rrrrr0010 swap r
40700000001ddddrrrr movw v,v
40800000010ddddrrrr muls d,d
409000000110ddd0rrr mulsu a,a
410000000110ddd1rrr fmul a,a
411000000111ddd0rrr fmuls a,a
412000000111ddd1rrr fmulsu a,a
4131001001ddddd0000 sts i,r
4141001000ddddd0000 lds r,i
41510o0oo0dddddbooo ldd r,b
416100!000dddddee-+ ld r,e
41710o0oo1rrrrrbooo std b,r
418100!001rrrrree-+ st e,r
34bca508
L
4191001010100011001 eicall
4201001010000011001 eijmp
8473f7a4 421@end smallexample
This page took 0.633541 seconds and 4 git commands to generate.