user28337: I'd like to program my Arduino using Assembler. We have to learn this at college. 
The problem is that I can find a documentation for the instruction set but I can't find the Special Function Registers. 
Something like this would be great or similar to make a sheet like this by myself.

user13432: 
Where are the Special Function Registers located? (Atmega 328)

Please see Chap. 36 Register Summary, pp. 612, in 
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf
The registers are available "by name" in the AVR IO header files. 
Cheers!

user7508: There are several options for programming the AVR in assembly, but since
you have an Arduino and the Arduino IDE bundles the gcc toolchain, using
this toolchain is probably the easiest way. Besides, if you learn
assembly in the GNU syntax, you will be able to use it together with C++
and the Arduino libraries.
The gnu compiler will run through the C preprocessor any assembly
program having the .S extension (in uppercase). You would then start
your program with
#include <avr/io.h>

in order to get all the SFR definitions from avr-libc. That include file
is intended to work both in C and in assembly. The SFRs so declared
should be considered as opaque identifiers. To get their addresses, you
should use the macros _SFR_IO_ADDR() or _SFR_MEM_ADDR(). I
personally find those names too cumbersome to type, so I tend to
define my own shortcuts.
Just to get you started, here is a minimal “blinky” program in assembly
for the Arduino Uno (ATmega328P with the LED on PB5):
; Blinky in assembly.

#include <avr/io.h>
#define io(reg) _SFR_IO_ADDR(reg)

.global main
main:
    sbi io(DDRB), PB5  ; PB5 as output
0:  sbi io(PINB), PB5  ; toggle PB5

    ; delay 16 * 65536 * 5 cycles ~ 0.31 s
    ldi  r26, 16
1:  sbiw r24, 1
    sbci r26, 0
    brne 1b

    rjmp 0b ; restart


28337: <p>I'd like to program my Arduino using Assembler. We have to learn this at college. 
The problem is that I can find a documentation for the instruction set but I can't find the Special Function Registers. </p>

<p>Something like this would be great or similar to make a sheet like this by myself.</p>
 13432: <blockquote>
  <p>Where are the Special Function Registers located? (Atmega 328)</p>
</blockquote>

<p>Please see Chap. 36 Register Summary, pp. 612, in 
<a href="http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow noreferrer">http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a></p>

<p>The registers are available "by name" in the AVR IO header files. </p>

<p>Cheers!</p>
 7508: <p>There are several options for programming the AVR in assembly, but since
you have an Arduino and the Arduino IDE bundles the gcc toolchain, using
this toolchain is probably the easiest way. Besides, if you learn
assembly in the GNU syntax, you will be able to use it together with C++
and the Arduino libraries.</p>

<p>The gnu compiler will run through the C preprocessor any assembly
program having the <code>.S</code> extension (in uppercase). You would then start
your program with</p>

<pre><code>#include &lt;avr/io.h&gt;
</code></pre>

<p>in order to get all the SFR definitions from avr-libc. That include file
is intended to work both in C and in assembly. The SFRs so declared
should be considered as opaque identifiers. To get their addresses, you
should use the macros <code>_SFR_IO_ADDR()</code> or <code>_SFR_MEM_ADDR()</code>. I
personally find those names too cumbersome to type, so I tend to
<code>define</code> my own shortcuts.</p>

<p>Just to get you started, here is a minimal “blinky” program in assembly
for the Arduino Uno (ATmega328P with the LED on PB5):</p>

<pre><code>; Blinky in assembly.

#include &lt;avr/io.h&gt;
#define io(reg) _SFR_IO_ADDR(reg)

.global main
main:
    sbi io(DDRB), PB5  ; PB5 as output
0:  sbi io(PINB), PB5  ; toggle PB5

    ; delay 16 * 65536 * 5 cycles ~ 0.31 s
    ldi  r26, 16
1:  sbiw r24, 1
    sbci r26, 0
    brne 1b

    rjmp 0b ; restart
</code></pre>
