0
나는 예를 들어 여러 구조체/노동 조합을 가지고 : 내가 예를 들어, 인라인 어셈블리에서의 요소에 액세스 할 필요가사용 노조/구조체 멤버
union
{
uint8_t X;
struct __attribute__((packed, aligned(1)))
{
uint8_t A : 1;
uint8_t B : 1;
uint8_t C : 1;
uint8_t D : 1;
uint8_t E : 1;
uint8_t F : 1;
uint8_t G : 1;
uint8_t H : 1;
};
}DATA;
:
asm volatile
(
"\
mov %1, %%eax \t\n\
inc %%eax \t\n\
mov $0, %0 \t\n\
"
:"=d"(u->X)
:"d"(temp)
);
마지막 줄에 응용 프로그램 segfaults가 있습니다.
미러 포인터를 만들고 구조체를 통해 구조체에 액세스하려고했지만 효과가 없으므로 세그 폴트가 없습니다. 그래서 임시 변수를 사용합니다. 그것은 가능합니까 아니면 이상한 일을하려고합니까?
정말 고마워요. 나는 asm 템플릿의 clobber 부분에 eax를 추가하여이 문제를 해결했다. – pugnator
명명 된 레지스터를 clobber리스트로 옮기는 것은 거의 수정이되지 않았다. (in/out 피연산자를 사용하거나, "+ d" (u-> X)'를 사용하거나 _aliases_/_early clobbers_,' "= & d"(u-> X) : "0"(임시)')를 사용하십시오. _how_ 구조화와 상관없이 코드 결과는'u-> X = 0;과 기능적으로 동일합니다. - 당신이하려는 것은 무엇입니까? –