Jcc를 사용하면 인라인 어셈블리를 사용하는 것이 더 길고 명확하지 않을 것이라고 생각합니다. 여기
내가 현재 사용하고, 무엇을 가지고 CMOVcc의 :
void dump_regs()
{
int eax = 0;
int ebx = 0;
int ecx = 0;
int edx = 0;
int esi = 0;
int edi = 0;
int ebp = 0;
int esp = 0;
int cf = 0;
int sf = 0;
int zf = 0;
int of = 0;
int set = 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" // mov if CF = 1
"movl %eax, -36(%ebp) \n\t" // cf
"movl $0, %eax\n\t"
"cmovs -52(%ebp),%eax\n\t" // mov if SF = 1
"movl %eax, -40(%ebp)\n\t" // sf
"movl $0, %eax\n\t"
"cmove -52(%ebp),%eax\n\t" // mov if ZF = 1
"movl %eax, -44(%ebp)\n\t" // zf
"movl $0, %eax\n\t"
"cmovo -52(%ebp),%eax\n\t" // mov if OF = 1
"movl %eax, -48(%ebp)\n\t" // of
"movl -4(%ebp), %eax\n\t" // restore 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);
}
나는 아직 밖으로 일을 내가 상태를 방해하지 않고이 전화를 걸 수 있으려면, 부작용이있다하지 않은 한 가지 중요한 것은, 어떤 그 방향의 팁을 환영합니다.
jmp_buf 구조체에서 레지스터를 재구성하는 방법이 명확하지 않습니다. 여기에 소스를 찾았습니다 : http://ccrma.stanford.edu/courses/250a/docs/avrgcc/setjmp_8h-source.html 레지스터를 변경하지 않는 코드를 생성하는 아이디어는 있습니까? 일부 푸시의 도움이 될 수 있습니다 ... –
나는 전체 EFLAGS 레지스터를 얻는 것을 고려했다 그러나 그 후에 모든 SH * 정확한 비트를 얻는 것은 계속 진행하고있다. Jcc와 내가 생각하고 있었던 것과 비슷합니다. –