高/低字节实现的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

高/低字节实现的16位寄存器

您需要使用[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;
        }
    }
}