asm volatile("in %0, $1" : "=r" (value) : "I"
(_SRF_IO_ADDR(PORTD))); asm volatile("cli" : : );
Folgende besonderen Register können benutzt werden:| Symbol |
Register |
| __SREG__ |
Status register 0x3F |
| __SP_H__ __SP_L__ |
Stack Pointer High Byte 0x3E Stack Pointer High Byte 0x3D |
| __tmp_reg__ |
Register r0, Für
kurzzeitige Ablage |
| __zero_reg__ |
Register r1, enthält immer 0 |
| Kennbuchstabe |
Benutzung |
Bereich |
| a |
Einfache Register der oberen
Hälfte |
r16 ... r23 |
| b |
Feldadressen |
y(=r29:r28) z(=r31:r30) |
| d |
Alle Register der oberen
Hälfte |
r16 .. r31 |
| e |
Alle 3 Zeigerregister |
x,y,z |
| G |
Gleitkommakonstante |
0.0 .. ?.???E+??? |
| I |
6-bit-Integer |
0 .. 63 |
| J |
6-bit-Integer, negativ |
-63..0 |
| K |
Integerkonstante |
-32767..32768 oder 32 bit ? |
| L |
Integerkonstante | -32767..32768 oder 32 bit ? |
| l |
Untere Register |
r0 ... r15 |
| M |
8-Bit Ganzzahl |
0...255 |
{
uchar s;
asm volatile(
" in %0,
__SREG__
\n"
"
cli
\n"
" ld __tmp_reg__,
%a1 \n"
" inc
__tmp_reg__
\n"
" st %a1,
__tmp_reg__
\n"
" out __SREG__, %0
\n"
: "=&r" (s)
: "e" (ptr)
: "memory"
);
}