我有几个结构/联合,例如:
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)
);
应用程序段错误在最后一行。
mov (%rdx),%eax
inc %eax
mov $0x0,%dl
mov %dl,0x1(%rax)
我试图创建一个镜像指针并通过它访问struct但它没有效果,只是没有段错误。所以我使用temp变量。是否有可能或我尝试做一些奇怪的事情?
答案 0 :(得分:1)
内联汇编不得更改未列为输出的寄存器或clobber列表中的寄存器。
在您的示例中,编译器已选择在RAX中存储u
,这会被您的代码更改。 EAX是RAX的下半部分。