Jcc を使用すると長くなり、インライン アセンブリを使用すると明確ではなくなると思います。
CMOVccを使用して、私が現在持っているものは次のとおりです。
void dump_regs()
{
int eax = 0;
int ebx = 0;
int ecx = 0;
int edx = 0;
int esi = 0;
int エディ = 0;
int ebp = 0;
int esp = 0;
int cf = 0;
int sf = 0;
int zf = 0;
int = 0;
int セット = 1; // -52(%ebp)
asm(
"movl %eax, -4(%ebp)\n\t"
"movl %ebx, -8(%ebp)\n\t"
"movl %ecx, -12(%ebp)\n\t"
"movl %edx, -16(%ebp)\n\t"
"movl %esi, -20(%ebp)\n\t"
"movl %edi, -24(%ebp)\n\t"
"movl %ebp, -28(%ebp)\n\t"
"movl %esp, -32(%ebp)\n\t"
"movl $0, %eax\n\t"
"cmovb -52(%ebp),%eax\n\t" // CF = 1 の場合は移動
"movl %eax, -36(%ebp) \n\t" // cf
"movl $0, %eax\n\t"
"cmovs -52(%ebp),%eax\n\t" // SF = 1 の場合は移動
"movl %eax, -40(%ebp)\n\t" // sf
"movl $0, %eax\n\t"
"cmove -52(%ebp),%eax\n\t" // ZF = 1 の場合は移動
"movl %eax, -44(%ebp)\n\t" // zf
"movl $0, %eax\n\t"
"cmovo -52(%ebp),%eax\n\t" // OF = 1 の場合は移動
"movl %eax, -48(%ebp)\n\t" // of
"movl -4(%ebp), %eax\n\t" // EAX を復元
);
printf("EAX = %#08x\tEBX = %#08x\tECX = %#08x\tEDX = %#08x\n",eax,ebx,ecx,edx);
printf("ESI = %#08x\tEDI = %#08x\tEBP = %#08x\tESP = %#08x\n",esi,edi,ebp,esp);
printf("CF = %d\tSF = %d\tZF = %d\tOF = %d\n",cf,sf,zf,of);
}
まだ解決していない重要なことの 1 つは副作用です。状態を乱すことなくこれを呼び出すことができるようにしたいと考えています。その方向のヒントは大歓迎です。