void gbz80_inc(byte* reg)
{
asm volatile (
"movl $0, %1\n" // load 0 to NFLAG
"incb %2\n"
"lahf\n" // get flags
"andb $1,%%bh\n" // carry not affected
"andb $0xFE,%%ah\n"
"orb %%ah, %%bh \n"
: "=b" (flags), "=g" (NFLAG), "=q" (*reg)
: "2" (*reg), "0" (flags)
: "cc", "ah");
}
Собственно код. Первая часть понятно, а вот вторая
: "=b" (flags), "=g" (NFLAG), "=q" (*reg)
: "2" (*reg), "0" (flags)
: "cc", "ah");
не пойму как это до конца работает.
Может кто-нибудь объяснит, расскажет что всё это значит и как устроено. Спасибо.