xref: /netbsd-src/external/gpl3/binutils.old/dist/gas/doc/c-avr.texi (revision e992f068c547fd6e84b3f104dc2340adcc955732)
1@c Copyright (C) 2006-2022 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* AVR Pseudo Instructions::  Pseudo Instructions
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,
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, at90s2333, at90s2343,
41attiny22, attiny26, at90s4414, at90s4433, at90s4434, at90s8515, at90c8534,
42at90s8535).
43
44Instruction set avr25 is for the classic AVR core with up to 8K program memory
45space plus the MOVW instruction (MCU types: attiny13, attiny13a, attiny2313,
46attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84,
47attiny84a, attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461,
48attiny461a, attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
49attiny828, at86rf401, ata6289, ata5272).
50
51Instruction set avr3 is for the classic AVR core with up to 128K program
52memory space (MCU types: at43usb355, at76c711).
53
54Instruction set avr31 is for the classic AVR core with exactly 128K program
55memory space (MCU types: atmega103, at43usb320).
56
57Instruction set avr35 is for classic AVR core plus MOVW, CALL, and JMP
58instructions (MCU types: attiny167, attiny1634, at90usb82, at90usb162,
59atmega8u2, atmega16u2, atmega32u2, ata5505).
60
61Instruction set avr4 is for the enhanced AVR core with up to 8K program
62memory space (MCU types: atmega48, atmega48a, atmega48pa, atmega48p, atmega8,
63atmega8a, atmega88, atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535,
64atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81,
65ata6285, ata6286).
66
67Instruction set avr5 is for the enhanced AVR core with up to 128K program
68memory space (MCU types: at90pwm161, atmega16, atmega16a, atmega161, atmega162,
69atmega163, atmega164a, atmega164p, atmega164pa, atmega165, atmega165a,
70atmega165p, atmega165pa, atmega168, atmega168a, atmega168p, atmega168pa,
71atmega169, atmega169a, atmega169p, atmega169pa, atmega32, atmega323, atmega324a,
72atmega324p, atmega324pa, atmega325, atmega325a, atmega32, atmega32a, atmega323,
73atmega324a, atmega324p, atmega324pa, atmega325, atmega325a, atmega325p,
74atmega325p, atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa,
75atmega328, atmega328p, atmega329, atmega329a, atmega329p, atmega329pa,
76atmega3290a, atmega3290p, atmega3290pa, atmega406, atmega64, atmega64a,
77atmega64rfr2, atmega644rfr2, atmega640, atmega644, atmega644a, atmega644p,
78atmega644pa, atmega645, atmega645a, atmega645p, atmega6450, atmega6450a,
79atmega6450p, atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
80atmega6490p, atmega16hva, atmega16hva2, atmega16hvb, atmega16hvbrevb,
81atmega32hvb, atmega32hvbrevb, atmega64hve, at90can32, at90can64, at90pwm161,
82at90pwm216, at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1,
83atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
84at90scr100, ata5790, ata5795).
85
86Instruction set avr51 is for the enhanced AVR core with exactly 128K
87program memory space (MCU types: atmega128, atmega128a, atmega1280,
88atmega1281, atmega1284, atmega1284p, atmega128rfa1, atmega128rfr2,
89atmega1284rfr2, at90can128, at90usb1286, at90usb1287, m3000).
90
91Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
92(MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2).
93
94Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K
95program memory space and less than 64K data space (MCU types:
96atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1,
97atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5,
98atxmega8e5, atxmega32e5, atxmega32x1).
99
100Instruction set avrxmega3 is for the XMEGA AVR core with up to 64K
101of combined program memory and RAM, and with program memory
102visible in the RAM address space (MCU types:
103attiny212, attiny214, attiny412, attiny414, attiny416, attiny417,
104attiny814, attiny816, attiny817, attiny1614, attiny1616, attiny1617,
105attiny3214, attiny3216, attiny3217).
106
107Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K
108program memory space and less than 64K data space (MCU types:
109atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3,
110atxmega64c3, atxmega64d3, atxmega64d4).
111
112Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K
113program memory space and greater than 64K data space (MCU types:
114atxmega64a1, atxmega64a1u).
115
116Instruction set avrxmega6 is for the XMEGA AVR core with larger than
11764K program memory space and less than 64K data space (MCU types:
118atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3, atxmega128d4,
119atxmega192a3, atxmega192a3u, atxmega128b1, atxmega128b3, atxmega192c3,
120atxmega192d3, atxmega256a3, atxmega256a3u, atxmega256a3b,
121atxmega256a3bu, atxmega256c3, atxmega256d3, atxmega384c3,
122atxmega256d3).
123
124Instruction set avrxmega7 is for the XMEGA AVR core with larger than
12564K program memory space and greater than 64K data space (MCU types:
126atxmega128a1, atxmega128a1u, atxmega128a4u).
127
128Instruction set avrtiny is for the ATtiny4/5/9/10/20/40
129microcontrollers.
130
131@cindex @code{-mall-opcodes} command-line option, AVR
132@item -mall-opcodes
133Accept all AVR opcodes, even if not supported by @code{-mmcu}.
134
135@cindex @code{-mno-skip-bug} command-line option, AVR
136@item -mno-skip-bug
137This option disable warnings for skipping two-word instructions.
138
139@cindex @code{-mno-wrap} command-line option, AVR
140@item -mno-wrap
141This option reject @code{rjmp/rcall} instructions with 8K wrap-around.
142
143@cindex @code{-mrmw} command-line option, AVR
144@item -mrmw
145Accept Read-Modify-Write (@code{XCH,LAC,LAS,LAT}) instructions.
146
147@cindex @code{-mlink-relax} command-line option, AVR
148@item -mlink-relax
149Enable support for link-time relaxation.  This is now on by default
150and this flag no longer has any effect.
151
152@cindex @code{-mno-link-relax} command-line option, AVR
153@item -mno-link-relax
154Disable support for link-time relaxation.  The assembler will resolve
155relocations when it can, and may be able to better compress some debug
156information.
157
158@cindex @code{-mgcc-isr} command-line option, AVR
159@item -mgcc-isr
160Enable the @code{__gcc_isr} pseudo instruction.
161
162@cindex @code{-mno-dollar-line-separator} command line option, AVR
163@item -mno-dollar-line-separator
164Do not treat the @code{$} character as a line separator character.
165This is for languages where @code{$} is valid character inside symbol
166names.
167
168@end table
169
170
171@node AVR Syntax
172@section Syntax
173@menu
174* AVR-Chars::                Special Characters
175* AVR-Regs::                 Register Names
176* AVR-Modifiers::            Relocatable Expression Modifiers
177@end menu
178
179@node AVR-Chars
180@subsection Special Characters
181
182@cindex line comment character, AVR
183@cindex AVR line comment character
184
185The presence of a @samp{;} anywhere on a line indicates the start of a
186comment that extends to the end of that line.
187
188If a @samp{#} appears as the first character of a line, the whole line
189is treated as a comment, but in this case the line can also be a
190logical line number directive (@pxref{Comments}) or a preprocessor
191control command (@pxref{Preprocessing}).
192
193@cindex line separator, AVR
194@cindex statement separator, AVR
195@cindex AVR line separator
196
197The @samp{$} character can be used instead of a newline to separate
198statements.  Note: the @option{-mno-dollar-line-separator} option
199disables this behaviour.
200
201@node AVR-Regs
202@subsection Register Names
203
204@cindex AVR register names
205@cindex register names, AVR
206
207The AVR has 32 x 8-bit general purpose working registers @samp{r0},
208@samp{r1}, ... @samp{r31}.
209Six of the 32 registers can be used as three 16-bit indirect address
210register pointers for Data Space addressing. One of the these address
211pointers can also be used as an address pointer for look up tables in
212Flash program memory. These added function registers are the 16-bit
213@samp{X}, @samp{Y} and @samp{Z} - registers.
214
215@smallexample
216X = @r{r26:r27}
217Y = @r{r28:r29}
218Z = @r{r30:r31}
219@end smallexample
220
221@node AVR-Modifiers
222@subsection Relocatable Expression Modifiers
223
224@cindex AVR modifiers
225@cindex syntax, AVR
226
227The assembler supports several modifiers when using relocatable addresses
228in AVR instruction operands.  The general syntax is the following:
229
230@smallexample
231modifier(relocatable-expression)
232@end smallexample
233
234@table @code
235@cindex symbol modifiers
236
237@item lo8
238
239This modifier allows you to use bits 0 through 7 of
240an address expression as an 8 bit relocatable expression.
241
242@item hi8
243
244This modifier allows you to use bits 7 through 15 of an address expression
245as an 8 bit relocatable expression. This is useful with, for example, the
246AVR @samp{ldi} instruction and @samp{lo8} modifier.
247
248For example
249
250@smallexample
251ldi r26, lo8(sym+10)
252ldi r27, hi8(sym+10)
253@end smallexample
254
255@item hh8
256
257This modifier allows you to use bits 16 through 23 of
258an address expression as an 8 bit relocatable expression.
259Also, can be useful for loading 32 bit constants.
260
261@item hlo8
262
263Synonym of @samp{hh8}.
264
265@item hhi8
266
267This modifier allows you to use bits 24 through 31 of
268an expression as an 8 bit expression. This is useful with, for example, the
269AVR @samp{ldi} instruction and @samp{lo8}, @samp{hi8}, @samp{hlo8},
270@samp{hhi8}, modifier.
271
272For example
273
274@smallexample
275ldi r26, lo8(285774925)
276ldi r27, hi8(285774925)
277ldi r28, hlo8(285774925)
278ldi r29, hhi8(285774925)
279; r29,r28,r27,r26 = 285774925
280@end smallexample
281
282@item pm_lo8
283
284This modifier allows you to use bits 0 through 7 of
285an address expression as an 8 bit relocatable expression.
286This modifier is useful for addressing data or code from
287Flash/Program memory by two-byte words. The use of @samp{pm_lo8}
288is similar to @samp{lo8}.
289
290@item pm_hi8
291
292This modifier allows you to use bits 8 through 15 of
293an address expression as an 8 bit relocatable expression.
294This modifier is useful for addressing data or code from
295Flash/Program memory by two-byte words.
296
297For example, when setting the AVR @samp{Z} register with the @samp{ldi}
298instruction for subsequent use by the @samp{ijmp} instruction:
299
300@smallexample
301ldi r30, pm_lo8(sym)
302ldi r31, pm_hi8(sym)
303ijmp
304@end smallexample
305
306@item pm_hh8
307
308This modifier allows you to use bits 15 through 23 of
309an address expression as an 8 bit relocatable expression.
310This modifier is useful for addressing data or code from
311Flash/Program memory by two-byte words.
312
313@end table
314
315@node AVR Opcodes
316@section Opcodes
317
318@cindex AVR opcode summary
319@cindex opcode summary, AVR
320@cindex mnemonics, AVR
321@cindex instruction summary, AVR
322For detailed information on the AVR machine instruction set, see
323@url{www.atmel.com/products/AVR}.
324
325@code{@value{AS}} implements all the standard AVR opcodes.
326The following table summarizes the AVR opcodes, and their arguments.
327
328@smallexample
329@i{Legend:}
330   r   @r{any register}
331   d   @r{`ldi' register (r16-r31)}
332   v   @r{`movw' even register (r0, r2, ..., r28, r30)}
333   a   @r{`fmul' register (r16-r23)}
334   w   @r{`adiw' register (r24,r26,r28,r30)}
335   e   @r{pointer registers (X,Y,Z)}
336   b   @r{base pointer register and displacement ([YZ]+disp)}
337   z   @r{Z pointer register (for [e]lpm Rd,Z[+])}
338   M   @r{immediate value from 0 to 255}
339   n   @r{immediate value from 0 to 255 ( n = ~M ). Relocation impossible}
340   s   @r{immediate value from 0 to 7}
341   P   @r{Port address value from 0 to 63. (in, out)}
342   p   @r{Port address value from 0 to 31. (cbi, sbi, sbic, sbis)}
343   K   @r{immediate value from 0 to 63 (used in `adiw', `sbiw')}
344   i   @r{immediate value}
345   l   @r{signed pc relative offset from -64 to 63}
346   L   @r{signed pc relative offset from -2048 to 2047}
347   h   @r{absolute code address (call, jmp)}
348   S   @r{immediate value from 0 to 7 (S = s << 4)}
349   ?   @r{use this opcode entry if no parameters, else use next opcode entry}
350
3511001010010001000   clc
3521001010011011000   clh
3531001010011111000   cli
3541001010010101000   cln
3551001010011001000   cls
3561001010011101000   clt
3571001010010111000   clv
3581001010010011000   clz
3591001010000001000   sec
3601001010001011000   seh
3611001010001111000   sei
3621001010000101000   sen
3631001010001001000   ses
3641001010001101000   set
3651001010000111000   sev
3661001010000011000   sez
367100101001SSS1000   bclr    S
368100101000SSS1000   bset    S
3691001010100001001   icall
3701001010000001001   ijmp
3711001010111001000   lpm     ?
3721001000ddddd010+   lpm     r,z
3731001010111011000   elpm    ?
3741001000ddddd011+   elpm    r,z
3750000000000000000   nop
3761001010100001000   ret
3771001010100011000   reti
3781001010110001000   sleep
3791001010110011000   break
3801001010110101000   wdr
3811001010111101000   spm
382000111rdddddrrrr   adc     r,r
383000011rdddddrrrr   add     r,r
384001000rdddddrrrr   and     r,r
385000101rdddddrrrr   cp      r,r
386000001rdddddrrrr   cpc     r,r
387000100rdddddrrrr   cpse    r,r
388001001rdddddrrrr   eor     r,r
389001011rdddddrrrr   mov     r,r
390100111rdddddrrrr   mul     r,r
391001010rdddddrrrr   or      r,r
392000010rdddddrrrr   sbc     r,r
393000110rdddddrrrr   sub     r,r
394001001rdddddrrrr   clr     r
395000011rdddddrrrr   lsl     r
396000111rdddddrrrr   rol     r
397001000rdddddrrrr   tst     r
3980111KKKKddddKKKK   andi    d,M
3990111KKKKddddKKKK   cbr     d,n
4001110KKKKddddKKKK   ldi     d,M
40111101111dddd1111   ser     d
4020110KKKKddddKKKK   ori     d,M
4030110KKKKddddKKKK   sbr     d,M
4040011KKKKddddKKKK   cpi     d,M
4050100KKKKddddKKKK   sbci    d,M
4060101KKKKddddKKKK   subi    d,M
4071111110rrrrr0sss   sbrc    r,s
4081111111rrrrr0sss   sbrs    r,s
4091111100ddddd0sss   bld     r,s
4101111101ddddd0sss   bst     r,s
41110110PPdddddPPPP   in      r,P
41210111PPrrrrrPPPP   out     P,r
41310010110KKddKKKK   adiw    w,K
41410010111KKddKKKK   sbiw    w,K
41510011000pppppsss   cbi     p,s
41610011010pppppsss   sbi     p,s
41710011001pppppsss   sbic    p,s
41810011011pppppsss   sbis    p,s
419111101lllllll000   brcc    l
420111100lllllll000   brcs    l
421111100lllllll001   breq    l
422111101lllllll100   brge    l
423111101lllllll101   brhc    l
424111100lllllll101   brhs    l
425111101lllllll111   brid    l
426111100lllllll111   brie    l
427111100lllllll000   brlo    l
428111100lllllll100   brlt    l
429111100lllllll010   brmi    l
430111101lllllll001   brne    l
431111101lllllll010   brpl    l
432111101lllllll000   brsh    l
433111101lllllll110   brtc    l
434111100lllllll110   brts    l
435111101lllllll011   brvc    l
436111100lllllll011   brvs    l
437111101lllllllsss   brbc    s,l
438111100lllllllsss   brbs    s,l
4391101LLLLLLLLLLLL   rcall   L
4401100LLLLLLLLLLLL   rjmp    L
4411001010hhhhh111h   call    h
4421001010hhhhh110h   jmp     h
4431001010rrrrr0101   asr     r
4441001010rrrrr0000   com     r
4451001010rrrrr1010   dec     r
4461001010rrrrr0011   inc     r
4471001010rrrrr0110   lsr     r
4481001010rrrrr0001   neg     r
4491001000rrrrr1111   pop     r
4501001001rrrrr1111   push    r
4511001010rrrrr0111   ror     r
4521001010rrrrr0010   swap    r
45300000001ddddrrrr   movw    v,v
45400000010ddddrrrr   muls    d,d
455000000110ddd0rrr   mulsu   a,a
456000000110ddd1rrr   fmul    a,a
457000000111ddd0rrr   fmuls   a,a
458000000111ddd1rrr   fmulsu  a,a
4591001001ddddd0000   sts     i,r
4601001000ddddd0000   lds     r,i
46110o0oo0dddddbooo   ldd     r,b
462100!000dddddee-+   ld      r,e
46310o0oo1rrrrrbooo   std     b,r
464100!001rrrrree-+   st      e,r
4651001010100011001   eicall
4661001010000011001   eijmp
467@end smallexample
468
469@node AVR Pseudo Instructions
470@section Pseudo Instructions
471
472The only available pseudo-instruction @code{__gcc_isr} can be activated by
473option @option{-mgcc-isr}.
474
475@table @code
476
477@item __gcc_isr 1
478Emit code chunk to be used in avr-gcc ISR prologue.
479It will expand to at most six 1-word instructions, all optional:
480push of @code{tmp_reg}, push of @code{SREG},
481push and clear of @code{zero_reg}, push of @var{Reg}.
482
483@item __gcc_isr 2
484Emit code chunk to be used in an avr-gcc ISR epilogue.
485It will expand to at most five 1-word instructions, all optional:
486pop of @var{Reg}, pop of @code{zero_reg},
487pop of @code{SREG}, pop of @code{tmp_reg}.
488
489@item __gcc_isr 0, @var{Reg}
490Finish avr-gcc ISR function.  Scan code since the last prologue
491for usage of: @code{SREG}, @code{tmp_reg}, @code{zero_reg}.
492Prologue chunk and epilogue chunks will be replaced by appropriate code
493to save / restore @code{SREG}, @code{tmp_reg}, @code{zero_reg} and @var{Reg}.
494
495@end table
496
497Example input:
498
499@example
500__vector1:
501    __gcc_isr 1
502    lds r24, var
503    inc r24
504    sts var, r24
505    __gcc_isr 2
506    reti
507    __gcc_isr 0, r24
508@end example
509
510Example output:
511
512@example
51300000000 <__vector1>:
514   0:   8f 93           push    r24
515   2:   8f b7           in      r24, 0x3f
516   4:   8f 93           push    r24
517   6:   80 91 60 00     lds     r24, 0x0060     ; 0x800060 <var>
518   a:   83 95           inc     r24
519   c:   80 93 60 00     sts     0x0060, r24     ; 0x800060 <var>
520  10:   8f 91           pop     r24
521  12:   8f bf           out     0x3f, r24
522  14:   8f 91           pop     r24
523  16:   18 95           reti
524@end example
525