public static void Main() {
var rf = new RegisterFile();
Console.WriteLine($"ax: {rf["ax"]:x4}");
Console.WriteLine($"ah, al: {rf["ah"]:x2},{rf["al"]:x2}");
public ushort this[string name] {
case "ah": return (byte) (ax >> 8);
case "al": return (byte) (ax & 0xff);
default: throw new ArgumentException($"Unknown register {name}.");
case "ax": ax = value; break;
case "bx": bx = value; break;
case "cx": cx = value; break;
case "dx": dx = value; break;
case "ah": ax = (ushort) ((ax & 0xff) | (value << 8)); break;
case "al": ax = (ushort) ((ax & 0xff00) | value); break;
default: throw new ArgumentException($"Unknown register {name}.");