В C++ struct
(почти) синонимично с class
(кроме другого уровня доступа по умолчанию), таким образом, да, Вы можете.
struct A {
// fields are public by default
};
class B: public A {
// fields are private by default
};
я не знаком с MFC, но он похож на попытку поддержать и C и API C++.
Встроенная сборка, по определению, зависит от компилятора.
Большинство компиляторов, поддерживающих встроенную сборку, имеют синтаксис, позволяющий указать, какие регистры изменяются сборкой. Затем компилятор может сохранить и восстановить эти регистры по мере необходимости.
Это очень специфично для компилятора. Однако для реалистичного примера возьмем 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 для других вещей в блоке.
Подробнее здесь .
Вы можете прочитать об использовании регистров в некоторых соглашениях о вызовах здесь .