c++ - 如何在c ++中获取eax寄存器的结构
问题描述
如果我使用结构,它将占用内存,这与实际寄存器不同,其中 al 和 ah 一起构成 ax 寄存器,并且 eax 寄存器与 ax 寄存器合并。如果我使用联合,al 和 ah 值将在同一个地方,实际上它们是 2 个单独的寄存器。如何获取 eax 寄存器的结构?我注意到在 dos.h 标头(在 c 中)有“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;
};
解决方案
@Sebastian 提到我应该结合结构和联合来获得这种架构。我不确定嵌套结构和联合是否会,但我试过了,它奏效了:-
union {int32 eax; union {int16 ax; struct {int8 ah, al;};};} reg_eax;
请注意,只要同一级别的不同成员没有相同的名称,就可以使用不带名称的结构或联合。