如何在c ++中获取eax寄存器的结构
Posted
技术标签:
【中文标题】如何在c ++中获取eax寄存器的结构【英文标题】:how to acquire a structure of eax register in c++ 【发布时间】:2021-09-21 13:15:23 【问题描述】:如果我使用 struct,它将占用内存,这与实际寄存器不同,其中 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;
;
【问题讨论】:
如果你想要一个可以写ax
和读ah
的联合,那无论如何都是C++ 中的undefined behavior。
不,我只是想要一个类似于 eax 寄存器结构的结构
你想达到什么目的?有什么你需要它的例子吗?
在eax寄存器中,16个lsb是ax寄存器,那个寄存器的8个msb是ah寄存器,另外8位是al寄存器。我想要在 C++ 中这样的结构。
假设C++没有这样的数据结构。你需要它做什么?也许这件事可以通过不同的方式来实现。
【参考方案1】:
@Sebastian 提到我应该结合结构和联合来获得这种架构。我不确定嵌套结构和联合是否会,但我试过了,它奏效了:-
union int32 eax; union int16 ax; struct int8 ah, al;;; reg_eax;
请注意,只要同一级别的不同成员没有相同的名称,就可以使用不带名称的结构或联合。
【讨论】:
请注意匿名struct
是标准 C l,但仅支持作为 C++ 上的一些编译器的非标准扩展。而且,使用union
强制转换对象在低级编程中很常见,但由于别名规则,这是未定义的行为。因此它可以停止使用其他编译标志或其他编译器。以上是关于如何在c ++中获取eax寄存器的结构的主要内容,如果未能解决你的问题,请参考以下文章