gcc c++中eax寄存器结构获取

o2g1uqev  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(165)

如果我使用struct,它将占用内存,这与实际寄存器不同,在实际寄存器中,a1和ah一起构成ax寄存器,并且eax寄存器与ax寄存器合并。如果我使用union,a1和ah值将在real中的相同位置,它们是2个独立的寄存器。我怎样才能获得eax寄存器的结构?我已经注意到在dos. h头(在c中)有“union regs”,它具有我需要的结构。但在我的机器上,没有这样的“union regs”。到目前为止,我尝试过:-

struct regs {
    uint32 eax, ebx, ecx, edx, esi, edi, esp, ebp;
    uint16 ax, bx, cx, dx;
    uint8 ah, al, bh, bl, ch, cl, dh, dl;
};
rdlzhqv9

rdlzhqv91#

@塞巴斯蒂安提到我应该将结构和联合体结合起来得到这样的架构。我不确定嵌套的结构和联合体是否会这样,但我尝试了一下,它起作用了:-

union {int32 eax; union {int16 ax; struct {int8 ah, al;};};} reg_eax;

请注意,只要相同层级的不同成员没有相同的名称,就可以使用没有名称的结构或等位。

相关问题