考虑这个示例代码:
ZilogZ80A cpu = new ZilogZ80A();
cpu.GeneralRegisters.H.FromUInt(229);
cpu.GeneralRegisters.L.FromUInt(90);
Console.WriteLine("H : " + cpu.GeneralRegisters.H.ToString());
Console.WriteLine("L : " + cpu.GeneralRegisters.L.ToString());
Console.WriteLine("HL: " + cpu.GeneralRegisters.HL.ToString());
Console.WriteLine("Load 23268 (0x5AE4) into register HL...");
cpu.GeneralRegisters.HL.FromUInt(23268);
Console.WriteLine("H : " + cpu.GeneralRegisters.H.ToString());
Console.WriteLine("L : " + cpu.GeneralRegisters.L.ToString());
Console.WriteLine("HL: " + cpu.GeneralRegisters.HL.ToString());
正在执行以下操作:
- 将 229(十进制)加载到寄存器 H
- 将 90(十进制)加载到寄存器 L
- 打印出 H、L 和 HL 寄存器的值(十六进制、二进制 MSB、十进制)
- 将 23268(十进制)加载到寄存器 HL
- 再次打印出 H、L 和 HL 寄存器的值。
样本输出:
H : 08-bit length register (@45653674): 0x00E5 | MSB 0b11100101 | 229
L : 08-bit length register (@41149443): 0x005A | MSB 0b01011010 | 90
HL: 16-bit length register (@39785641): 0x5AE5 | MSB 0b01011010 11100101 | 23269
Load 23268 (0x5AE4 into register HL...
H : 08-bit length register (@45653674): 0x00E4 | MSB 0b11100100 | 228
L : 08-bit length register (@41149443): 0x005A | MSB 0b01011010 | 90
HL: 16-bit length register (@39785641): 0x5AE4 | MSB 0b01011010 11100100 | 23268
现在的问题:
- 上述关于寄存器功能的假设(和示例输出)是否正确?
- 其他寄存器对(AF、BC、DE)的功能是否完全相同?
- 如果 1. 和 2. 的答案是肯定的,那么为什么 Z80 被认为是小端序?当 HL 寄存器内容被写入内存时,L 字节首先出现,但是(当随后按顺序读取它们时,字节肯定是大端序)?