首页 > 解决方案 > 如何在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;
};

标签: c++gccstructunioncpu-registers

解决方案


@Sebastian 提到我应该结合结构和联合来获得这种架构。我不确定嵌套结构和联合是否会,但我试过了,它奏效了:-

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

请注意,只要同一级别的不同成员没有相同的名称,就可以使用不带名称的结构或联合。


推荐阅读