搜索失败的我,所以我直接问它是否有任何方式在C#中使16bit WORD分开访问?像AX这样的东西和另一个常见的寄存器在c ++上它就像
union unsigned short
{
struct
{
char low,high;
} parts;
u16 whole;
} a;
#define ax a.whole
#define al a.parts.low
#define ah a.parts.high
Run Code Online (Sandbox Code Playgroud)
而且我会像它一样使用它
AX = 0x3d5f; 啊= 0×04;
等等.所以问题是 - 有没有任何方法可以做到这一点没有类\结构,我喜欢使用它
AX.h = 0×04
或者那样.
您需要使用[StructLayout]属性,指定LayoutKind.Explicit,以便您可以直接控制字段的位置.然后,对于每个字段,使用[FieldOffset]控制其从结构开始的偏移量.喜欢:
using System.Runtime.InteropServices;
...
[StructLayout(LayoutKind.Explicit)]
struct X86Register {
[FieldOffset(0)] public byte reg8; // Like AL
[FieldOffset(1)] public byte reg8h; // Like AH
[FieldOffset(0)] public ushort reg16; // Like AX
[FieldOffset(0)] public uint reg32; // Like EAX
[FieldOffset(0)] public ulong reg64; // Like RAX
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |