Это очень зависит от компилятора. Однако для реалистичного примера возьмем gcc на x86. Формат:
asm ( assembler template
: output operands (optional)
: input operands (optional)
: list of clobbered registers (optional)
);
Где "список засоренных регистров" - вы сообщаете компилятору, который регистрирует ваш код, который используется.
Вот простой код для копирования в память:
asm ("movl $count, %%ecx;
up: lodsl;
stosl;
loop up;"
: /* no output */
:"S"(src), "D"(dst) /* input */
:"%ecx", "%eax" ); /* clobbered list */
Учитывая эти указания, gcc не будет использовать eax и ecx для других вещей в блоке.
Подробнее здесь .