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"
);
}