高/低字节实现的16位寄存器
本文关键字:16位 寄存器 实现 字节 | 更新日期: 2023-09-27 18:15:00
搜索失败,所以我直接问了在c#中有任何方法可以使16位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
然后像
一样使用ax = 0 x3d5f;啊= 0 x04;
等。所以问题是-有没有办法做到这一点没有类'结构从哪一个我不得不使用它,如
AX.h = 0 x04
您需要使用[StructLayout]属性,指定LayoutKind。显式的,所以你可以直接控制字段的位置。然后,对于每个字段,使用[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
}
c#是一种面向对象的语言。没有类或结构就没有办法做任何事情。
使用类,它将像这样实现:
public class A
{
private byte[] raw;
public A()
{
raw = new byte[2];
}
public byte Low
{
get
{
return raw[0];
}
set
{
raw[0] = value;
}
}
public byte High
{
get
{
return raw[1];
}
set
{
raw[1] = value;
}
}
}