考虑以下示例代码:
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字节先行,但是(后续按顺序读取时字节肯定是大端序)?
0x5AE5
写入内存,则字节序决定它是以 5AE5 还是 E55A 的形式存储进去。 - Marc B