Merge branch 'vendor/NCURSES'
[dragonfly.git] / contrib / binutils-2.24 / gas / doc / c-avr.texi
1 @c Copyright 2006-2013 Free Software Foundation, Inc.
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}
32 Specify ATMEL AVR instruction set or MCU type.
33
34 Instruction set avr1 is for the minimal AVR core, not supported by the C
35 compiler, only for assembler programs (MCU types: at90s1200,
36 attiny11, attiny12, attiny15, attiny28).
37
38 Instruction set avr2 (default) is for the classic AVR core with up to
39 8K program memory space (MCU types: at90s2313, at90s2323, at90s2333, at90s2343,
40 attiny22, attiny26, at90s4414, at90s4433, at90s4434, at90s8515, at90c8534,
41 at90s8535).
42
43 Instruction set avr25 is for the classic AVR core with up to 8K program memory
44 space plus the MOVW instruction (MCU types: attiny13, attiny13a, attiny2313,
45 attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84,
46 attiny84a, attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461,
47 attiny461a, attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
48 at86rf401).
49
50 Instruction set avr3 is for the classic AVR core with up to 128K program
51 memory space (MCU types: at43usb355, at76c711).
52
53 Instruction set avr31 is for the classic AVR core with exactly 128K program
54 memory space (MCU types: atmega103, at43usb320).
55
56 Instruction set avr35 is for classic AVR core plus MOVW, CALL, and JMP
57 instructions (MCU types: attiny167, at90usb82, at90usb162, atmega8u2,
58 atmega16u2, atmega32u2).
59
60 Instruction set avr4 is for the enhanced AVR core with up to 8K program
61 memory space (MCU types: atmega48, atmega48a, atmega48p, atmega8, atmega88,
62 atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1,
63 at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6289).
64
65 Instruction set avr5 is for the enhanced AVR core with up to 128K program
66 memory space (MCU types: atmega16, atmega16a, atmega161, atmega162,
67 atmega163, atmega164a, atmega164p, atmega165, atmega165a, atmega165p,
68 atmega168, atmega168a, atmega168p, atmega169, atmega169a, atmega169p,
69 atmega169pa, atmega32, atmega323, atmega324a, atmega324p, atmega325,
70 atmega325a, atmega325p, atmega325pa, atmega3250, atmega3250a,
71 atmega3250p, atmega3250pa, atmega328, atmega328p, atmega329,
72 atmega329a, atmega329p, atmega329pa, atmega3290, atmega3290a,
73 atmega3290p, atmega3290pa, atmega406, atmega64, atmega640, atmega644,
74 atmega644a, atmega644p, atmega644pa, atmega645, atmega645a,
75 atmega645p, atmega6450, atmega6450a, atmega6450p, atmega649,
76 atmega649a, atmega649p, atmega6490, atmega6490a, atmega6490p,
77 atmega64rfr2, atmega644rfr2, atmega16hva, atmega16hva2, atmega16hvb,
78 atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve, at90can32,
79 at90can64, at90pwm161, at90pwm216, at90pwm316, atmega32c1, atmega64c1,
80 atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4,
81 atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
82
83 Instruction set avr51 is for the enhanced AVR core with exactly 128K program
84 memory space (MCU types: atmega128, atmega1280, atmega1281, atmega1284p,
85 atmega128rfa1,
86 atmega128rfr2, atmega1284rfr2,
87 at90can128, at90usb1286, at90usb1287, m3000).
88
89 Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types:
90 atmega2560, atmega2561,
91 atmega256rfr2, atmega2564rfr2).
92
93 Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program
94 memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16d4,
95 atxmega16x1, atxmega32a4, atxmega32d4, atxmega32x1).
96
97 Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program
98 memory space and greater than 64K data space (MCU types: none).
99
100 Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program
101 memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3).
102
103 Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program
104 memory space and greater than 64K data space (MCU types: atxmega64a1,
105 atxmega64a1u).
106
107 Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program
108 memory space and less than 64K data space (MCU types: atxmega128a3,
109 atxmega128d3, atxmega192a3, atxmega128b1, atxmega192d3, atxmega256a3,
110 atxmega256a3b, atxmega256a3bu, atxmega192d3).
111
112 Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program
113 memory space and greater than 64K data space (MCU types: atxmega128a1,
114 atxmega128a1u).
115
116 @cindex @code{-mall-opcodes} command line option, AVR
117 @item -mall-opcodes
118 Accept all AVR opcodes, even if not supported by @code{-mmcu}.
119
120 @cindex @code{-mno-skip-bug} command line option, AVR
121 @item -mno-skip-bug
122 This option disable warnings for skipping two-word instructions.
123
124 @cindex @code{-mno-wrap} command line option, AVR
125 @item -mno-wrap
126 This option reject @code{rjmp/rcall} instructions with 8K wrap-around.
127
128 @end table
129
130
131 @node AVR Syntax
132 @section Syntax
133 @menu
134 * AVR-Chars::                Special Characters
135 * AVR-Regs::                 Register Names
136 * AVR-Modifiers::            Relocatable Expression Modifiers
137 @end menu
138
139 @node AVR-Chars
140 @subsection Special Characters
141
142 @cindex line comment character, AVR
143 @cindex AVR line comment character
144
145 The presence of a @samp{;} anywhere on a line indicates the start of a
146 comment that extends to the end of that line.
147
148 If a @samp{#} appears as the first character of a line, the whole line
149 is treated as a comment, but in this case the line can also be a
150 logical line number directive (@pxref{Comments}) or a preprocessor
151 control command (@pxref{Preprocessing}).
152
153 @cindex line separator, AVR
154 @cindex statement separator, AVR
155 @cindex AVR line separator
156
157 The @samp{$} character can be used instead of a newline to separate
158 statements.
159
160 @node AVR-Regs
161 @subsection Register Names
162
163 @cindex AVR register names
164 @cindex register names, AVR
165
166 The AVR has 32 x 8-bit general purpose working registers @samp{r0},
167 @samp{r1}, ... @samp{r31}.
168 Six of the 32 registers can be used as three 16-bit indirect address
169 register pointers for Data Space addressing. One of the these address
170 pointers can also be used as an address pointer for look up tables in
171 Flash program memory. These added function registers are the 16-bit
172 @samp{X}, @samp{Y} and @samp{Z} - registers.
173
174 @smallexample
175 X = @r{r26:r27}
176 Y = @r{r28:r29}
177 Z = @r{r30:r31}
178 @end smallexample
179
180 @node AVR-Modifiers
181 @subsection Relocatable Expression Modifiers
182
183 @cindex AVR modifiers
184 @cindex syntax, AVR
185
186 The assembler supports several modifiers when using relocatable addresses
187 in AVR instruction operands.  The general syntax is the following:
188
189 @smallexample
190 modifier(relocatable-expression)
191 @end smallexample
192
193 @table @code
194 @cindex symbol modifiers
195
196 @item lo8
197
198 This modifier allows you to use bits 0 through 7 of
199 an address expression as 8 bit relocatable expression.
200
201 @item hi8
202
203 This modifier allows you to use bits 7 through 15 of an address expression
204 as 8 bit relocatable expression.  This is useful with, for example, the
205 AVR @samp{ldi} instruction and @samp{lo8} modifier.
206
207 For example
208
209 @smallexample
210 ldi r26, lo8(sym+10)
211 ldi r27, hi8(sym+10)
212 @end smallexample
213
214 @item hh8
215
216 This modifier allows you to use bits 16 through 23 of
217 an address expression as 8 bit relocatable expression.
218 Also, can be useful for loading 32 bit constants.
219
220 @item hlo8
221
222 Synonym of @samp{hh8}.
223
224 @item hhi8
225
226 This modifier allows you to use bits 24 through 31 of
227 an expression as 8 bit expression. This is useful with, for example, the
228 AVR @samp{ldi} instruction and @samp{lo8}, @samp{hi8}, @samp{hlo8},
229 @samp{hhi8}, modifier.
230
231 For example
232
233 @smallexample
234 ldi r26, lo8(285774925)
235 ldi r27, hi8(285774925)
236 ldi r28, hlo8(285774925)
237 ldi r29, hhi8(285774925)
238 ; r29,r28,r27,r26 = 285774925
239 @end smallexample
240
241 @item pm_lo8
242
243 This modifier allows you to use bits 0 through 7 of
244 an address expression as 8 bit relocatable expression.
245 This modifier useful for addressing data or code from
246 Flash/Program memory. The using of @samp{pm_lo8} similar
247 to @samp{lo8}.
248
249 @item pm_hi8
250
251 This modifier allows you to use bits 8 through 15 of
252 an address expression as 8 bit relocatable expression.
253 This modifier useful for addressing data or code from
254 Flash/Program memory.
255
256 @item pm_hh8
257
258 This modifier allows you to use bits 15 through 23 of
259 an address expression as 8 bit relocatable expression.
260 This modifier useful for addressing data or code from
261 Flash/Program memory.
262
263 @end table
264
265 @node AVR Opcodes
266 @section Opcodes
267
268 @cindex AVR opcode summary
269 @cindex opcode summary, AVR
270 @cindex mnemonics, AVR
271 @cindex instruction summary, AVR
272 For detailed information on the AVR machine instruction set, see
273 @url{www.atmel.com/products/AVR}.
274
275 @code{@value{AS}} implements all the standard AVR opcodes.
276 The following table summarizes the AVR opcodes, and their arguments.
277
278 @smallexample
279 @i{Legend:}
280    r   @r{any register}
281    d   @r{`ldi' register (r16-r31)}
282    v   @r{`movw' even register (r0, r2, ..., r28, r30)}
283    a   @r{`fmul' register (r16-r23)}
284    w   @r{`adiw' register (r24,r26,r28,r30)}
285    e   @r{pointer registers (X,Y,Z)}
286    b   @r{base pointer register and displacement ([YZ]+disp)}
287    z   @r{Z pointer register (for [e]lpm Rd,Z[+])}
288    M   @r{immediate value from 0 to 255}
289    n   @r{immediate value from 0 to 255 ( n = ~M ). Relocation impossible}
290    s   @r{immediate value from 0 to 7}
291    P   @r{Port address value from 0 to 63. (in, out)}
292    p   @r{Port address value from 0 to 31. (cbi, sbi, sbic, sbis)}
293    K   @r{immediate value from 0 to 63 (used in `adiw', `sbiw')}
294    i   @r{immediate value}
295    l   @r{signed pc relative offset from -64 to 63}
296    L   @r{signed pc relative offset from -2048 to 2047}
297    h   @r{absolute code address (call, jmp)}
298    S   @r{immediate value from 0 to 7 (S = s << 4)}
299    ?   @r{use this opcode entry if no parameters, else use next opcode entry}
300
301 1001010010001000   clc
302 1001010011011000   clh
303 1001010011111000   cli
304 1001010010101000   cln
305 1001010011001000   cls
306 1001010011101000   clt
307 1001010010111000   clv
308 1001010010011000   clz
309 1001010000001000   sec
310 1001010001011000   seh
311 1001010001111000   sei
312 1001010000101000   sen
313 1001010001001000   ses
314 1001010001101000   set
315 1001010000111000   sev
316 1001010000011000   sez
317 100101001SSS1000   bclr    S
318 100101000SSS1000   bset    S
319 1001010100001001   icall
320 1001010000001001   ijmp
321 1001010111001000   lpm     ?
322 1001000ddddd010+   lpm     r,z
323 1001010111011000   elpm    ?
324 1001000ddddd011+   elpm    r,z
325 0000000000000000   nop
326 1001010100001000   ret
327 1001010100011000   reti
328 1001010110001000   sleep
329 1001010110011000   break
330 1001010110101000   wdr
331 1001010111101000   spm
332 000111rdddddrrrr   adc     r,r
333 000011rdddddrrrr   add     r,r
334 001000rdddddrrrr   and     r,r
335 000101rdddddrrrr   cp      r,r
336 000001rdddddrrrr   cpc     r,r
337 000100rdddddrrrr   cpse    r,r
338 001001rdddddrrrr   eor     r,r
339 001011rdddddrrrr   mov     r,r
340 100111rdddddrrrr   mul     r,r
341 001010rdddddrrrr   or      r,r
342 000010rdddddrrrr   sbc     r,r
343 000110rdddddrrrr   sub     r,r
344 001001rdddddrrrr   clr     r
345 000011rdddddrrrr   lsl     r
346 000111rdddddrrrr   rol     r
347 001000rdddddrrrr   tst     r
348 0111KKKKddddKKKK   andi    d,M
349 0111KKKKddddKKKK   cbr     d,n
350 1110KKKKddddKKKK   ldi     d,M
351 11101111dddd1111   ser     d
352 0110KKKKddddKKKK   ori     d,M
353 0110KKKKddddKKKK   sbr     d,M
354 0011KKKKddddKKKK   cpi     d,M
355 0100KKKKddddKKKK   sbci    d,M
356 0101KKKKddddKKKK   subi    d,M
357 1111110rrrrr0sss   sbrc    r,s
358 1111111rrrrr0sss   sbrs    r,s
359 1111100ddddd0sss   bld     r,s
360 1111101ddddd0sss   bst     r,s
361 10110PPdddddPPPP   in      r,P
362 10111PPrrrrrPPPP   out     P,r
363 10010110KKddKKKK   adiw    w,K
364 10010111KKddKKKK   sbiw    w,K
365 10011000pppppsss   cbi     p,s
366 10011010pppppsss   sbi     p,s
367 10011001pppppsss   sbic    p,s
368 10011011pppppsss   sbis    p,s
369 111101lllllll000   brcc    l
370 111100lllllll000   brcs    l
371 111100lllllll001   breq    l
372 111101lllllll100   brge    l
373 111101lllllll101   brhc    l
374 111100lllllll101   brhs    l
375 111101lllllll111   brid    l
376 111100lllllll111   brie    l
377 111100lllllll000   brlo    l
378 111100lllllll100   brlt    l
379 111100lllllll010   brmi    l
380 111101lllllll001   brne    l
381 111101lllllll010   brpl    l
382 111101lllllll000   brsh    l
383 111101lllllll110   brtc    l
384 111100lllllll110   brts    l
385 111101lllllll011   brvc    l
386 111100lllllll011   brvs    l
387 111101lllllllsss   brbc    s,l
388 111100lllllllsss   brbs    s,l
389 1101LLLLLLLLLLLL   rcall   L
390 1100LLLLLLLLLLLL   rjmp    L
391 1001010hhhhh111h   call    h
392 1001010hhhhh110h   jmp     h
393 1001010rrrrr0101   asr     r
394 1001010rrrrr0000   com     r
395 1001010rrrrr1010   dec     r
396 1001010rrrrr0011   inc     r
397 1001010rrrrr0110   lsr     r
398 1001010rrrrr0001   neg     r
399 1001000rrrrr1111   pop     r
400 1001001rrrrr1111   push    r
401 1001010rrrrr0111   ror     r
402 1001010rrrrr0010   swap    r
403 00000001ddddrrrr   movw    v,v
404 00000010ddddrrrr   muls    d,d
405 000000110ddd0rrr   mulsu   a,a
406 000000110ddd1rrr   fmul    a,a
407 000000111ddd0rrr   fmuls   a,a
408 000000111ddd1rrr   fmulsu  a,a
409 1001001ddddd0000   sts     i,r
410 1001000ddddd0000   lds     r,i
411 10o0oo0dddddbooo   ldd     r,b
412 100!000dddddee-+   ld      r,e
413 10o0oo1rrrrrbooo   std     b,r
414 100!001rrrrree-+   st      e,r
415 1001010100011001   eicall
416 1001010000011001   eijmp
417 @end smallexample